diff --git a/README.md b/README.md index 54cc045..64d7681 100644 --- a/README.md +++ b/README.md @@ -5,3 +5,6 @@ Pfennig is the Cloneable Reference Implementation of [Bitmark](https://github.co Pfennig benefits from being based on both the latest release of Bitmark, and the latest release of Bitcoin, with all BIPs unconditionally supported, all tests passing, and a clean code base. For configuration details see the [wiki](https://github.com/project-bitmark/pfennig/wiki) + + +Genesis switch line 3174 of src/main.cpp diff --git a/configure.ac b/configure.ac index 9693113..e7b51d5 100644 --- a/configure.ac +++ b/configure.ac @@ -3,10 +3,10 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 0) define(_CLIENT_VERSION_MINOR, 9) define(_CLIENT_VERSION_REVISION, 4) -define(_CLIENT_VERSION_BUILD, 0) +define(_CLIENT_VERSION_BUILD, 3) define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2015) -AC_INIT([Pfennig Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[info@bitmark.org],[bitmark]) +AC_INIT([Pfennig Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[info@bitmark.org],[pfennig]) AC_CONFIG_AUX_DIR([src/build-aux]) AC_CONFIG_MACRO_DIR([src/m4]) AC_CANONICAL_HOST diff --git a/contrib/README.md~ b/contrib/README.md~ new file mode 100644 index 0000000..5a8a5fd --- /dev/null +++ b/contrib/README.md~ @@ -0,0 +1,60 @@ +Wallet Tools +--------------------- + +### [BitRPC](/contrib/bitrpc) ### +Allows for sending of all standard Bitmark 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 Bitmark. 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 Bitmark network. This means one can have an always-on gamecreditsd instance running, and another local gamecreditsd/gamecredits-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 gamecreditsd/gamecredits-qt +for Debian-based Linux systems. If you compile gamecreditsd/gamecredits-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 Bitmark 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/bitmarkd.bash-completion~ b/contrib/bitmarkd.bash-completion~ new file mode 100644 index 0000000..f02b9bb --- /dev/null +++ b/contrib/bitmarkd.bash-completion~ @@ -0,0 +1,141 @@ +# bash programmable completion for gamecreditsd(1) and gamecredits-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. + +have gamecreditsd && { + +# call $gamecreditsd for RPC +_bitmark_rpc() { + # determine already specified args necessary for RPC + local rpcargs=() + for i in ${COMP_LINE}; do + case "$i" in + -conf=*|-proxy*|-rpc*) + rpcargs=( "${rpcargs[@]}" "$i" ) + ;; + esac + done + $gamecreditsd "${rpcargs[@]}" "$@" +} + +# Add bitmark accounts to COMPREPLY +_bitmark_accounts() { + local accounts + accounts=$(_bitmark_rpc listaccounts | awk '/".*"/ { a=$1; gsub(/"/, "", a); print a}') + COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W "$accounts" -- "$cur" ) ) +} + +_gamecreditsd() { + local cur prev words=() cword + local gamecreditsd + + # save and use original argument to invoke gamecreditsd + # gamecreditsd might not be in $PATH + gamecreditsd="$1" + + 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) + _bitmark_accounts + return 0 + ;; + gettxout|importprivkey) + COMPREPLY=( $( compgen -W "true false" -- "$cur" ) ) + return 0 + ;; + esac + fi + + if ((cword > 2)); then + case ${words[cword-2]} in + addnode) + COMPREPLY=( $( compgen -W "add remove onetry" -- "$cur" ) ) + return 0 + ;; + getblock|getrawtransaction|listreceivedbyaccount|listreceivedbyaddress|sendrawtransaction) + COMPREPLY=( $( compgen -W "true false" -- "$cur" ) ) + return 0 + ;; + move|setaccount) + _bitmark_accounts + return 0 + ;; + esac + fi + + case "$prev" in + backupwallet|dumpwallet|importwallet) + _filedir + return 0 + ;; + getmempool|lockunspent|setgenerate) + COMPREPLY=( $( compgen -W "true false" -- "$cur" ) ) + return 0 + ;; + getaccountaddress|getaddressesbyaccount|getbalance|getnewaddress|getreceivedbyaccount|listtransactions|move|sendfrom|sendmany) + _bitmark_accounts + return 0 + ;; + esac + + case "$cur" in + -conf=*|-pid=*|-loadblock=*|-wallet=*|-rpcsslcertificatechainfile=*|-rpcsslprivatekeyfile=*) + cur="${cur#*=}" + _filedir + return 0 + ;; + -datadir=*) + cur="${cur#*=}" + _filedir -d + return 0 + ;; + -*=*) # prevent nonsense completions + return 0 + ;; + *) + local helpopts commands + + # only parse --help if senseful + if [[ -z "$cur" || "$cur" =~ ^- ]]; then + helpopts=$($gamecreditsd --help 2>&1 | awk '$1 ~ /^-/ { sub(/=.*/, "="); print $1 }' ) + fi + + # only parse help if senseful + if [[ -z "$cur" || "$cur" =~ ^[a-z] ]]; then + commands=$(_bitmark_rpc help 2>/dev/null | awk '{ print $1; }') + fi + + COMPREPLY=( $( compgen -W "$helpopts $commands" -- "$cur" ) ) + + # Prevent space if an argument is desired + if [[ $COMPREPLY == *= ]]; then + compopt -o nospace + fi + return 0 + ;; + esac +} + +complete -F _gamecreditsd gamecreditsd gamecredits-cli +} + +# Local variables: +# mode: shell-script +# sh-basic-offset: 4 +# sh-indent-comment: t +# indent-tabs-mode: nil +# End: +# ex: ts=4 sw=4 et filetype=sh diff --git a/contrib/bitrpc/bitrpc.py b/contrib/bitrpc/bitrpc.py index 0a3d870..4e042a9 100644 --- a/contrib/bitrpc/bitrpc.py +++ b/contrib/bitrpc/bitrpc.py @@ -11,9 +11,9 @@ if rpcpass == "": - access = ServiceProxy("http://127.0.0.1:RPCPORT") + access = ServiceProxy("http://127.0.0.1:40001") else: - access = ServiceProxy("http://"+rpcuser+":"+rpcpass+"@127.0.0.1:RPCPORT") + access = ServiceProxy("http://"+rpcuser+":"+rpcpass+"@127.0.0.1:40001") cmd = sys.argv[1].lower() if cmd == "backupwallet": diff --git a/contrib/gitian-descriptors/deps-linux.yml b/contrib/gitian-descriptors/deps-linux.yml index 816904d..132dce2 100644 --- a/contrib/gitian-descriptors/deps-linux.yml +++ b/contrib/gitian-descriptors/deps-linux.yml @@ -1,5 +1,5 @@ --- -name: "bitmark" +name: "pfennig" suites: - "precise" architectures: @@ -95,4 +95,4 @@ script: | done # cd $STAGING - find include lib bin host | sort | zip -X@ $OUTDIR/bitmark-deps-linux${GBUILD_BITS}-gitian-r9.zip + find include lib bin host | sort | zip -X@ $OUTDIR/pfennig-deps-linux${GBUILD_BITS}-gitian-r9.zip diff --git a/contrib/gitian-descriptors/deps-linux.yml~ b/contrib/gitian-descriptors/deps-linux.yml~ new file mode 100644 index 0000000..884de95 --- /dev/null +++ b/contrib/gitian-descriptors/deps-linux.yml~ @@ -0,0 +1,98 @@ +--- +name: "gamecredits" +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.1k.tar.gz" +- "miniupnpc-1.9.20140701.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 "8f9faeaebad088e772f4ef5e38252d472be4d878c6b3a2718c10a4fcebe7a41c openssl-1.0.1k.tar.gz" | sha256sum -c + echo "26f3985bad7768b8483b793448ae49414cdc4451d0ec83e7c1944367e15f9f07 miniupnpc-1.9.20140701.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.1k.tar.gz + cd openssl-1.0.1k + # 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.20140701.tar.gz + cd miniupnpc-1.9.20140701 + # 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/gamecredits-deps-linux${GBUILD_BITS}-gitian-r9.zip diff --git a/contrib/gitian-descriptors/deps-win.yml b/contrib/gitian-descriptors/deps-win.yml index 338e917..df8b1c7 100644 --- a/contrib/gitian-descriptors/deps-win.yml +++ b/contrib/gitian-descriptors/deps-win.yml @@ -1,5 +1,5 @@ --- -name: "bitmark-deps" +name: "pfennig-deps" suites: - "precise" architectures: @@ -124,5 +124,5 @@ script: | done # cd $INSTALLPREFIX - find include lib | sort | zip -X@ $OUTDIR/bitmark-deps-win$BITS-gitian-r16.zip + find include lib | sort | zip -X@ $OUTDIR/pfennig-deps-win$BITS-gitian-r16.zip done # for BITS in diff --git a/contrib/gitian-descriptors/deps-win.yml~ b/contrib/gitian-descriptors/deps-win.yml~ new file mode 100644 index 0000000..779f0f9 --- /dev/null +++ b/contrib/gitian-descriptors/deps-win.yml~ @@ -0,0 +1,128 @@ +--- +name: "gamecredits-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.1k.tar.gz" +- "db-4.8.30.NC.tar.gz" +- "miniupnpc-1.9.20140701.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 "8f9faeaebad088e772f4ef5e38252d472be4d878c6b3a2718c10a4fcebe7a41c openssl-1.0.1k.tar.gz" | sha256sum -c + echo "12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef db-4.8.30.NC.tar.gz" | sha256sum -c + echo "26f3985bad7768b8483b793448ae49414cdc4451d0ec83e7c1944367e15f9f07 miniupnpc-1.9.20140701.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.1k.tar.gz + cd openssl-1.0.1k + 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.20140701.tar.gz + cd miniupnpc-1.9.20140701 + 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/gamecredits-deps-win$BITS-gitian-r16.zip + done # for BITS in diff --git a/contrib/gitian-descriptors/gitian-linux.yml b/contrib/gitian-descriptors/gitian-linux.yml index d775bee..aace599 100644 --- a/contrib/gitian-descriptors/gitian-linux.yml +++ b/contrib/gitian-descriptors/gitian-linux.yml @@ -1,5 +1,5 @@ --- -name: "bitmark" +name: "pfennig" suites: - "precise" architectures: @@ -22,11 +22,11 @@ packages: - "libqt4-test" reference_datetime: "2013-06-01 00:00:00" remotes: -- "url": "https://github.com/project-bitmark/pfennig.git" - "dir": "bitmark" +- "url": "https://github.com/noise23/pfennig.git" + "dir": "pfennig" files: -- "bitmark-deps-linux32-gitian-r9.zip" -- "bitmark-deps-linux64-gitian-r9.zip" +- "pfennig-deps-linux32-gitian-r9.zip" +- "pfennig-deps-linux64-gitian-r9.zip" - "boost-linux32-1.55.0-gitian-r1.zip" - "boost-linux64-1.55.0-gitian-r1.zip" - "qt-linux32-4.8.6-gitian-r1.tar.gz" @@ -43,13 +43,13 @@ script: | # mkdir -p $STAGING cd $STAGING - unzip ../build/bitmark-deps-linux${GBUILD_BITS}-gitian-r9.zip + unzip ../build/pfennig-deps-linux${GBUILD_BITS}-gitian-r9.zip unzip ../build/boost-linux${GBUILD_BITS}-1.55.0-gitian-r1.zip tar -zxf ../build/qt-linux${GBUILD_BITS}-4.8.6-gitian-r1.tar.gz cd ../build # Avoid exporting *any* symbols from the executable - # This avoids conflicts between the libraries statically linked into bitmark and any + # This avoids conflicts between the libraries statically linked into pfennig 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. @@ -59,14 +59,14 @@ script: | 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=bitmark ${OPTFLAGS}" BOOST_CHRONO_EXTRALIBS="-lrt" --enable-glibc-back-compat + ./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=pfennig ${OPTFLAGS}" BOOST_CHRONO_EXTRALIBS="-lrt" --enable-glibc-back-compat } # - cd bitmark + cd pfennig ./autogen.sh do_configure make dist - DISTNAME=`echo bitmark-*.tar.gz` + DISTNAME=`echo pfennig-*.tar.gz` # Build dynamic versions of everything # (with static linking to boost and openssl as well a some non-OS deps) @@ -83,4 +83,4 @@ script: | rm -rf $TEMPDIR mkdir -p $TEMPDIR cd $TEMPDIR - tar -xvf $HOME/build/bitmark/$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 + tar -xvf $HOME/build/pfennig/$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-linux.yml~ b/contrib/gitian-descriptors/gitian-linux.yml~ new file mode 100644 index 0000000..b6c582b --- /dev/null +++ b/contrib/gitian-descriptors/gitian-linux.yml~ @@ -0,0 +1,86 @@ +--- +name: "gamecredits" +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/noise23/gamecredits.git" + "dir": "gamecredits" +files: +- "gamecredits-deps-linux32-gitian-r9.zip" +- "gamecredits-deps-linux64-gitian-r9.zip" +- "boost-linux32-1.55.0-gitian-r1.zip" +- "boost-linux64-1.55.0-gitian-r1.zip" +- "qt-linux32-4.8.6-gitian-r1.tar.gz" +- "qt-linux64-4.8.6-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/gamecredits-deps-linux${GBUILD_BITS}-gitian-r9.zip + unzip ../build/boost-linux${GBUILD_BITS}-1.55.0-gitian-r1.zip + tar -zxf ../build/qt-linux${GBUILD_BITS}-4.8.6-gitian-r1.tar.gz + cd ../build + + # Avoid exporting *any* symbols from the executable + # This avoids conflicts between the libraries statically linked into gamecredits 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=gamecredits ${OPTFLAGS}" BOOST_CHRONO_EXTRALIBS="-lrt" --enable-glibc-back-compat + } + # + cd gamecredits + ./autogen.sh + do_configure + make dist + DISTNAME=`echo gamecredits-*.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/gamecredits/$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-bitmark.yml b/contrib/gitian-descriptors/gitian-osx-bitmark.yml index 461764b..0371387 100644 --- a/contrib/gitian-descriptors/gitian-osx-bitmark.yml +++ b/contrib/gitian-descriptors/gitian-osx-bitmark.yml @@ -1,5 +1,5 @@ --- -name: "bitmark" +name: "pfennig" suites: - "precise" architectures: @@ -14,8 +14,8 @@ packages: reference_datetime: "2013-06-01 00:00:00" remotes: -- "url": "https://github.com/project-bitmark/bitmark.git" - "dir": "bitmark" +- "url": "https://github.com/noise23/pfennig.git" + "dir": "pfennig" files: - "osx-native-depends-r3.tar.gz" - "osx-depends-r7.tar.gz" @@ -41,7 +41,7 @@ script: | tar -C osx-cross-depends -xf osx-depends-qt-5.2.1-r6.tar.gz export PATH=`pwd`/osx-cross-depends/native-prefix/bin:$PATH - cd bitmark + cd pfennig export ZERO_AR_DATE=1 export QT_RCC_TEST=1 @@ -50,7 +50,7 @@ script: | make dist mkdir -p distsrc cd distsrc - tar --strip-components=1 -xf ../bitmark-*.tar* + tar --strip-components=1 -xf ../pfennig-*.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 diff --git a/contrib/gitian-descriptors/gitian-osx-bitmark.yml~ b/contrib/gitian-descriptors/gitian-osx-bitmark.yml~ new file mode 100644 index 0000000..f66e277 --- /dev/null +++ b/contrib/gitian-descriptors/gitian-osx-bitmark.yml~ @@ -0,0 +1,60 @@ +--- +name: "gamecredits" +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/noise23/gamecredits.git" + "dir": "gamecredits" +files: +- "osx-native-depends-r3.tar.gz" +- "osx-depends-r7.tar.gz" +- "osx-depends-qt-5.2.1-r6.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-r7.tar.gz + tar -C osx-cross-depends -xf osx-depends-qt-5.2.1-r6.tar.gz + export PATH=`pwd`/osx-cross-depends/native-prefix/bin:$PATH + + cd gamecredits + + 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 ../gamecredits-*.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 GameCredits-Qt.dmg $OUTDIR/GameCredits-Qt.dmg diff --git a/contrib/gitian-descriptors/gitian-win.yml b/contrib/gitian-descriptors/gitian-win.yml index a3866e7..5ed25bf 100644 --- a/contrib/gitian-descriptors/gitian-win.yml +++ b/contrib/gitian-descriptors/gitian-win.yml @@ -1,5 +1,5 @@ --- -name: "bitmark" +name: "pfennig" suites: - "precise" architectures: @@ -19,15 +19,15 @@ packages: reference_datetime: "2013-06-01 00:00:00" remotes: -- "url": "https://github.com/project-bitmark/bitmark.git" - "dir": "bitmark" +- "url": "https://github.com/noise23/pfennig.git" + "dir": "pfennig" files: - "qt-win32-5.2.0-gitian-r3.zip" - "qt-win64-5.2.0-gitian-r3.zip" - "boost-win32-1.55.0-gitian-r6.zip" - "boost-win64-1.55.0-gitian-r6.zip" -- "bitmark-deps-win32-gitian-r16.zip" -- "bitmark-deps-win64-gitian-r16.zip" +- "pfennig-deps-win32-gitian-r16.zip" +- "pfennig-deps-win64-gitian-r16.zip" - "protobuf-win32-2.5.0-gitian-r4.zip" - "protobuf-win64-2.5.0-gitian-r4.zip" script: | @@ -61,29 +61,29 @@ script: | cd $STAGING unzip $INDIR/qt-win${BITS}-5.2.0-gitian-r3.zip unzip $INDIR/boost-win${BITS}-1.55.0-gitian-r6.zip - unzip $INDIR/bitmark-deps-win${BITS}-gitian-r16.zip + unzip $INDIR/pfennig-deps-win${BITS}-gitian-r16.zip unzip $INDIR/protobuf-win${BITS}-2.5.0-gitian-r4.zip if [ "$NEEDDIST" == "1" ]; then # Make source code archive which is architecture independent so it only needs to be done once - cd $HOME/build/bitmark + cd $HOME/build/pfennig ./autogen.sh - ./configure --bindir=$OUTDIR --prefix=$STAGING --host=$HOST --with-qt-plugindir=$STAGING/plugins --with-qt-incdir=$STAGING/include --with-qt-bindir=$STAGING/host/bin --with-boost=$STAGING --disable-maintainer-mode --with-protoc-bindir=$STAGING/host/bin --disable-dependency-tracking CPPFLAGS="-I$STAGING/include ${OPTFLAGS}" LDFLAGS="-L$STAGING/lib ${OPTFLAGS}" CXXFLAGS="-frandom-seed=bitmark ${OPTFLAGS}" + ./configure --bindir=$OUTDIR --prefix=$STAGING --host=$HOST --with-qt-plugindir=$STAGING/plugins --with-qt-incdir=$STAGING/include --with-qt-bindir=$STAGING/host/bin --with-boost=$STAGING --disable-maintainer-mode --with-protoc-bindir=$STAGING/host/bin --disable-dependency-tracking CPPFLAGS="-I$STAGING/include ${OPTFLAGS}" LDFLAGS="-L$STAGING/lib ${OPTFLAGS}" CXXFLAGS="-frandom-seed=pfennig ${OPTFLAGS}" make dist - DISTNAME=`echo bitmark-*.tar.gz` + DISTNAME=`echo pfennig-*.tar.gz` NEEDDIST=0 fi # Build platform-dependent executables from source archive cd $BUILDDIR mkdir -p distsrc cd distsrc - tar --strip-components=1 -xf $HOME/build/bitmark/$DISTNAME - ./configure --enable-upnp-default --bindir=$BINDIR --prefix=$STAGING --host=$HOST --with-qt-plugindir=$STAGING/plugins --with-qt-incdir=$STAGING/include --with-qt-bindir=$STAGING/host/bin --with-boost=$STAGING --disable-maintainer-mode --with-protoc-bindir=$STAGING/host/bin --disable-dependency-tracking CPPFLAGS="-I$STAGING/include ${OPTFLAGS}" LDFLAGS="-L$STAGING/lib ${OPTFLAGS}" CXXFLAGS="-frandom-seed=bitmark ${OPTFLAGS}" + tar --strip-components=1 -xf $HOME/build/pfennig/$DISTNAME + ./configure --enable-upnp-default --bindir=$BINDIR --prefix=$STAGING --host=$HOST --with-qt-plugindir=$STAGING/plugins --with-qt-incdir=$STAGING/include --with-qt-bindir=$STAGING/host/bin --with-boost=$STAGING --disable-maintainer-mode --with-protoc-bindir=$STAGING/host/bin --disable-dependency-tracking CPPFLAGS="-I$STAGING/include ${OPTFLAGS}" LDFLAGS="-L$STAGING/lib ${OPTFLAGS}" CXXFLAGS="-frandom-seed=pfennig ${OPTFLAGS}" export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 export FAKETIME=$REFERENCE_DATETIME make $MAKEOPTS make deploy make install-strip - cp -f bitmark-*setup*.exe $BINDIR/ + cp -f pfennig-*setup*.exe $BINDIR/ unset LD_PRELOAD unset FAKETIME done # for BITS in @@ -93,5 +93,5 @@ script: | rm -rf $TEMPDIR mkdir -p $TEMPDIR cd $TEMPDIR - tar -xvf $HOME/build/bitmark/$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 + tar -xvf $HOME/build/pfennig/$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-win.yml~ b/contrib/gitian-descriptors/gitian-win.yml~ new file mode 100644 index 0000000..76f9f61 --- /dev/null +++ b/contrib/gitian-descriptors/gitian-win.yml~ @@ -0,0 +1,97 @@ +--- +name: "gamecredits" +suites: +- "precise" +architectures: +- "amd64" +packages: +- "mingw-w64" +- "g++-mingw-w64" +- "git-core" +- "unzip" +- "nsis" +- "faketime" +- "autoconf2.13" +- "libtool" +- "automake" +- "pkg-config" +- "bsdmainutils" + +reference_datetime: "2013-06-01 00:00:00" +remotes: +- "url": "https://github.com/noise23/gamecredits.git" + "dir": "gamecredits" +files: +- "qt-win32-5.2.0-gitian-r3.zip" +- "qt-win64-5.2.0-gitian-r3.zip" +- "boost-win32-1.55.0-gitian-r6.zip" +- "boost-win64-1.55.0-gitian-r6.zip" +- "gamecredits-deps-win32-gitian-r16.zip" +- "gamecredits-deps-win64-gitian-r16.zip" +- "protobuf-win32-2.5.0-gitian-r4.zip" +- "protobuf-win64-2.5.0-gitian-r4.zip" +script: | + # Defines + export TZ=UTC + INDIR=$HOME/build + OPTFLAGS='-O2' + TEMPDIR="$HOME/tempdir" + NEEDDIST=1 + # 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 + for BITS in 32 64; do # for architectures + # + STAGING=$HOME/staging${BITS} + BUILDDIR=$HOME/build${BITS} + BINDIR=$OUTDIR/$BITS + if [ "$BITS" == "32" ]; then + HOST=i686-w64-mingw32 + else + HOST=x86_64-w64-mingw32 + fi + export PATH=$STAGING/host/bin:$PATH + mkdir -p $STAGING $BUILDDIR $BINDIR + # + cd $STAGING + unzip $INDIR/qt-win${BITS}-5.2.0-gitian-r3.zip + unzip $INDIR/boost-win${BITS}-1.55.0-gitian-r6.zip + unzip $INDIR/gamecredits-deps-win${BITS}-gitian-r16.zip + unzip $INDIR/protobuf-win${BITS}-2.5.0-gitian-r4.zip + if [ "$NEEDDIST" == "1" ]; then + # Make source code archive which is architecture independent so it only needs to be done once + cd $HOME/build/gamecredits + ./autogen.sh + ./configure --bindir=$OUTDIR --prefix=$STAGING --host=$HOST --with-qt-plugindir=$STAGING/plugins --with-qt-incdir=$STAGING/include --with-qt-bindir=$STAGING/host/bin --with-boost=$STAGING --disable-maintainer-mode --with-protoc-bindir=$STAGING/host/bin --disable-dependency-tracking CPPFLAGS="-I$STAGING/include ${OPTFLAGS}" LDFLAGS="-L$STAGING/lib ${OPTFLAGS}" CXXFLAGS="-frandom-seed=gamecredits ${OPTFLAGS}" + make dist + DISTNAME=`echo gamecredits-*.tar.gz` + NEEDDIST=0 + fi + # Build platform-dependent executables from source archive + cd $BUILDDIR + mkdir -p distsrc + cd distsrc + tar --strip-components=1 -xf $HOME/build/gamecredits/$DISTNAME + ./configure --enable-upnp-default --bindir=$BINDIR --prefix=$STAGING --host=$HOST --with-qt-plugindir=$STAGING/plugins --with-qt-incdir=$STAGING/include --with-qt-bindir=$STAGING/host/bin --with-boost=$STAGING --disable-maintainer-mode --with-protoc-bindir=$STAGING/host/bin --disable-dependency-tracking CPPFLAGS="-I$STAGING/include ${OPTFLAGS}" LDFLAGS="-L$STAGING/lib ${OPTFLAGS}" CXXFLAGS="-frandom-seed=gamecredits ${OPTFLAGS}" + export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + export FAKETIME=$REFERENCE_DATETIME + make $MAKEOPTS + make deploy + make install-strip + cp -f gamecredits-*setup*.exe $BINDIR/ + unset LD_PRELOAD + unset FAKETIME + done # for BITS in + + # 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/gamecredits/$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/qt-win.yml b/contrib/gitian-descriptors/qt-win.yml index 40cf23e..23eead4 100644 --- a/contrib/gitian-descriptors/qt-win.yml +++ b/contrib/gitian-descriptors/qt-win.yml @@ -15,8 +15,8 @@ reference_datetime: "2011-01-30 00:00:00" remotes: [] files: - "qt-everywhere-opensource-src-5.2.0.tar.gz" -- "bitmark-deps-win32-gitian-r16.zip" -- "bitmark-deps-win64-gitian-r16.zip" +- "pfennig-deps-win32-gitian-r16.zip" +- "pfennig-deps-win64-gitian-r16.zip" script: | # Defines export TZ=UTC @@ -46,9 +46,9 @@ script: | # mkdir -p $INSTALLPREFIX $INSTALLPREFIX/host/bin $DEPSDIR $BUILDDIR # - # Need mingw-compiled openssl from bitmark-deps: + # Need mingw-compiled openssl from pfennig-deps: cd $DEPSDIR - unzip $INDIR/bitmark-deps-win${BITS}-gitian-r16.zip + unzip $INDIR/pfennig-deps-win${BITS}-gitian-r16.zip # cd $BUILDDIR # diff --git a/contrib/gitian-descriptors/qt-win.yml~ b/contrib/gitian-descriptors/qt-win.yml~ new file mode 100644 index 0000000..0a34c30 --- /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" +- "gamecredits-deps-win32-gitian-r16.zip" +- "gamecredits-deps-win64-gitian-r16.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 gamecredits-deps: + cd $DEPSDIR + unzip $INDIR/gamecredits-deps-win${BITS}-gitian-r16.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/linearize/example-linearize.cfg b/contrib/linearize/example-linearize.cfg index 2d1d4bd..80cabf2 100644 --- a/contrib/linearize/example-linearize.cfg +++ b/contrib/linearize/example-linearize.cfg @@ -3,7 +3,7 @@ rpcuser=someuser rpcpassword=somepassword host=127.0.0.1 -port=RPCPORT +port=40001 # bootstrap.dat settings netmagic=f9beb4d9 diff --git a/contrib/linearize/example-linearize.cfg~ b/contrib/linearize/example-linearize.cfg~ new file mode 100644 index 0000000..b233b79 --- /dev/null +++ b/contrib/linearize/example-linearize.cfg~ @@ -0,0 +1,12 @@ + +# gamecreditsd RPC settings +rpcuser=someuser +rpcpassword=somepassword +host=127.0.0.1 +port=40001 + +# bootstrap.dat settings +netmagic=f9beb4d9 +max_height=279000 +output=bootstrap.dat + diff --git a/contrib/linearize/linearize.py b/contrib/linearize/linearize.py index ec5e68d..e8167fe 100644 --- a/contrib/linearize/linearize.py +++ b/contrib/linearize/linearize.py @@ -113,7 +113,7 @@ def get_blocks(settings): if 'host' not in settings: settings['host'] = '127.0.0.1' if 'port' not in settings: - settings['port'] = RPCPORT + settings['port'] = 40001 if 'min_height' not in settings: settings['min_height'] = 0 if 'max_height' not in settings: diff --git a/contrib/macdeploy/README.md~ b/contrib/macdeploy/README.md~ new file mode 100644 index 0000000..641844b --- /dev/null +++ b/contrib/macdeploy/README.md~ @@ -0,0 +1,19 @@ +### MacDeploy ### + +You will need the appscript package for the fancy disk image creation to work: + + sudo easy_install appscript + +For Snow Leopard (which uses [Python 2.6](http://www.python.org/download/releases/2.6/)), you will need the param_parser package: + + sudo easy_install argparse + +This script should not be run manually, instead, after building as usual: + + make deploy + +During the process, the disk image window will pop up briefly where the fancy +settings are applied. This is normal, please do not interfere. + +When finished, it will produce `GameCredits-Qt.dmg`. + diff --git a/contrib/macdeploy/fancy.plist~ b/contrib/macdeploy/fancy.plist~ new file mode 100644 index 0000000..93cd01d --- /dev/null +++ b/contrib/macdeploy/fancy.plist~ @@ -0,0 +1,32 @@ + + + + + window_bounds + + 300 + 300 + 800 + 620 + + background_picture + background.png + icon_size + 96 + applications_symlink + + items_position + + Applications + + 370 + 156 + + GameCredits-Qt.app + + 128 + 156 + + + + diff --git a/contrib/macdeploy/macdeployqtplus~ b/contrib/macdeploy/macdeployqtplus~ new file mode 100644 index 0000000..3751f5f --- /dev/null +++ b/contrib/macdeploy/macdeployqtplus~ @@ -0,0 +1,830 @@ +#!/usr/bin/env python + +# +# Copyright (C) 2011 Patrick "p2k" Schneider +# +# 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 . +# + +import subprocess, sys, re, os, shutil, stat, os.path +from string import Template +from time import sleep +from argparse import ArgumentParser + +# This is ported from the original macdeployqt with modifications + +class FrameworkInfo(object): + def __init__(self): + self.frameworkDirectory = "" + self.frameworkName = "" + self.frameworkPath = "" + self.binaryDirectory = "" + self.binaryName = "" + self.binaryPath = "" + self.version = "" + self.installName = "" + self.deployedInstallName = "" + self.sourceFilePath = "" + self.destinationDirectory = "" + self.sourceResourcesDirectory = "" + self.destinationResourcesDirectory = "" + + def __eq__(self, other): + if self.__class__ == other.__class__: + return self.__dict__ == other.__dict__ + else: + return False + + def __str__(self): + return """ Framework name: %s + Framework directory: %s + Framework path: %s + Binary name: %s + Binary directory: %s + Binary path: %s + Version: %s + Install name: %s + Deployed install name: %s + Source file Path: %s + Deployed Directory (relative to bundle): %s +""" % (self.frameworkName, + self.frameworkDirectory, + self.frameworkPath, + self.binaryName, + self.binaryDirectory, + self.binaryPath, + self.version, + self.installName, + self.deployedInstallName, + self.sourceFilePath, + self.destinationDirectory) + + def isDylib(self): + return self.frameworkName.endswith(".dylib") + + def isQtFramework(self): + if self.isDylib(): + return self.frameworkName.startswith("libQt") + else: + return self.frameworkName.startswith("Qt") + + reOLine = re.compile(r'^(.+) \(compatibility version [0-9.]+, current version [0-9.]+\)$') + bundleFrameworkDirectory = "Contents/Frameworks" + bundleBinaryDirectory = "Contents/MacOS" + + @classmethod + def fromOtoolLibraryLine(cls, line): + # Note: line must be trimmed + if line == "": + return None + + # Don't deploy system libraries (exception for libQtuitools and libQtlucene). + if line.startswith("/System/Library/") or line.startswith("@executable_path") or (line.startswith("/usr/lib/") and "libQt" not in line): + return None + + m = cls.reOLine.match(line) + if m is None: + raise RuntimeError("otool line could not be parsed: " + line) + + path = m.group(1) + + info = cls() + info.sourceFilePath = path + info.installName = path + + if path.endswith(".dylib"): + dirname, filename = os.path.split(path) + info.frameworkName = filename + info.frameworkDirectory = dirname + info.frameworkPath = path + + info.binaryDirectory = dirname + info.binaryName = filename + info.binaryPath = path + info.version = "-" + + info.installName = path + info.deployedInstallName = "@executable_path/../Frameworks/" + info.binaryName + info.sourceFilePath = path + info.destinationDirectory = cls.bundleFrameworkDirectory + else: + parts = path.split("/") + i = 0 + # Search for the .framework directory + for part in parts: + if part.endswith(".framework"): + break + i += 1 + if i == len(parts): + raise RuntimeError("Could not find .framework or .dylib in otool line: " + line) + + info.frameworkName = parts[i] + info.frameworkDirectory = "/".join(parts[:i]) + info.frameworkPath = os.path.join(info.frameworkDirectory, info.frameworkName) + + info.binaryName = parts[i+3] + info.binaryDirectory = "/".join(parts[i+1:i+3]) + info.binaryPath = os.path.join(info.binaryDirectory, info.binaryName) + info.version = parts[i+2] + + info.deployedInstallName = "@executable_path/../Frameworks/" + os.path.join(info.frameworkName, info.binaryPath) + info.destinationDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, info.binaryDirectory) + + info.sourceResourcesDirectory = os.path.join(info.frameworkPath, "Resources") + info.destinationResourcesDirectory = os.path.join(cls.bundleFrameworkDirectory, info.frameworkName, "Resources") + + return info + +class ApplicationBundleInfo(object): + def __init__(self, path): + self.path = path + appName = os.path.splitext(os.path.basename(path))[0] + self.binaryPath = os.path.join(path, "Contents", "MacOS", appName) + if not os.path.exists(self.binaryPath): + raise RuntimeError("Could not find bundle binary for " + path) + self.resourcesPath = os.path.join(path, "Contents", "Resources") + self.pluginPath = os.path.join(path, "Contents", "PlugIns") + +class DeploymentInfo(object): + def __init__(self): + self.qtPath = None + self.pluginPath = None + self.deployedFrameworks = [] + + def detectQtPath(self, frameworkDirectory): + parentDir = os.path.dirname(frameworkDirectory) + if os.path.exists(os.path.join(parentDir, "translations")): + # Classic layout, e.g. "/usr/local/Trolltech/Qt-4.x.x" + self.qtPath = parentDir + elif os.path.exists(os.path.join(parentDir, "share", "qt4", "translations")): + # MacPorts layout, e.g. "/opt/local/share/qt4" + self.qtPath = os.path.join(parentDir, "share", "qt4") + elif os.path.exists(os.path.join(os.path.dirname(parentDir), "share", "qt4", "translations")): + # Newer Macports layout + self.qtPath = os.path.join(os.path.dirname(parentDir), "share", "qt4") + else: + self.qtPath = os.getenv("QTDIR", None) + + if self.qtPath is not None: + pluginPath = os.path.join(self.qtPath, "plugins") + if os.path.exists(pluginPath): + self.pluginPath = pluginPath + + def usesFramework(self, name): + nameDot = "%s." % name + libNameDot = "lib%s." % name + for framework in self.deployedFrameworks: + if framework.endswith(".framework"): + if framework.startswith(nameDot): + return True + elif framework.endswith(".dylib"): + if framework.startswith(libNameDot): + return True + return False + +def getFrameworks(binaryPath, verbose): + if verbose >= 3: + print "Inspecting with otool: " + binaryPath + 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: + sys.stderr.write(o_stderr) + sys.stderr.flush() + raise RuntimeError("otool failed with return code %d" % otool.returncode) + + otoolLines = o_stdout.split("\n") + otoolLines.pop(0) # First line is the inspected binary + if ".framework" in binaryPath or binaryPath.endswith(".dylib"): + otoolLines.pop(0) # Frameworks and dylibs list themselves as a dependency. + + libraries = [] + for line in otoolLines: + info = FrameworkInfo.fromOtoolLibraryLine(line.strip()) + if info is not None: + if verbose >= 3: + print "Found framework:" + print info + libraries.append(info) + + return libraries + +def runInstallNameTool(action, *args): + installnametoolbin=os.getenv("INSTALLNAMETOOL", "install_name_tool") + subprocess.check_call([installnametoolbin, "-"+action] + list(args)) + +def changeInstallName(oldName, newName, binaryPath, verbose): + if verbose >= 3: + print "Using install_name_tool:" + print " in", binaryPath + print " change reference", oldName + print " to", newName + runInstallNameTool("change", oldName, newName, binaryPath) + +def changeIdentification(id, binaryPath, verbose): + if verbose >= 3: + print "Using install_name_tool:" + print " change identification in", binaryPath + print " to", id + 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([stripbin, "-x", binaryPath]) + +def copyFramework(framework, path, verbose): + if framework.sourceFilePath.startswith("Qt"): + #standard place for Nokia Qt installer's frameworks + fromPath = "/Library/Frameworks/" + framework.sourceFilePath + else: + fromPath = framework.sourceFilePath + toDir = os.path.join(path, framework.destinationDirectory) + toPath = os.path.join(toDir, framework.binaryName) + + if not os.path.exists(fromPath): + raise RuntimeError("No file at " + fromPath) + + if os.path.exists(toPath): + return None # Already there + + if not os.path.exists(toDir): + os.makedirs(toDir) + + shutil.copy2(fromPath, toPath) + if verbose >= 3: + print "Copied:", fromPath + print " to:", toPath + + permissions = os.stat(toPath) + if not permissions.st_mode & stat.S_IWRITE: + os.chmod(toPath, permissions.st_mode | stat.S_IWRITE) + + if not framework.isDylib(): # Copy resources for real frameworks + fromResourcesDir = framework.sourceResourcesDirectory + if os.path.exists(fromResourcesDir): + toResourcesDir = os.path.join(path, framework.destinationResourcesDirectory) + shutil.copytree(fromResourcesDir, toResourcesDir) + if verbose >= 3: + print "Copied resources:", fromResourcesDir + print " to:", toResourcesDir + elif framework.frameworkName.startswith("libQtGui"): # Copy qt_menu.nib (applies to non-framework layout) + qtMenuNibSourcePath = os.path.join(framework.frameworkDirectory, "Resources", "qt_menu.nib") + qtMenuNibDestinationPath = os.path.join(path, "Contents", "Resources", "qt_menu.nib") + if os.path.exists(qtMenuNibSourcePath) and not os.path.exists(qtMenuNibDestinationPath): + shutil.copytree(qtMenuNibSourcePath, qtMenuNibDestinationPath) + if verbose >= 3: + print "Copied for libQtGui:", qtMenuNibSourcePath + print " to:", qtMenuNibDestinationPath + + return toPath + +def deployFrameworks(frameworks, bundlePath, binaryPath, strip, verbose, deploymentInfo=None): + if deploymentInfo is None: + deploymentInfo = DeploymentInfo() + + while len(frameworks) > 0: + framework = frameworks.pop(0) + deploymentInfo.deployedFrameworks.append(framework.frameworkName) + + if verbose >= 2: + print "Processing", framework.frameworkName, "..." + + # Get the Qt path from one of the Qt frameworks + if deploymentInfo.qtPath is None and framework.isQtFramework(): + deploymentInfo.detectQtPath(framework.frameworkDirectory) + + if framework.installName.startswith("@executable_path"): + if verbose >= 2: + print framework.frameworkName, "already deployed, skipping." + continue + + # install_name_tool the new id into the binary + changeInstallName(framework.installName, framework.deployedInstallName, binaryPath, verbose) + + # Copy farmework to app bundle. + deployedBinaryPath = copyFramework(framework, bundlePath, verbose) + # Skip the rest if already was deployed. + if deployedBinaryPath is None: + continue + + if strip: + runStrip(deployedBinaryPath, verbose) + + # install_name_tool it a new id. + changeIdentification(framework.deployedInstallName, deployedBinaryPath, verbose) + # Check for framework dependencies + dependencies = getFrameworks(deployedBinaryPath, verbose) + + for dependency in dependencies: + changeInstallName(dependency.installName, dependency.deployedInstallName, deployedBinaryPath, verbose) + + # Deploy framework if necessary. + if dependency.frameworkName not in deploymentInfo.deployedFrameworks and dependency not in frameworks: + frameworks.append(dependency) + + return deploymentInfo + +def deployFrameworksForAppBundle(applicationBundle, strip, verbose): + frameworks = getFrameworks(applicationBundle.binaryPath, verbose) + if len(frameworks) == 0 and verbose >= 1: + print "Warning: Could not find any external frameworks to deploy in %s." % (applicationBundle.path) + return DeploymentInfo() + else: + return deployFrameworks(frameworks, applicationBundle.path, applicationBundle.binaryPath, 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": + # Skip designer plugins + continue + elif pluginDirectory == "phonon" or pluginDirectory == "phonon_backend": + # Deploy the phonon plugins only if phonon is in use + if not deploymentInfo.usesFramework("phonon"): + continue + elif pluginDirectory == "sqldrivers": + # Deploy the sql plugins only if QtSql is in use + if not deploymentInfo.usesFramework("QtSql"): + continue + elif pluginDirectory == "script": + # Deploy the script plugins only if QtScript is in use + if not deploymentInfo.usesFramework("QtScript"): + continue + elif pluginDirectory == "qmltooling": + # Deploy the qml plugins only if QtDeclarative is in use + if not deploymentInfo.usesFramework("QtDeclarative"): + continue + elif pluginDirectory == "bearer": + # Deploy the bearer plugins only if QtNetwork is in use + if not deploymentInfo.usesFramework("QtNetwork"): + continue + + for pluginName in filenames: + pluginPath = os.path.join(pluginDirectory, pluginName) + if pluginName.endswith("_debug.dylib"): + # Skip debug plugins + continue + elif pluginPath == "imageformats/libqsvg.dylib" or pluginPath == "iconengines/libqsvgicon.dylib": + # Deploy the svg plugins only if QtSvg is in use + if not deploymentInfo.usesFramework("QtSvg"): + continue + elif pluginPath == "accessible/libqtaccessiblecompatwidgets.dylib": + # Deploy accessibility for Qt3Support only if the Qt3Support is in use + if not deploymentInfo.usesFramework("Qt3Support"): + continue + elif pluginPath == "graphicssystems/libqglgraphicssystem.dylib": + # Deploy the opengl graphicssystem plugin only if QtOpenGL is in use + if not deploymentInfo.usesFramework("QtOpenGL"): + continue + + plugins.append((pluginDirectory, pluginName)) + + for pluginDirectory, pluginName in plugins: + if verbose >= 2: + print "Processing plugin", os.path.join(pluginDirectory, pluginName), "..." + + sourcePath = os.path.join(deploymentInfo.pluginPath, pluginDirectory, pluginName) + destinationDirectory = os.path.join(appBundleInfo.pluginPath, pluginDirectory) + if not os.path.exists(destinationDirectory): + os.makedirs(destinationDirectory) + + destinationPath = os.path.join(destinationDirectory, pluginName) + shutil.copy2(sourcePath, destinationPath) + if verbose >= 3: + print "Copied:", sourcePath + print " to:", destinationPath + + if strip: + runStrip(destinationPath, verbose) + + dependencies = getFrameworks(destinationPath, verbose) + + for dependency in dependencies: + changeInstallName(dependency.installName, dependency.deployedInstallName, destinationPath, verbose) + + # Deploy framework if necessary. + if dependency.frameworkName not in deploymentInfo.deployedFrameworks: + deployFrameworks([dependency], appBundleInfo.path, destinationPath, strip, verbose, deploymentInfo) + +qt_conf="""[Paths] +Translations=Resources +Plugins=PlugIns +""" + +ap = ArgumentParser(description="""Improved version of macdeployqt. + +Outputs a ready-to-deploy app in a folder "dist" and optionally wraps it in a .dmg file. +Note, that the "dist" folder will be deleted before deploying on each run. + +Optionally, Qt translation files (.qm) and additional resources can be added to the bundle. + +Also optionally signs the .app bundle; set the CODESIGNARGS environment variable to pass arguments +to the codesign tool. +E.g. CODESIGNARGS='--sign "Developer ID Application: ..." --keychain /encrypted/foo.keychain'""") + +ap.add_argument("app_bundle", nargs=1, metavar="app-bundle", help="application bundle to be deployed") +ap.add_argument("-verbose", type=int, nargs=1, default=[1], metavar="<0-3>", help="0 = no output, 1 = error/warning (default), 2 = normal, 3 = debug") +ap.add_argument("-no-plugins", dest="plugins", action="store_false", default=True, help="skip plugin deployment") +ap.add_argument("-no-strip", dest="strip", action="store_false", default=True, help="don't run 'strip' on the binaries") +ap.add_argument("-sign", dest="sign", action="store_true", default=False, help="sign .app bundle with codesign tool") +ap.add_argument("-dmg", nargs="?", const="", metavar="basename", help="create a .dmg disk image; if basename is not specified, a camel-cased version of the app name is used") +ap.add_argument("-fancy", nargs=1, metavar="plist", default=[], help="make a fancy looking disk image using the given plist file with instructions; requires -dmg to work") +ap.add_argument("-add-qt-tr", nargs=1, metavar="languages", default=[], help="add Qt translation files to the bundle's ressources; the language list must be separated with commas, not with whitespace") +ap.add_argument("-add-resources", nargs="+", metavar="path", default=[], help="list of additional files or folders to be copied into the bundle's resources; must be the last argument") + +config = ap.parse_args() + +verbose = config.verbose[0] + +# ------------------------------------------------ + +app_bundle = config.app_bundle[0] + +if not os.path.exists(app_bundle): + if verbose >= 1: + sys.stderr.write("Error: Could not find app bundle \"%s\"\n" % (app_bundle)) + sys.exit(1) + +app_bundle_name = os.path.splitext(os.path.basename(app_bundle))[0] + +# ------------------------------------------------ + +for p in config.add_resources: + if verbose >= 3: + print "Checking for \"%s\"..." % p + if not os.path.exists(p): + if verbose >= 1: + sys.stderr.write("Error: Could not find additional resource file \"%s\"\n" % (p)) + sys.exit(1) + +# ------------------------------------------------ + +if len(config.fancy) == 1: + if verbose >= 3: + print "Fancy: Importing plistlib..." + try: + import plistlib + except ImportError: + if verbose >= 1: + sys.stderr.write("Error: Could not import plistlib which is required for fancy disk images.\n") + sys.exit(1) + + if verbose >= 3: + print "Fancy: Importing appscript..." + try: + import appscript + except ImportError: + if verbose >= 1: + sys.stderr.write("Error: Could not import appscript which is required for fancy disk images.\n") + sys.stderr.write("Please install it e.g. with \"sudo easy_install appscript\".\n") + sys.exit(1) + + p = config.fancy[0] + if verbose >= 3: + print "Fancy: Loading \"%s\"..." % p + if not os.path.exists(p): + if verbose >= 1: + sys.stderr.write("Error: Could not find fancy disk image plist at \"%s\"\n" % (p)) + sys.exit(1) + + try: + fancy = plistlib.readPlist(p) + except: + if verbose >= 1: + sys.stderr.write("Error: Could not parse fancy disk image plist at \"%s\"\n" % (p)) + sys.exit(1) + + try: + assert not fancy.has_key("window_bounds") or (isinstance(fancy["window_bounds"], list) and len(fancy["window_bounds"]) == 4) + assert not fancy.has_key("background_picture") or isinstance(fancy["background_picture"], str) + assert not fancy.has_key("icon_size") or isinstance(fancy["icon_size"], int) + assert not fancy.has_key("applications_symlink") or isinstance(fancy["applications_symlink"], bool) + if fancy.has_key("items_position"): + assert isinstance(fancy["items_position"], dict) + for key, value in fancy["items_position"].iteritems(): + assert isinstance(value, list) and len(value) == 2 and isinstance(value[0], int) and isinstance(value[1], int) + except: + if verbose >= 1: + sys.stderr.write("Error: Bad format of fancy disk image plist at \"%s\"\n" % (p)) + sys.exit(1) + + if fancy.has_key("background_picture"): + bp = fancy["background_picture"] + if verbose >= 3: + print "Fancy: Resolving background picture \"%s\"..." % bp + if not os.path.exists(bp): + bp = os.path.join(os.path.dirname(p), bp) + if not os.path.exists(bp): + if verbose >= 1: + sys.stderr.write("Error: Could not find background picture at \"%s\" or \"%s\"\n" % (fancy["background_picture"], bp)) + sys.exit(1) + else: + fancy["background_picture"] = bp +else: + fancy = None + +# ------------------------------------------------ + +if os.path.exists("dist"): + if verbose >= 2: + print "+ Removing old dist folder +" + + shutil.rmtree("dist") + +# ------------------------------------------------ + +target = os.path.join("dist", app_bundle) + +if verbose >= 2: + print "+ Copying source bundle +" +if verbose >= 3: + print app_bundle, "->", target + +os.mkdir("dist") +shutil.copytree(app_bundle, target) + +applicationBundle = ApplicationBundleInfo(target) + +# ------------------------------------------------ + +if verbose >= 2: + print "+ Deploying frameworks +" + +try: + deploymentInfo = deployFrameworksForAppBundle(applicationBundle, config.strip, verbose) + if deploymentInfo.qtPath is None: + deploymentInfo.qtPath = os.getenv("QTDIR", None) + if deploymentInfo.qtPath is None: + if verbose >= 1: + sys.stderr.write("Warning: Could not detect Qt's path, skipping plugin deployment!\n") + config.plugins = False +except RuntimeError as e: + if verbose >= 1: + sys.stderr.write("Error: %s\n" % str(e)) + sys.exit(ret) + +# ------------------------------------------------ + +if config.plugins: + if verbose >= 2: + print "+ Deploying plugins +" + + try: + deployPlugins(applicationBundle, deploymentInfo, config.strip, verbose) + except RuntimeError as e: + if verbose >= 1: + sys.stderr.write("Error: %s\n" % str(e)) + sys.exit(ret) + +# ------------------------------------------------ + +if len(config.add_qt_tr) == 0: + add_qt_tr = [] +else: + qt_tr_dir = os.path.join(deploymentInfo.qtPath, "translations") + add_qt_tr = ["qt_%s.qm" % lng for lng in config.add_qt_tr[0].split(",")] + for lng_file in add_qt_tr: + p = os.path.join(qt_tr_dir, lng_file) + if verbose >= 3: + print "Checking for \"%s\"..." % p + if not os.path.exists(p): + if verbose >= 1: + sys.stderr.write("Error: Could not find Qt translation file \"%s\"\n" % (lng_file)) + sys.exit(1) + +# ------------------------------------------------ + +if verbose >= 2: + print "+ Installing qt.conf +" + +f = open(os.path.join(applicationBundle.resourcesPath, "qt.conf"), "wb") +f.write(qt_conf) +f.close() + +# ------------------------------------------------ + +if len(add_qt_tr) > 0 and verbose >= 2: + print "+ Adding Qt translations +" + +for lng_file in add_qt_tr: + if verbose >= 3: + print os.path.join(qt_tr_dir, lng_file), "->", os.path.join(applicationBundle.resourcesPath, lng_file) + shutil.copy2(os.path.join(qt_tr_dir, lng_file), os.path.join(applicationBundle.resourcesPath, lng_file)) + +# ------------------------------------------------ + +if len(config.add_resources) > 0 and verbose >= 2: + print "+ Adding additional resources +" + +for p in config.add_resources: + t = os.path.join(applicationBundle.resourcesPath, os.path.basename(p)) + if verbose >= 3: + print p, "->", t + if os.path.isdir(p): + shutil.copytree(p, t) + else: + shutil.copy2(p, t) + +# ------------------------------------------------ + +if config.sign and 'CODESIGNARGS' not in os.environ: + print "You must set the CODESIGNARGS environment variable. Skipping signing." +elif config.sign: + if verbose >= 1: + print "Code-signing app bundle %s"%(target,) + subprocess.check_call("codesign --force %s %s"%(os.environ['CODESIGNARGS'], target), shell=True) + +# ------------------------------------------------ + +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"): + del kwargs["capture_stdout"] + run = subprocess.check_output + else: + if verbose < 2: + hdiutil_args.append("-quiet") + elif verbose >= 3: + hdiutil_args.append("-verbose") + run = subprocess.check_call + + for key, value in kwargs.iteritems(): + hdiutil_args.append("-" + key) + if not value is True: + hdiutil_args.append(str(value)) + + return run(hdiutil_args) + + if verbose >= 2: + if fancy is None: + print "+ Creating .dmg disk image +" + else: + print "+ Preparing .dmg disk image +" + + if config.dmg != "": + dmg_name = config.dmg + else: + spl = app_bundle_name.split(" ") + dmg_name = spl[0] + "".join(p.capitalize() for p in spl[1:]) + + if fancy is None: + try: + runHDIUtil("create", dmg_name, srcfolder="dist", format="UDBZ", volname=app_bundle_name, ov=True) + except subprocess.CalledProcessError as e: + sys.exit(e.returncode) + else: + if verbose >= 3: + print "Determining size of \"dist\"..." + size = 0 + for path, dirs, files in os.walk("dist"): + for file in files: + size += os.path.getsize(os.path.join(path, file)) + size += int(size * 0.1) + + if verbose >= 3: + print "Creating temp image for modification..." + try: + runHDIUtil("create", dmg_name + ".temp", srcfolder="dist", format="UDRW", size=size, volname=app_bundle_name, ov=True) + except subprocess.CalledProcessError as e: + sys.exit(e.returncode) + + if verbose >= 3: + print "Attaching temp image..." + try: + output = runHDIUtil("attach", dmg_name + ".temp", readwrite=True, noverify=True, noautoopen=True, capture_stdout=True) + except subprocess.CalledProcessError as e: + sys.exit(e.returncode) + + m = re.search("/Volumes/(.+$)", output) + disk_root = m.group(0) + disk_name = m.group(1) + + if verbose >= 2: + print "+ Applying fancy settings +" + + if fancy.has_key("background_picture"): + bg_path = os.path.join(disk_root, os.path.basename(fancy["background_picture"])) + if verbose >= 3: + print fancy["background_picture"], "->", bg_path + shutil.copy2(fancy["background_picture"], bg_path) + else: + bg_path = None + + if fancy.get("applications_symlink", False): + os.symlink("/Applications", os.path.join(disk_root, "Applications")) + + # The Python appscript package broke with OSX 10.8 and isn't being fixed. + # So we now build up an AppleScript string and use the osascript command + # to make the .dmg file pretty: + appscript = Template( """ + on run argv + tell application "Finder" + tell disk "$disk" + open + set current view of container window to icon view + set toolbar visible of container window to false + set statusbar visible of container window to false + set the bounds of container window to {$window_bounds} + set theViewOptions to the icon view options of container window + set arrangement of theViewOptions to not arranged + set icon size of theViewOptions to $icon_size + $background_commands + $items_positions + close -- close/reopen works around a bug... + open + update without registering applications + delay 5 + eject + end tell + end tell + end run + """) + + itemscript = Template('set position of item "${item}" of container window to {${position}}') + items_positions = [] + if fancy.has_key("items_position"): + for name, position in fancy["items_position"].iteritems(): + params = { "item" : name, "position" : ",".join([str(p) for p in position]) } + items_positions.append(itemscript.substitute(params)) + + params = { + "disk" : "GameCredits-Qt", + "window_bounds" : "300,300,800,620", + "icon_size" : "96", + "background_commands" : "", + "items_positions" : "\n ".join(items_positions) + } + if fancy.has_key("window_bounds"): + params["window.bounds"] = ",".join([str(p) for p in fancy["window_bounds"]]) + if fancy.has_key("icon_size"): + params["icon_size"] = str(fancy["icon_size"]) + if bg_path is not None: + # Set background file, then call SetFile to make it invisible. + # (note: making it invisible first makes set background picture fail) + bgscript = Template("""set background picture of theViewOptions to file "$bgpic" + do shell script "SetFile -a V /Volumes/$disk/$bgpic" """) + params["background_commands"] = bgscript.substitute({"bgpic" : os.path.basename(bg_path), "disk" : params["disk"]}) + + s = appscript.substitute(params) + if verbose >= 2: + print("Running AppleScript:") + print(s) + + p = subprocess.Popen(['osascript', '-'], stdin=subprocess.PIPE) + p.communicate(input=s) + if p.returncode: + print("Error running osascript.") + + if verbose >= 2: + print "+ Finalizing .dmg disk image +" + + try: + runHDIUtil("convert", dmg_name + ".temp", format="UDBZ", o=dmg_name + ".dmg", ov=True) + except subprocess.CalledProcessError as e: + sys.exit(e.returncode) + + os.unlink(dmg_name + ".temp.dmg") + +# ------------------------------------------------ + +if verbose >= 2: + print "+ Done +" + +sys.exit(0) diff --git a/contrib/pyminer/example-config.cfg b/contrib/pyminer/example-config.cfg index f7ddfac..68ad09f 100644 --- a/contrib/pyminer/example-config.cfg +++ b/contrib/pyminer/example-config.cfg @@ -3,7 +3,7 @@ # RPC login details # host=127.0.0.1 -port=RPCPORT +port=40001 rpcuser=myusername rpcpass=mypass diff --git a/contrib/pyminer/pyminer.py b/contrib/pyminer/pyminer.py index d20014a..95dcdd9 100755 --- a/contrib/pyminer/pyminer.py +++ b/contrib/pyminer/pyminer.py @@ -217,7 +217,7 @@ def miner_thread(id): if 'host' not in settings: settings['host'] = '127.0.0.1' if 'port' not in settings: - settings['port'] = RPCPORT + settings['port'] = 40001 if 'threads' not in settings: settings['threads'] = 1 if 'hashmeter' not in settings: diff --git a/contrib/qos/README.md b/contrib/qos/README.md index 095a2c7..1cd336f 100644 --- a/contrib/qos/README.md +++ b/contrib/qos/README.md @@ -1,5 +1,5 @@ ### Qos ### -This is a Linux bash script that will set up tc to limit the outgoing bandwidth for connections to the Bitmark network. It limits outbound TCP traffic with a source or destination port of P2PPORT, but not if the destination IP is within a LAN (defined as 192.168.x.x). +This is a Linux bash script that will set up tc to limit the outgoing bandwidth for connections to the Bitmark network. It limits outbound TCP traffic with a source or destination port of 40002, but not if the destination IP is within a LAN (defined as 192.168.x.x). This means one can have an always-on pfennigd instance running, and another local pfennigd/pfennig-qt instance which connects to this node and receives blocks from it. diff --git a/contrib/qos/README.md~ b/contrib/qos/README.md~ new file mode 100644 index 0000000..5b8dd20 --- /dev/null +++ b/contrib/qos/README.md~ @@ -0,0 +1,5 @@ +### Qos ### + +This is a Linux bash script that will set up tc to limit the outgoing bandwidth for connections to the Bitmark network. It limits outbound TCP traffic with a source or destination port of 40002, but not if the destination IP is within a LAN (defined as 192.168.x.x). + +This means one can have an always-on gamecreditsd instance running, and another local gamecreditsd/gamecredits-qt instance which connects to this node and receives blocks from it. diff --git a/contrib/qos/tc.sh b/contrib/qos/tc.sh index e557e8a..ee21f45 100644 --- a/contrib/qos/tc.sh +++ b/contrib/qos/tc.sh @@ -32,10 +32,10 @@ tc filter add dev ${IF} parent 1: protocol ip prio 2 handle 2 fw classid 1:11 # ret=$? #done -#limit outgoing traffic to and from port P2PPORT. but not when dealing with a host on the local network +#limit outgoing traffic to and from port 40002. but not when dealing with a host on the local network # (defined by $LOCALNET) # --set-mark marks packages matching these criteria with the number "2" # these packages are filtered by the tc filter with "handle 2" # this filter sends the packages into the 1:11 class, and this class is limited to ${LIMIT} -iptables -t mangle -A OUTPUT -p tcp -m tcp --dport P2PPORT ! -d ${LOCALNET} -j MARK --set-mark 0x2 -iptables -t mangle -A OUTPUT -p tcp -m tcp --sport P2PPORT ! -d ${LOCALNET} -j MARK --set-mark 0x2 +iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 40002 ! -d ${LOCALNET} -j MARK --set-mark 0x2 +iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 40002 ! -d ${LOCALNET} -j MARK --set-mark 0x2 diff --git a/contrib/seeds/makeseeds.py b/contrib/seeds/makeseeds.py index 162deb1..4f99454 100755 --- a/contrib/seeds/makeseeds.py +++ b/contrib/seeds/makeseeds.py @@ -13,7 +13,7 @@ def main(): lines = sys.stdin.readlines() ips = [] - pattern = re.compile(r"^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}):P2PPORT") + pattern = re.compile(r"^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3}):40002") for line in lines: m = pattern.match(line) if m is None: diff --git a/contrib/spendfrom/spendfrom.py b/contrib/spendfrom/spendfrom.py index 6f6bab8..eca0db3 100755 --- a/contrib/spendfrom/spendfrom.py +++ b/contrib/spendfrom/spendfrom.py @@ -41,7 +41,7 @@ def determine_db_dir(): return os.path.expanduser("~/.bitmark") def read_bitmark_config(dbdir): - """Read the bitmark.conf file from dbdir, returns dictionary of settings""" + """Read the pfennig.conf file from dbdir, returns dictionary of settings""" from ConfigParser import SafeConfigParser class FakeSecHead(object): @@ -59,7 +59,7 @@ def readline(self): return s config_parser = SafeConfigParser() - config_parser.readfp(FakeSecHead(open(os.path.join(dbdir, "bitmark.conf")))) + config_parser.readfp(FakeSecHead(open(os.path.join(dbdir, "pfennig.conf")))) return dict(config_parser.items("all")) def connect_JSON(config): @@ -67,7 +67,7 @@ def connect_JSON(config): testnet = config.get('testnet', '0') testnet = (int(testnet) > 0) # 0/1 in config file, convert to True/False if not 'rpcport' in config: - config['rpcport'] = 1RPCPORT if testnet else RPCPORT + config['rpcport'] = 50000 if testnet else 40001 connect = "http://%s:%s@127.0.0.1:%s"%(config['rpcuser'], config['rpcpassword'], config['rpcport']) try: result = ServiceProxy(connect) @@ -229,7 +229,7 @@ def main(): parser.add_option("--fee", dest="fee", default="0.0", help="fee to include") parser.add_option("--datadir", dest="datadir", default=determine_db_dir(), - help="location of bitmark.conf file with RPC username/password (default: %default)") + help="location of pfennig.conf file with RPC username/password (default: %default)") parser.add_option("--testnet", dest="testnet", default=False, action="store_true", help="Use the test network") parser.add_option("--dry_run", dest="dry_run", default=False, action="store_true", diff --git a/contrib/spendfrom/spendfrom.py~ b/contrib/spendfrom/spendfrom.py~ new file mode 100644 index 0000000..8cacc6a --- /dev/null +++ b/contrib/spendfrom/spendfrom.py~ @@ -0,0 +1,267 @@ +#!/usr/bin/env python +# +# Use the raw transactions API to spend bitmarks received on particular addresses, +# and send any change back to that same address. +# +# Example usage: +# spendfrom.py # Lists available funds +# spendfrom.py --from=ADDRESS --to=ADDRESS --amount=11.00 +# +# Assumes it will talk to a gamecreditsd or GameCredits-Qt running +# on localhost. +# +# Depends on jsonrpc +# + +from decimal import * +import getpass +import math +import os +import os.path +import platform +import sys +import time +from jsonrpc import ServiceProxy, json + +BASE_FEE=Decimal("0.001") + +def check_json_precision(): + """Make sure json library being used does not lose precision converting BTM 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 determine_db_dir(): + """Return the default location of the bitmark data directory""" + if platform.system() == "Darwin": + return os.path.expanduser("~/Library/Application Support/Bitmark/") + elif platform.system() == "Windows": + return os.path.join(os.environ['APPDATA'], "Bitmark") + return os.path.expanduser("~/.bitmark") + +def read_bitmark_config(dbdir): + """Read the gamecredits.conf file from dbdir, returns dictionary of settings""" + from ConfigParser import SafeConfigParser + + class FakeSecHead(object): + def __init__(self, fp): + self.fp = fp + self.sechead = '[all]\n' + def readline(self): + if self.sechead: + try: return self.sechead + finally: self.sechead = None + else: + s = self.fp.readline() + if s.find('#') != -1: + s = s[0:s.find('#')].strip() +"\n" + return s + + config_parser = SafeConfigParser() + config_parser.readfp(FakeSecHead(open(os.path.join(dbdir, "gamecredits.conf")))) + return dict(config_parser.items("all")) + +def connect_JSON(config): + """Connect to a bitmark JSON-RPC server""" + testnet = config.get('testnet', '0') + testnet = (int(testnet) > 0) # 0/1 in config file, convert to True/False + if not 'rpcport' in config: + config['rpcport'] = 50000 if testnet else 40001 + connect = "http://%s:%s@127.0.0.1:%s"%(config['rpcuser'], config['rpcpassword'], config['rpcport']) + try: + result = ServiceProxy(connect) + # ServiceProxy is lazy-connect, so send an RPC command mostly to catch connection errors, + # but also make sure the gamecreditsd we're talking to is/isn't testnet: + if result.getmininginfo()['testnet'] != testnet: + sys.stderr.write("RPC server at "+connect+" testnet setting mismatch\n") + sys.exit(1) + return result + except: + sys.stderr.write("Error connecting to RPC server at "+connect+"\n") + sys.exit(1) + +def unlock_wallet(gamecreditsd): + info = gamecreditsd.getinfo() + if 'unlocked_until' not in info: + return True # wallet is not encrypted + t = int(info['unlocked_until']) + if t <= time.time(): + try: + passphrase = getpass.getpass("Wallet is locked; enter passphrase: ") + gamecreditsd.walletpassphrase(passphrase, 5) + except: + sys.stderr.write("Wrong passphrase\n") + + info = gamecreditsd.getinfo() + return int(info['unlocked_until']) > time.time() + +def list_available(gamecreditsd): + address_summary = dict() + + address_to_account = dict() + for info in gamecreditsd.listreceivedbyaddress(0): + address_to_account[info["address"]] = info["account"] + + unspent = gamecreditsd.listunspent(0) + for output in unspent: + # listunspent doesn't give addresses, so: + rawtx = gamecreditsd.getrawtransaction(output['txid'], 1) + vout = rawtx["vout"][output['vout']] + pk = vout["scriptPubKey"] + + # This code only deals with ordinary pay-to-bitmark-address + # or pay-to-script-hash outputs right now; anything exotic is ignored. + if pk["type"] != "pubkeyhash" and pk["type"] != "scripthash": + continue + + address = pk["addresses"][0] + if address in address_summary: + address_summary[address]["total"] += vout["value"] + address_summary[address]["outputs"].append(output) + else: + address_summary[address] = { + "total" : vout["value"], + "outputs" : [output], + "account" : address_to_account.get(address, "") + } + + return address_summary + +def select_coins(needed, inputs): + # Feel free to improve this, this is good enough for my simple needs: + outputs = [] + have = Decimal("0.0") + n = 0 + while have < needed and n < len(inputs): + outputs.append({ "txid":inputs[n]["txid"], "vout":inputs[n]["vout"]}) + have += inputs[n]["amount"] + n += 1 + return (outputs, have-needed) + +def create_tx(gamecreditsd, fromaddresses, toaddress, amount, fee): + all_coins = list_available(gamecreditsd) + + total_available = Decimal("0.0") + needed = amount+fee + potential_inputs = [] + for addr in fromaddresses: + if addr not in all_coins: + continue + potential_inputs.extend(all_coins[addr]["outputs"]) + total_available += all_coins[addr]["total"] + + if total_available < needed: + sys.stderr.write("Error, only %f BTM available, need %f\n"%(total_available, needed)); + sys.exit(1) + + # + # Note: + # Python's json/jsonrpc modules have inconsistent support for Decimal numbers. + # Instead of wrestling with getting json.dumps() (used by jsonrpc) to encode + # Decimals, I'm casting amounts to float before sending them to gamecreditsd. + # + outputs = { toaddress : float(amount) } + (inputs, change_amount) = select_coins(needed, potential_inputs) + if change_amount > BASE_FEE: # don't bother with zero or tiny change + change_address = fromaddresses[-1] + if change_address in outputs: + outputs[change_address] += float(change_amount) + else: + outputs[change_address] = float(change_amount) + + rawtx = gamecreditsd.createrawtransaction(inputs, outputs) + signed_rawtx = gamecreditsd.signrawtransaction(rawtx) + if not signed_rawtx["complete"]: + sys.stderr.write("signrawtransaction failed\n") + sys.exit(1) + txdata = signed_rawtx["hex"] + + return txdata + +def compute_amount_in(gamecreditsd, txinfo): + result = Decimal("0.0") + for vin in txinfo['vin']: + in_info = gamecreditsd.getrawtransaction(vin['txid'], 1) + vout = in_info['vout'][vin['vout']] + result = result + vout['value'] + return result + +def compute_amount_out(txinfo): + result = Decimal("0.0") + for vout in txinfo['vout']: + result = result + vout['value'] + return result + +def sanity_test_fee(gamecreditsd, txdata_hex, max_fee): + class FeeError(RuntimeError): + pass + try: + txinfo = gamecreditsd.decoderawtransaction(txdata_hex) + total_in = compute_amount_in(gamecreditsd, txinfo) + total_out = compute_amount_out(txinfo) + if total_in-total_out > max_fee: + raise FeeError("Rejecting transaction, unreasonable fee of "+str(total_in-total_out)) + + tx_size = len(txdata_hex)/2 + kb = tx_size/1000 # integer division rounds down + if kb > 1 and fee < BASE_FEE: + raise FeeError("Rejecting no-fee transaction, larger than 1000 bytes") + if total_in < 0.01 and fee < BASE_FEE: + raise FeeError("Rejecting no-fee, tiny-amount transaction") + # Exercise for the reader: compute transaction priority, and + # warn if this is a very-low-priority transaction + + except FeeError as err: + sys.stderr.write((str(err)+"\n")) + sys.exit(1) + +def main(): + import optparse + + parser = optparse.OptionParser(usage="%prog [options]") + parser.add_option("--from", dest="fromaddresses", default=None, + help="addresses to get bitmarks from") + parser.add_option("--to", dest="to", default=None, + help="address to get send bitmarks to") + parser.add_option("--amount", dest="amount", default=None, + help="amount to send") + parser.add_option("--fee", dest="fee", default="0.0", + help="fee to include") + parser.add_option("--datadir", dest="datadir", default=determine_db_dir(), + help="location of gamecredits.conf file with RPC username/password (default: %default)") + parser.add_option("--testnet", dest="testnet", default=False, action="store_true", + help="Use the test network") + parser.add_option("--dry_run", dest="dry_run", default=False, action="store_true", + help="Don't broadcast the transaction, just create and print the transaction data") + + (options, args) = parser.parse_args() + + check_json_precision() + config = read_bitmark_config(options.datadir) + if options.testnet: config['testnet'] = True + gamecreditsd = connect_JSON(config) + + if options.amount is None: + address_summary = list_available(gamecreditsd) + for address,info in address_summary.iteritems(): + n_transactions = len(info['outputs']) + if n_transactions > 1: + print("%s %.8f %s (%d transactions)"%(address, info['total'], info['account'], n_transactions)) + else: + print("%s %.8f %s"%(address, info['total'], info['account'])) + else: + fee = Decimal(options.fee) + amount = Decimal(options.amount) + while unlock_wallet(gamecreditsd) == False: + pass # Keep asking for passphrase until they get it right + txdata = create_tx(gamecreditsd, options.fromaddresses.split(","), options.to, amount, fee) + sanity_test_fee(gamecreditsd, txdata, amount*Decimal("0.01")) + if options.dry_run: + print(txdata) + else: + txid = gamecreditsd.sendrawtransaction(txdata) + print(txid) + +if __name__ == '__main__': + main() diff --git a/doc/README.md~ b/doc/README.md~ new file mode 100644 index 0000000..609a158 --- /dev/null +++ b/doc/README.md~ @@ -0,0 +1,76 @@ +Bitmark 0.9.4 BETA +===================== + +Copyright (c) 2009-2015 Bitmark Developers + + +Setup +--------------------- +[Bitmark Core](http://bitmark.org/en/download) is the original Bitmark client and it builds the backbone of the network. However, it downloads and stores the entire history of Bitmark 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 Bitmark on your native platform. + +### Unix + +You need the Qt4 run-time libraries to run GameCredits-Qt. On Debian or Ubuntu: + + sudo apt-get install libqtgui4 + +Unpack the files into a directory and run: + +- bin/32/gamecredits-qt (GUI, 32-bit) or bin/32/gamecreditsd (headless, 32-bit) +- bin/64/gamecredits-qt (GUI, 64-bit) or bin/64/gamecreditsd (headless, 64-bit) + + + +### Windows + +Unpack the files into a directory, and then run gamecredits-qt.exe. + +### OSX + +Drag GameCredits-Qt to your applications folder, and then run GameCredits-Qt. + +### Need Help? + +* See the documentation at the [Bitmark Wiki](https://en.bitmark.it/wiki/Main_Page) +for help and more information. +* Ask for help on [#bitmark](http://webchat.freenode.net?channels=bitmark) on Freenode. If you don't have an IRC client use [webchat here](http://webchat.freenode.net?channels=bitmark). +* Ask for help on the [bitcointalk](https://bitcointalk.org/) forums, in the [Technical Support board](https://bitcointalk.org/index.php?board=4.0). + +Building +--------------------- +The following are developer notes on how to build Bitmark 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 Bitmark repo's [root README](https://github.com/project-bitmark/bitmark/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) +- [Release Process](release-process.md) +- [Source Code Documentation (External Link)](https://dev.visucore.com/bitmark/doxygen/) +- [Translation Process](translation_process.md) +- [Unit Tests](unit-tests.md) + +### 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 [#bitmark-dev](http://webchat.freenode.net/?channels=bitmark) on Freenode. If you don't have an IRC client use [webchat here](http://webchat.freenode.net/?channels=bitmark-dev). + +### Miscellaneous +- [Assets Attribution](assets-attribution.md) +- [Files](files.md) +- [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_windows.txt~ b/doc/README_windows.txt~ new file mode 100644 index 0000000..7e3911c --- /dev/null +++ b/doc/README_windows.txt~ @@ -0,0 +1,31 @@ +Bitmark 0.9.4 BETA + +Copyright (c) 2009-2015 Bitmark Core 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 +the OpenSSL Toolkit (http://www.openssl.org/). This product includes +cryptographic software written by Eric Young (eay@cryptsoft.com). + + +Intro +----- +Bitmark 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. + + +Setup +----- +Unpack the files into a directory and run gamecredits-qt.exe. + +Bitmark Core is the original Bitmark client and it builds the backbone of the network. +However, it downloads and stores the entire history of Bitmark 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. + +See the bitmark wiki at: + https://en.bitmark.it/wiki/Main_Page +for more help and information. diff --git a/doc/build-msw.md~ b/doc/build-msw.md~ new file mode 100644 index 0000000..497e648 --- /dev/null +++ b/doc/build-msw.md~ @@ -0,0 +1,83 @@ +WINDOWS BUILD NOTES +=================== + + +Compilers Supported +------------------- +TODO: What works? +Note: releases are cross-compiled using mingw running on Linux. + + +Dependencies +------------ +Libraries you need to download separately and build: + + name default path download + -------------------------------------------------------------------------------------------------------------------- + OpenSSL \openssl-1.0.1c-mgw http://www.openssl.org/source/ + Berkeley DB \db-4.8.30.NC-mgw http://www.oracle.com/technology/software/products/berkeley-db/index.html + Boost \boost-1.50.0-mgw http://www.boost.org/users/download/ + miniupnpc \miniupnpc-1.6-mgw http://miniupnp.tuxfamily.org/files/ + +Their licenses: + + OpenSSL Old BSD license with the problematic advertising requirement + Berkeley DB New BSD license with additional requirement that linked software must be free open source + Boost MIT-like license + miniupnpc New (3-clause) BSD license + +Versions used in this release: + + OpenSSL 1.0.1c + Berkeley DB 4.8.30.NC + Boost 1.50.0 + miniupnpc 1.6 + + +OpenSSL +------- +MSYS shell: + +un-tar sources with MSYS 'tar xfz' to avoid issue with symlinks (OpenSSL ticket 2377) +change 'MAKE' env. variable from 'C:\MinGW32\bin\mingw32-make.exe' to '/c/MinGW32/bin/mingw32-make.exe' + + cd /c/openssl-1.0.1c-mgw + ./config + make + +Berkeley DB +----------- +MSYS shell: + + cd /c/db-4.8.30.NC-mgw/build_unix + sh ../dist/configure --enable-mingw --enable-cxx + make + +Boost +----- +MSYS shell: + + downloaded boost jam 3.1.18 + cd \boost-1.50.0-mgw + bjam toolset=gcc --build-type=complete stage + +MiniUPnPc +--------- +UPnP support is optional, make with `USE_UPNP=` to disable it. + +MSYS shell: + + cd /c/miniupnpc-1.6-mgw + make -f Makefile.mingw + mkdir miniupnpc + cp *.h miniupnpc/ + +Bitmark +------- +MSYS shell: + + cd \bitmark + sh autogen.sh + sh configure + mingw32-make + strip gamecreditsd.exe diff --git a/doc/build-osx.md b/doc/build-osx.md index 8cfbe0c..806d959 100644 --- a/doc/build-osx.md +++ b/doc/build-osx.md @@ -146,8 +146,8 @@ directory. We have to first create the RPC configuration file, though. Run `./pfennigd` to get the filename where it should be put, or just try these commands: - echo -e "rpcuser=bitmarkrpc\nrpcpassword=$(xxd -l 16 -p /dev/urandom)" > "/Users/${USER}/Library/Application Support/Bitmark/bitmark.conf" - chmod 600 "/Users/${USER}/Library/Application Support/Bitmark/bitmark.conf" + echo -e "rpcuser=bitmarkrpc\nrpcpassword=$(xxd -l 16 -p /dev/urandom)" > "/Users/${USER}/Library/Application Support/Bitmark/pfennig.conf" + chmod 600 "/Users/${USER}/Library/Application Support/Bitmark/pfennig.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; diff --git a/doc/build-osx.md~ b/doc/build-osx.md~ new file mode 100644 index 0000000..cccc6b6 --- /dev/null +++ b/doc/build-osx.md~ @@ -0,0 +1,162 @@ +Mac OS X Build Instructions and Notes +==================================== +This guide will show you how to build gamecreditsd(headless client) for OSX. + +Notes +----- + +* 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`. + +Preparation +----------- + +You need to install XCode with all the options checked so that the compiler +and everything is available in /usr not just /Developer. XCode should be +available on your OS X installation media, but if not, you can get the +current version from https://developer.apple.com/xcode/. If you install +Xcode 4.3 or later, you'll need to install its command line tools. This can +be done in `Xcode > Preferences > Downloads > Components` and generally must +be re-done or updated every time Xcode is updated. + +There's an assumption that you already have `git` installed, as well. If +not, it's the path of least resistance to install [Github for Mac](https://mac.github.com/) +(OS X 10.7+) or +[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://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 +dependencies immediately - no other work required. If you're unsure, read +the instructions through first in order to assess what you want to do. +Homebrew is a little more popular among those newer to OS X. + +The installation of the actual dependencies is covered in the Instructions +sections below. + +Instructions: MacPorts +---------------------- + +### Install dependencies + +Installing the dependencies using MacPorts is very straightforward. + + sudo port install boost db48@+no_java openssl miniupnpc autoconf pkgconfig automake + +Optional: install Qt4 + + sudo port install qt4-mac qrencode protobuf-cpp + +### Building `gamecreditsd` + +1. Clone the github tree to get the source code and go into the directory. + + git clone git@github.com:project-bitmark/bitmark.git bitmark + cd bitmark + +2. Build gamecreditsd (and GameCredits-Qt, if configured): + + ./autogen.sh + ./configure + make + +3. It is a good idea to build and run the unit tests, too: + + make check + +Instructions: Homebrew +---------------------- + +#### Install dependencies using Homebrew + + 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 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.1f 6 Jan 2014. + +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. If it +doesn't, make sure `/usr/local/bin` comes before `/usr/bin` in your +PATH. + +### Building `gamecreditsd` + +1. Clone the github tree to get the source code and go into the directory. + + git clone https://github.com/project-bitmark/bitmark.git + cd bitmark + +2. Build gamecreditsd: + + ./autogen.sh + ./configure + make + +3. It is a good idea to build and run the unit tests, too: + + make check + +Creating a release build +------------------------ +You can ignore this section if you are building `gamecreditsd` for your own use. + +gamecreditsd/gamecredits-cli binaries are not included in the GameCredits-Qt.app bundle. + +If you are building `gamecreditsd` or `GameCredits-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.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.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-bitmark.s3.amazonaws.com/boost_macports_fix.zip` +for a fix. + +Once dependencies are compiled, see release-process.md for how the GameCredits-Qt.app +bundle is packaged and signed to create the .dmg disk image that is distributed. + +Running +------- + +It's now available at `./gamecreditsd`, provided that you are still in the `src` +directory. We have to first create the RPC configuration file, though. + +Run `./gamecreditsd` to get the filename where it should be put, or just try these +commands: + + echo -e "rpcuser=bitmarkrpc\nrpcpassword=$(xxd -l 16 -p /dev/urandom)" > "/Users/${USER}/Library/Application Support/Bitmark/gamecredits.conf" + chmod 600 "/Users/${USER}/Library/Application Support/Bitmark/gamecredits.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; +you can monitor its process by looking at the debug.log file, like this: + + tail -f $HOME/Library/Application\ Support/Bitmark/debug.log + +Other commands: + + ./gamecreditsd -daemon # to start the bitmark daemon. + ./gamecredits-cli --help # for a list of command-line options. + ./gamecredits-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~ new file mode 100644 index 0000000..778669c --- /dev/null +++ b/doc/build-unix.md~ @@ -0,0 +1,231 @@ +UNIX BUILD NOTES +==================== +Some notes on how to build Bitmark in Unix. + +To Build +--------------------- + + ./autogen.sh + ./configure + make + +This will build gamecredits-qt as well if the dependencies are met. + +Dependencies +--------------------- + + 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. See the configure options for upnp behavior desired: + + --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 + software must be free open source + Boost MIT-like license + miniupnpc New (3-clause) BSD license + +- 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 Bitmark 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 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: + + 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 + +Optional: + + sudo apt-get install libminiupnpc-dev (see --with-miniupnpc and --enable-upnp-default) + +Dependencies for the GUI: Ubuntu & Debian +----------------------------------------- + +If you want to build GameCredits-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`. + +To build with Qt 4 you need the following: + + sudo apt-get install libqt4-dev libprotobuf-dev protobuf-compiler + +For Qt 5 you need the following: + + 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 gamecredits-qt executable will be +built by default. + +Notes +----- +The release is built with GCC and then "strip gamecreditsd" to strip the debug +symbols, which reduces the executable size by about 90%. + + +miniupnpc +--------- + tar -xzvf miniupnpc-1.6.tar.gz + cd miniupnpc-1.6 + make + sudo su + make install + + +Berkeley DB +----------- +It is recommended to use Berkeley DB 4.8. If you have to build it yourself: + +```bash +BITMARK_ROOT=$(pwd) + +# Pick some path to install BDB to, here we create a directory within the bitmark directory +BDB_PREFIX="${BITMARK_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 Bitmark Core to use our own-built instance of BDB +cd $BITMARK_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 +----- +If you need to build Boost yourself: + + sudo su + ./bootstrap.sh + ./bjam install + + +Security +-------- +To help make your bitmark installation more secure by making certain attacks impossible to +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 + offered by some kernels. An attacker who is able to cause execution of code at an arbitrary + memory location is thwarted if he doesn't know where anything useful is located. + The stack and heap are randomly located by default but this allows the code section to be + randomly located as well. + + On an Amd64 processor where a library was not compiled with -fPIC, this will cause an error + such as: "relocation R_X86_64_32 against `......' can not be used when making a shared object;" + + To test that you have built PIE executable, install scanelf, part of paxutils, and use: + + scanelf -e ./bitmark + + The output should contain: + TYPE + ET_DYN + +* Non-executable Stack + If the stack is executable then trivial stack based buffer overflow exploits are possible if + vulnerable buffers are found. By default, bitmark should be built with a non-executable stack + but if one of the libraries it uses asks for an executable stack or someone makes a mistake + and uses a compiler extension which requires an executable stack, it will silently build an + executable without the non-executable stack protection. + + To verify that the stack is non-executable after compiling use: + `scanelf -e ./bitmark` + + the output should contain: + STK/REL/PTL + 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, bitmark 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 de2bf2c..7d2435a 100644 --- a/doc/coding.md +++ b/doc/coding.md @@ -128,7 +128,7 @@ Threads - ThreadMapPort : Universal plug-and-play startup/shutdown -- ThreadSocketHandler : Sends/Receives data from peers on port P2PPORT. +- ThreadSocketHandler : Sends/Receives data from peers on port 40002. - ThreadOpenAddedConnections : Opens network connections to added nodes. @@ -140,7 +140,7 @@ Threads - ThreadFlushWalletDB : Close the wallet.dat file if it hasn't been used in 500ms. -- ThreadRPCServer : Remote procedure call handler, listens on port RPCPORT for connections and services them. +- ThreadRPCServer : Remote procedure call handler, listens on port 40001 for connections and services them. - BitmarkMiner : Generates bitmarks (if wallet is enabled). diff --git a/doc/multiwallet-qt.md~ b/doc/multiwallet-qt.md~ new file mode 100644 index 0000000..480a9f5 --- /dev/null +++ b/doc/multiwallet-qt.md~ @@ -0,0 +1,48 @@ +Multiwallet Qt Development and Integration Strategy +=================================================== + +In order to support loading of multiple wallets in gamecredits-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. + +Two new classes have been implemented in two new .h/.cpp file pairs, with much of the functionality that was previously +implemented in the BitmarkGUI class moved over to these new classes. + +The two existing files most affected, by far, are bitmarkgui.h and bitmarkgui.cpp, as the BitmarkGUI class will require +some major retrofitting. + +Only requiring some minor changes is bitmark.cpp. + +Finally, two new headers and source files will have to be added to gamecredits-qt.pro. + +Changes to class BitmarkGUI +--------------------------- +The principal change to the BitmarkGUI class concerns the QStackedWidget instance called centralWidget. +This widget owns five page views: overviewPage, transactionsPage, addressBookPage, receiveCoinsPage, and sendCoinsPage. + +A new class called *WalletView* inheriting from QStackedWidget has been written to handle all renderings and updates of +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 *WalletFrame* inheriting from QFrame has been written as a container for embedding all wallet-related +controls into BitmarkGUI. At present it contains the WalletView instances for the wallets and does little more than passing on messages +from BitmarkGUI to the currently selected WalletView. It is a WalletFrame instance +that takes the place of what used to be centralWidget in BitmarkGUI. The purpose of this class is to allow future +refinements of the wallet controls with minimal need for further modifications to BitmarkGUI, thus greatly simplifying +merges while reducing the risk of breaking top-level stuff. + +Changes to bitmark.cpp +---------------------- +bitmark.cpp is the entry point into gamecredits-qt, and as such, will require some minor modifications to provide hooks for +multiple wallet support. Most importantly will be the way it instantiates WalletModels and passes them to the +singleton BitmarkGUI instance called window. Formerly, BitmarkGUI kept a pointer to a single instance of a WalletModel. +The initial change required is very simple: rather than calling `window.setWalletModel(&walletModel);` we perform the +following two steps: + + window.addWallet("~Default", &walletModel); + window.setCurrentWallet("~Default"); + +The string parameter is just an arbitrary name given to the default wallet. It's been prepended with a tilde to avoid name collisions in the future with additional wallets. + +The shutdown call `window.setWalletModel(0)` has also been removed. In its place is now: + +window.removeAllWallets(); diff --git a/doc/release-process.md~ b/doc/release-process.md~ new file mode 100644 index 0000000..50eadff --- /dev/null +++ b/doc/release-process.md~ @@ -0,0 +1,203 @@ +Release Process +==================== + +###update (commit) version in sources + + contrib/verifysfbinaries/verify.sh + doc/README* + share/setup.nsi + src/clientversion.h (change CLIENT_VERSION_IS_RELEASE to true) + +###tag version in git + + git tag -s v(new version, e.g. 0.8.0) + +###write release notes. git shortlog helps a lot, for example: + + git shortlog --no-merges v(current version, e.g. 0.7.2)..v(new version, e.g. 0.8.0) + +* * * + +##perform gitian builds + + From a directory containing the bitmark source, gitian-builder and gitian.sigs + + export SIGNER=(your gitian key, ie bluematt, sipa, etc) + export VERSION=(new version, e.g. 0.8.0) + pushd ./bitmark + 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) + + wget 'http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.9.20140701.tar.gz' -O miniupnpc-1.9.20140701.tar.gz + wget 'https://www.openssl.org/source/openssl-1.0.1k.tar.gz' + wget 'http://download.oracle.com/berkeley-db/db-4.8.30.NC.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.8/4.8.6/qt-everywhere-opensource-src-4.8.6.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://pkgs.fedoraproject.org/repo/pkgs/cdrkit/cdrkit-1.1.11.tar.gz/efe08e2f3ca478486037b053acd512e9/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 ../bitmark/contrib/gitian-descriptors/boost-linux.yml + mv build/out/boost-*.zip inputs/ + ./bin/gbuild ../bitmark/contrib/gitian-descriptors/deps-linux.yml + mv build/out/bitmark-deps-*.zip inputs/ + ./bin/gbuild ../bitmark/contrib/gitian-descriptors/qt-linux.yml + mv build/out/qt-*.tar.gz inputs/ + ./bin/gbuild ../bitmark/contrib/gitian-descriptors/boost-win.yml + mv build/out/boost-*.zip inputs/ + ./bin/gbuild ../bitmark/contrib/gitian-descriptors/deps-win.yml + mv build/out/bitmark-deps-*.zip inputs/ + ./bin/gbuild ../bitmark/contrib/gitian-descriptors/qt-win.yml + mv build/out/qt-*.zip inputs/ + ./bin/gbuild ../bitmark/contrib/gitian-descriptors/protobuf-win.yml + mv build/out/protobuf-*.zip inputs/ + ./bin/gbuild ../bitmark/contrib/gitian-descriptors/gitian-osx-native.yml + mv build/out/osx-*.tar.gz inputs/ + ./bin/gbuild ../bitmark/contrib/gitian-descriptors/gitian-osx-depends.yml + mv build/out/osx-*.tar.gz inputs/ + ./bin/gbuild ../bitmark/contrib/gitian-descriptors/gitian-osx-qt.yml + mv build/out/osx-*.tar.gz inputs/ + + SHA256 hashes of intermediate inputs will be different for each project based on gamecredits. + + Build gamecreditsd and gamecredits-qt on Linux32, Linux64, and Win32: + + ./bin/gbuild --commit bitmark=v${VERSION} ../bitmark/contrib/gitian-descriptors/gitian-linux.yml + ./bin/gsign --signer $SIGNER --release ${VERSION} --destination ../gitian.sigs/ ../bitmark/contrib/gitian-descriptors/gitian-linux.yml + pushd build/out + zip -r bitmark-${VERSION}-linux-gitian.zip * + mv bitmark-${VERSION}-linux-gitian.zip ../../../ + popd + ./bin/gbuild --commit bitmark=v${VERSION} ../bitmark/contrib/gitian-descriptors/gitian-win.yml + ./bin/gsign --signer $SIGNER --release ${VERSION}-win --destination ../gitian.sigs/ ../bitmark/contrib/gitian-descriptors/gitian-win.yml + pushd build/out + zip -r bitmark-${VERSION}-win-gitian.zip * + mv bitmark-${VERSION}-win-gitian.zip ../../../ + popd + ./bin/gbuild --commit bitmark=v${VERSION} ../bitmark/contrib/gitian-descriptors/gitian-osx-bitmark.yml + ./bin/gsign --signer $SIGNER --release ${VERSION}-osx --destination ../gitian.sigs/ ../bitmark/contrib/gitian-descriptors/gitian-osx-bitmark.yml + pushd build/out + mv GameCredits-Qt.dmg ../../../ + popd + popd + + Build output expected: + + 1. linux 32-bit and 64-bit binaries + source (bitmark-${VERSION}-linux-gitian.zip) + 2. windows 32-bit and 64-bit binaries + installer + source (bitmark-${VERSION}-win-gitian.zip) + 3. OSX installer (GameCredits-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 + +**Linux .tar.gz:** + + unzip bitmark-${VERSION}-linux-gitian.zip -d bitmark-${VERSION}-linux + tar czvf bitmark-${VERSION}-linux.tar.gz bitmark-${VERSION}-linux + rm -rf bitmark-${VERSION}-linux + +**Windows .zip and setup.exe:** + + unzip bitmark-${VERSION}-win-gitian.zip -d bitmark-${VERSION}-win + mv bitmark-${VERSION}-win/*/bitmark-*-setup.exe . + zip -r bitmark-${VERSION}-win.zip bitmark-${VERSION}-win + rm -rf bitmark-${VERSION}-win + +###Next steps: + +* 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 + +* create SHA256SUMS for builds, and PGP-sign it + +* update bitmark.org version + make sure all OS download links go to the right versions + +* update download sizes on bitmark.org/_templates/download.html + +* update forum version + +* update wiki download links + +* update wiki changelog: [https://en.bitmark.it/wiki/Changelog](https://en.bitmark.it/wiki/Changelog) + +Commit your signature to gitian.sigs: + + pushd gitian.sigs + git add ${VERSION}/${SIGNER} + git add ${VERSION}-win/${SIGNER} + git commit -a + git push # Assuming you can push to the gitian.sigs tree + popd + +------------------------------------------------------------------------- + +### After 3 or more people have gitian-built, repackage gitian-signed zips: + +From a directory containing bitmark source, gitian.sigs and gitian zips + + export VERSION=(new version, e.g. 0.8.0) + mkdir bitmark-${VERSION}-linux-gitian + pushd bitmark-${VERSION}-linux-gitian + unzip ../bitmark-${VERSION}-linux-gitian.zip + mkdir gitian + cp ../bitmark/contrib/gitian-downloader/*.pgp ./gitian/ + for signer in $(ls ../gitian.sigs/${VERSION}/); do + cp ../gitian.sigs/${VERSION}/${signer}/bitmark-build.assert ./gitian/${signer}-build.assert + cp ../gitian.sigs/${VERSION}/${signer}/bitmark-build.assert.sig ./gitian/${signer}-build.assert.sig + done + zip -r bitmark-${VERSION}-linux-gitian.zip * + cp bitmark-${VERSION}-linux-gitian.zip ../ + popd + mkdir bitmark-${VERSION}-win-gitian + pushd bitmark-${VERSION}-win-gitian + unzip ../bitmark-${VERSION}-win-gitian.zip + mkdir gitian + cp ../bitmark/contrib/gitian-downloader/*.pgp ./gitian/ + for signer in $(ls ../gitian.sigs/${VERSION}-win/); do + cp ../gitian.sigs/${VERSION}-win/${signer}/bitmark-build.assert ./gitian/${signer}-build.assert + cp ../gitian.sigs/${VERSION}-win/${signer}/bitmark-build.assert.sig ./gitian/${signer}-build.assert.sig + done + zip -r bitmark-${VERSION}-win-gitian.zip * + cp bitmark-${VERSION}-win-gitian.zip ../ + popd + +- Upload gitian zips to SourceForge + +- Announce the release: + + - Add the release to bitmark.org: https://github.com/project-bitmark/bitmark.org/tree/master/_releases + + - Release sticky on bitcointalk: https://bitcointalk.org/index.php?board=1.0 + + - Bitmark-development mailing list + + - Optionally reddit /r/Bitmark, ... + +- Celebrate diff --git a/doc/tor.md b/doc/tor.md index 1ec4074..0eb044c 100644 --- a/doc/tor.md +++ b/doc/tor.md @@ -47,11 +47,11 @@ reachable from the Tor network. Add these lines to your /etc/tor/torrc (or equiv config file): HiddenServiceDir /var/lib/tor/bitmark-service/ - HiddenServicePort P2PPORT 127.0.0.1:P2PPORT - HiddenServicePort 1P2PPORT 127.0.0.1:1P2PPORT + HiddenServicePort 40002 127.0.0.1:40002 + HiddenServicePort 50001 127.0.0.1:50001 The directory can be different of course, but (both) port numbers should be equal to -your pfennigd's P2P listen port (P2PPORT by default). +your pfennigd's P2P listen port (40002 by default). -externalip=X You can tell bitmark about its publicly reachable address using this option, and this can be a .onion address. Given the above @@ -81,7 +81,7 @@ specify: ./pfennigd ... -discover -and open port P2PPORT on your firewall (or use -upnp). +and open port 40002 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: diff --git a/doc/tor.md~ b/doc/tor.md~ new file mode 100644 index 0000000..bcc3de0 --- /dev/null +++ b/doc/tor.md~ @@ -0,0 +1,90 @@ +TOR SUPPORT IN BITMARK +====================== + +It is possible to run Bitmark 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 [Tor Project FAQ:TBBSocksPort](https://www.torproject.org/docs/faq.html.en#TBBSocksPort) for how to properly +configure Tor. + + +1. Run bitmark behind a Tor proxy +--------------------------------- + +The first step is running Bitmark behind a Tor proxy. This will already make all +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, + 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. + + -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 + 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: + + ./bitmark -proxy=127.0.0.1:9050 + + +2. Run a bitmark 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/bitmark-service/ + HiddenServicePort 40002 127.0.0.1:40002 + HiddenServicePort 50001 127.0.0.1:50001 + +The directory can be different of course, but (both) port numbers should be equal to +your gamecreditsd's P2P listen port (40002 by default). + + -externalip=X You can tell bitmark 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/bitmark-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: + + ./gamecreditsd -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: + + ./gamecreditsd ... -discover + +and open port 40002 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: + + ./bitmark -onion=127.0.0.1:9050 -externalip=57qr3yd1nyntf5k.onion -discover + diff --git a/doc/translation_process.md~ b/doc/translation_process.md~ new file mode 100644 index 0000000..a095c4b --- /dev/null +++ b/doc/translation_process.md~ @@ -0,0 +1,87 @@ +Translations +============ + +The Qt GUI can be easily translated into other languages. Here's how we +handle those translations. + +Files and Folders +----------------- + +### gamecredits-qt.pro + +This file takes care of generating `.qm` files from `.ts` files. It is mostly +automated. + +### src/qt/bitmark.qrc + +This file must be updated whenever a new translation is added. Please note that +files must end with `.qm`, not `.ts`. + + + locale/bitmark_en.qm + ... + + +### src/qt/locale/ + +This directory contains all translations. Filenames must adhere to this format: + + bitmark_xx_YY.ts or bitmark_xx.ts + +#### bitmark_en.ts (Source file) + +`src/qt/locale/bitmark_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. 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). Once this has been updated, lupdate (included in the Qt SDK) +is used to update bitmark_en.ts. This process has been automated, from src/qt, +simply run: + make translate + +##### Handling of plurals in the source file + +When new plurals are added to the source file, it's important to do the following steps: + +1. Open bitmark_en.ts in Qt Linguist (also included in the Qt SDK) +2. Search for `%n`, which will take you to the parts in the translation that use plurals +3. Look for empty `English Translation (Singular)` and `English Translation (Plural)` fields +4. Add the appropriate strings for the singular and plural form of the base string +5. Mark the item as done (via the green arrow symbol in the toolbar) +6. Repeat from step 2. until all singular and plural forms are in the source file +7. Save the source file + +##### Creating the pull-request + +An updated source file should be merged to github and Transifex will pick it +up from there (can take some hours). Afterwards the new strings show up as "Remaining" +in Transifex and can be translated. + +To create the pull-request you have to do: + + git add src/qt/bitmarkstrings.cpp src/qt/locale/bitmark_en.ts + git commit + +Syncing with Transifex +---------------------- + +We are using https://transifex.com as a frontend for translating the client. + +https://www.transifex.com/projects/p/bitmark/resource/tx/ + +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. + +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. `python contrib/devtools/update-translations.py` +2. update `src/qt/bitmark.qrc` manually or via + `ls src/qt/locale/*ts|xargs -n1 basename|sed 's/\(bitmark_\(.*\)\).ts/locale\/\1.qm<\/file>/'` +3. update `src/qt/Makefile.am` manually or via + `ls src/qt/locale/*ts|xargs -n1 basename|sed 's/\(bitmark_\(.*\)\).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~ new file mode 100644 index 0000000..94e41de --- /dev/null +++ b/doc/unit-tests.md~ @@ -0,0 +1,18 @@ +Compiling/running unit tests +------------------------------------ + +Unit tests will be automatically compiled if dependencies were met in configure +and tests weren't explicitly disabled. + +After configuring, they can be run with 'make check'. + +To run the gamecreditsd tests manually, launch src/test/test_bitmark . + +To add more gamecreditsd 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. + +To run the gamecredits-qt tests manually, launch src/qt/test/gamecredits-qt_test + +To add more gamecredits-qt tests, add them to the `src/qt/test/` directory and +the `src/qt/test/test_main.cpp` file. diff --git a/qa/pull-tester/build-tests.sh.in~ b/qa/pull-tester/build-tests.sh.in~ new file mode 100644 index 0000000..c5e1caf --- /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/gamecreditsd.exe $OUT_DIR/gamecreditsd.exe + cp @abs_top_srcdir@/win32-build/src/test/test_bitmark.exe $OUT_DIR/test_bitmark.exe + cp @abs_top_srcdir@/win32-build/src/qt/gamecreditsd-qt.exe $OUT_DIR/gamecredits-qt.exe + # Linux: + cp @abs_top_srcdir@/linux-build/src/gamecreditsd $OUT_DIR/gamecreditsd + cp @abs_top_srcdir@/linux-build/src/test/test_bitmark $OUT_DIR/test_bitmark + cp @abs_top_srcdir@/linux-build/src/qt/gamecreditsd-qt $OUT_DIR/gamecredits-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.sh~ b/qa/pull-tester/pull-tester.sh~ new file mode 100644 index 0000000..314b1c5 --- /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 bitmark srcroot +#Param ...: arguments for build-test.sh + +if [ $# -lt 1 ]; then + echo "usage: $0 [bitmark srcroot] build-test arguments..." +fi + +killall -q gamecredits-cli +killall -q gamecreditsd + +cd $1 +shift + +./autogen.sh +./configure +./qa/pull-tester/build-tests.sh "$@" diff --git a/qa/pull-tester/run-bitmarkd-for-test.sh.in~ b/qa/pull-tester/run-bitmarkd-for-test.sh.in~ new file mode 100644 index 0000000..e5ebc39 --- /dev/null +++ b/qa/pull-tester/run-bitmarkd-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@/.bitmark" +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/gamecreditsd@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` & +BITMARKD=$! + +#Install a watchdog. +(sleep 10 && kill -0 $WAITER 2>/dev/null && kill -9 $BITMARKD $$)& +wait $WAITER + +if [ -n "$TIMEOUT" ]; then + timeout "$TIMEOUT"s "$@" $PORT + RETURN=$? +else + "$@" $PORT + RETURN=$? +fi + +(sleep 15 && kill -0 $BITMARKD 2>/dev/null && kill -9 $BITMARKD $$)& +kill $BITMARKD && wait $BITMARKD + +# timeout returns 124 on timeout, otherwise the return value of the child +exit $RETURN diff --git a/qa/rpc-tests/README.md~ b/qa/rpc-tests/README.md~ new file mode 100644 index 0000000..442394f --- /dev/null +++ b/qa/rpc-tests/README.md~ @@ -0,0 +1,43 @@ +Regression tests of RPC interface +================================= + +### [python-bitmarkrpc](https://github.com/jgarzik/python-bitmarkrpc) +Git subtree of [https://github.com/jgarzik/python-bitmarkrpc](https://github.com/jgarzik/python-bitmarkrpc). +Changes to python-bitmarkrpc 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 BTM) 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 gamecreditsd +``` diff --git a/qa/rpc-tests/conflictedbalance.sh~ b/qa/rpc-tests/conflictedbalance.sh~ new file mode 100644 index 0000000..c13ef82 --- /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 + +BITMARKD=${1}/gamecreditsd +CLI=${1}/gamecredits-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" +$BITMARKD $B1ARGS & +B1PID=$! + +D2=${D}/node2 +CreateDataDir $D2 port=11010 rpcport=11011 +B2ARGS="-datadir=$D2 -debug=mempool" +$BITMARKD $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 +$BITMARKD $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 100644 index 0000000..8061af0 --- /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-bitmarkrpc to module search path: +import os +import sys +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "python-bitmarkrpc")) + +import json +import shutil +import subprocess +import tempfile +import traceback + +from bitmarkrpc.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 gamecreditsds and test.* datadir on exit or error") + parser.add_option("--srcdir", dest="srcdir", default="../../src", + help="Source directory containing gamecreditsd/gamecredits-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_gamecreditsds() + 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/skeleton.py~ b/qa/rpc-tests/skeleton.py~ new file mode 100644 index 0000000..46af47f --- /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-bitmarkrpc to module search path: +import os +import sys +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "python-bitmarkrpc")) + +import json +import shutil +import subprocess +import tempfile +import traceback + +from bitmarkrpc.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 gamecreditsds and test.* datadir on exit or error") + parser.add_option("--srcdir", dest="srcdir", default="../../src", + help="Source directory containing gamecreditsd/gamecredits-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_gamecreditsds() + 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 100644 index 0000000..13ce43d --- /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 + +BITMARKD=${1}/gamecreditsd +CLI=${1}/gamecredits-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" +$BITMARKD $B1ARGS & +B1PID=$! + +D2=${D}/node2 +CreateDataDir $D2 port=11010 rpcport=11011 +B2ARGS="-datadir=$D2" +$BITMARKD $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 +$BITMARKD $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 bitmark 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 BTM; the 2 BTM 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 BTM +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 index 19f7b68..b060234 100644 --- a/qa/rpc-tests/util.py +++ b/qa/rpc-tests/util.py @@ -70,7 +70,7 @@ def initialize_chain(test_dir): for i in range(4): datadir = os.path.join("cache", "node"+str(i)) os.makedirs(datadir) - with open(os.path.join(datadir, "bitmark.conf"), 'w') as f: + with open(os.path.join(datadir, "pfennig.conf"), 'w') as f: f.write("regtest=1\n"); f.write("rpcuser=rt\n"); f.write("rpcpassword=rt\n"); diff --git a/qa/rpc-tests/util.py~ b/qa/rpc-tests/util.py~ new file mode 100644 index 0000000..8793ef8 --- /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-bitmarkrpc to module search path: +import os +import sys +sys.path.append(os.path.join(os.path.dirname(os.path.abspath(__file__)), "python-bitmarkrpc")) + +from decimal import Decimal +import json +import shutil +import subprocess +import time + +from bitmarkrpc.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 BTM 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) + + +gamecreditsd_processes = [] + +def initialize_chain(test_dir): + """ + Create (or copy from cache) a 200-block-long chain and + 4 wallets. + gamecreditsd and gamecredits-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 gamecreditsds: + for i in range(4): + datadir = os.path.join("cache", "node"+str(i)) + os.makedirs(datadir) + with open(os.path.join(datadir, "gamecredits.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 = [ "gamecreditsd", "-keypool=1", "-datadir="+datadir ] + if i > 0: + args.append("-connect=127.0.0.1:"+str(START_P2P_PORT)) + gamecreditsd_processes.append(subprocess.Popen(args)) + subprocess.check_call([ "gamecredits-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_gamecreditsds() + 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 gamecreditsds, 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 = [ "gamecreditsd", "-datadir="+datadir ] + gamecreditsd_processes.append(subprocess.Popen(args)) + subprocess.check_call([ "gamecredits-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_gamecreditsds(): + # Wait for all gamecreditsds to cleanly exit + for gamecreditsd in gamecreditsd_processes: + gamecreditsd.wait() + del gamecreditsd_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 index 89dd159..fae4b43 100644 --- a/qa/rpc-tests/util.sh +++ b/qa/rpc-tests/util.sh @@ -20,7 +20,7 @@ function ExtractKey { function CreateDataDir { DIR=$1 mkdir -p $DIR - CONF=$DIR/bitmark.conf + CONF=$DIR/pfennig.conf echo "regtest=1" >> $CONF echo "keypool=2" >> $CONF echo "rpcuser=rt" >> $CONF diff --git a/qa/rpc-tests/util.sh~ b/qa/rpc-tests/util.sh~ new file mode 100644 index 0000000..80d3353 --- /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 gamecreditsd, 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/gamecredits.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 100644 index 0000000..9e9c046 --- /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 + +BITMARKD=${1}/gamecreditsd +CLI=${1}/gamecredits-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" +$BITMARKD $B1ARGS & +B1PID=$! + +D2=${D}/node2 +CreateDataDir "$D2" port=11010 rpcport=11011 connect=127.0.0.1:11000 +B2ARGS="-datadir=$D2" +$BITMARKD $B2ARGS & +B2PID=$! + +D3=${D}/node3 +CreateDataDir "$D3" port=11020 rpcport=11021 connect=127.0.0.1:11000 +B3ARGS="-datadir=$D3" +$BITMARKD $BITMARKDARGS $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 index ec7f808..db59f20 100755 --- a/qa/rpc-tests/walletbackup.sh +++ b/qa/rpc-tests/walletbackup.sh @@ -64,7 +64,7 @@ B4PID=$! function CreateConfDir { DIR=$1 mkdir -p $DIR - CONF=$DIR/bitmark.conf + CONF=$DIR/pfennig.conf echo "regtest=1" >> $CONF echo "rpcuser=rt" >> $CONF echo "rpcpassword=rt" >> $CONF diff --git a/qa/rpc-tests/walletbackup.sh~ b/qa/rpc-tests/walletbackup.sh~ new file mode 100644 index 0000000..78b05f4 --- /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 + +BITMARKD=${1}/gamecreditsd +CLI=${1}/gamecredits-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" +$BITMARKD $BITMARKDARGS $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/gamecredits.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" +$BITMARKD $B1ARGS & +B1PID=$! +D2=${D}/node2 +CreateConfDir $D2 port=11010 rpcport=11011 addnode=127.0.0.1:11030 +B2ARGS="-datadir=$D2" +$BITMARKD $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" +$BITMARKD $BITMARKDARGS $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 BTM +$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} btm" + 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 { + $BITMARKD $BITMARKDARGS $B1ARGS & + B1PID=$! + $BITMARKD $BITMARKDARGS $B2ARGS & + B2PID=$! + $BITMARKD $BITMARKDARGS $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/certs/PrivateKeyNotes.md~ b/share/certs/PrivateKeyNotes.md~ new file mode 100644 index 0000000..e07e578 --- /dev/null +++ b/share/certs/PrivateKeyNotes.md~ @@ -0,0 +1,46 @@ +Code-signing private key notes +== + +The private keys for these certificates were generated on Gavin's main work machine, +following the certificate authoritys' recommendations for generating certificate +signing requests. + +For OSX, the private key was generated by Keychain.app on Gavin's main work machine. +The key and certificate is in a separate, passphrase-protected keychain file that is +unlocked to sign the GameCredits-Qt.app bundle. + +For Windows, the private key was generated by Firefox running on Gavin's main work machine. +The key and certificate were exported into a separate, passphrase-protected PKCS#12 file, and +then deleted from Firefox's keystore. The exported file is used to sign the Windows setup.exe. + +Threat analysis +-- + +Gavin is a single point of failure. He could be coerced to divulge the secret signing keys, +allowing somebody to distribute a GameCredits-Qt.app or gamecredits-qt-setup.exe with a valid +signature but containing a malicious binary. + +Or the machine Gavin uses to sign the binaries could be compromised, either remotely or +by breaking in to his office, allowing the attacker to get the private key files and then +install a keylogger to get the passphrase that protects them. + +Threat Mitigation +-- + +"Air gapping" the machine used to do the signing will not work, because the signing +process needs to access a timestamp server over the network. And it would not +prevent the "rubber hose cryptography" threat (coercing Gavin to sign a bad binary +or divulge the private keys). + +Windows binaries are reproducibly 'gitian-built', and the setup.exe file created +by the NSIS installer system is a 7zip archive, so you could check to make sure +that the gamecredits-qt.exe file inside the installer had not been tampered with. +However, an attacker could modify the installer's code, so when the setup.exe +was run it compromised users' systems. A volunteer to write an auditing tool +that checks the setup.exe for tampering, and checks the files in it against +the list of gitian signatures, is needed. + +The long-term solution is something like the 'gitian downloader' system, which +uses signatures from multiple developers to determine whether or not a binary +should be trusted. However, that just pushes the problem to "how will +non-technical users securely get the gitian downloader code to start?" diff --git a/share/pixmaps/bitmark.ico b/share/pixmaps/bitmark.ico index 2e62907..e265360 100644 Binary files a/share/pixmaps/bitmark.ico and b/share/pixmaps/bitmark.ico differ diff --git a/share/pixmaps/bitmark1024.png b/share/pixmaps/bitmark1024.png index b35f495..f5385c3 100644 Binary files a/share/pixmaps/bitmark1024.png and b/share/pixmaps/bitmark1024.png differ diff --git a/share/pixmaps/bitmark128.png b/share/pixmaps/bitmark128.png index b513d95..ae35ca9 100644 Binary files a/share/pixmaps/bitmark128.png and b/share/pixmaps/bitmark128.png differ diff --git a/share/pixmaps/bitmark128.xpm b/share/pixmaps/bitmark128.xpm index 34705cb..1b0f6ba 100644 --- a/share/pixmaps/bitmark128.xpm +++ b/share/pixmaps/bitmark128.xpm @@ -1,210 +1,182 @@ /* XPM */ static char *bitmark128[] = { /* columns rows colors chars-per-pixel */ -"128 128 76 1 ", -" c #2F0063", -". c #330066", -"X c #370569", -"o c #380769", -"O c #3B0A6C", -"+ c #3F106F", -"@ c #40106F", -"# c #431472", -"$ c #461974", -"% c #4A1C76", -"& c #4C1F78", -"* c #4E227A", -"= c #51267D", -"- c #54297F", -"; c #572D81", -": c #582E81", -"> c #5E3784", -", c #5F3886", -"< c #603987", -"1 c #623B88", -"2 c #67418C", -"3 c #6A458E", -"4 c #6B4690", -"5 c #6D4A91", -"6 c #714E94", -"7 c #735196", -"8 c #765598", -"9 c #78579A", -"0 c #7D5D9D", -"q c #7F609E", -"w c #81619F", -"e c #8364A1", -"r c #8668A3", -"t c #8A6DA6", -"y c #8C70A7", -"u c #8D72A9", -"i c #9176AC", -"p c #947AAE", -"a c #977EB1", -"s c #987FB2", -"d c #9C83B4", -"f c #9F88B6", -"g c #A089B7", -"h c #A38DBA", -"j c #A792BD", -"k c #A994BD", -"l c #AC97C0", -"z c #AE9BC2", -"x c #B19EC4", -"c c #B4A1C6", -"v c #B7A6C9", -"b c #BCACCD", -"n c #BFB1CE", -"m c #C1B2CF", -"M c #C4B5D3", -"N c #C6B9D3", -"B c #C9BCD6", -"V c #CCBFD8", -"C c #CEC2DA", -"Z c #D1C5DB", -"A c #D4CADE", -"S c #D7CDE1", -"D c #D8CEE1", -"F c #DCD4E4", -"G c #DFD8E7", -"H c #E3DDEA", -"J c #E7E1EC", -"K c #E9E4EE", -"L c #ECE6F1", -"P c #EEEAF2", -"I c #F1EEF4", -"U c #F4F2F6", -"Y c #F7F5F8", -"T c #F8F7F9", -"R c #FDFDFD", -"E c None", +"128 128 48 1 ", +" c #97BF1C", +". c #97C01D", +"X c #98C01F", +"o c #9AC123", +"O c #9EC32B", +"+ c #A2C635", +"@ c #A4C739", +"# c #A6C93D", +"$ c #A9CA43", +"% c #ACCC4B", +"& c #AECE50", +"* c #B0CF54", +"= c #B2D057", +"- c #B4D15C", +"; c #B6D361", +": c #B9D466", +"> c #BBD66C", +", c #BED772", +"< c #BFD874", +"1 c #C0D977", +"2 c #C2DA7B", +"3 c #C6DC83", +"4 c #C8DD87", +"5 c #CADE8B", +"6 c #CCE08F", +"7 c #CEE194", +"8 c #D1E39B", +"9 c #D5E5A4", +"0 c #D7E7A9", +"q c #D8E7AA", +"w c #DAE8AE", +"e c #DCEAB3", +"r c #DFEBB9", +"t c #E1EDBF", +"y c #E4EEC4", +"u c #E6EFC8", +"i c #E6F0CA", +"p c #E8F1CD", +"a c #EAF2D2", +"s c #EEF5DB", +"d c #F0F6DE", +"f c #F1F6E1", +"g c #F3F8E6", +"h c #F6FAEC", +"j c #F8FBEF", +"k c #FAFCF3", +"l c #FFFFFF", +"z c None", /* pixels */ -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE,>>>>;>>>>>>>>>>>>EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE,,<,-,>>>>>>>>>>>>>>>>>>>>2>EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE>><1,-,,1,>;>>>>>>>>->>;>>>>>>1-1,-1EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE1>>>>,-,,,,-,>>>>>>;>>>>>>>>>>>>>,>,,,,<>1EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE1,>>>>>>>>>>>>>-;>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>,EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE2->,>>>>>>>>->>>>,>>>>>>>>>>>->>;>>>>>>>>>>>>>>>>><1EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE2<>>>,,>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,,->EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE1>>,>>>->>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-22,1,EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE>>>>>>>>>>>>>>;>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,,>>,EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>><>>,>>,>>,,EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEE>>>->>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,,>>>>,,EEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEE>><->>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>,>,<>>,,,,EEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEE>>><,>>>->>>>>>>>>;>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>,>,>>1>,>,>>>>>,>>,>,EEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEE->>>-1->>>>>>>>>;>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>><>>,,>,>>,,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>>,>>>>,>,>1>>,>,,>><>,EEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEE,,1-1->1-,>>>>;>>;>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>,,>>>>>>>>,>,,>,,>>>>>>,>>>,>>><><,,EEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEE>>-<,>-,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,>>,,>>>>>,-<,><,,,,,,,,,,<>>EEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEE,,>>2->,,,>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,>>,,>>>>,>,,,<<>>,>,,>,,,,,<<<->>-2-,>,>>>>>>>>>>>>>>>>>>>>>>>>>>,,>>>>,,>>>>>,>,,>,>>>,>>,>>>>>>,,,,>>>>,,,,,,,,><<>>>>2-1,>,,->>>>>>>>>>>>>>>>>>>>>>,>,,>>>><<>>>>,>,>>>>>>,>,,>,>,,,,,,,,<><<>,,,,,,,<><><>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,,>,->,>>>>,>>>>>>,>>,,,,,,,,,,,,,,,,,,,,,,,,<<><,,,EEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEE>>>>:>:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,>>,>>>,>,>>>,,>,>,>,>>>>>>,,,,,,,,,,,,,,,,,,,,,,,><<>,,,,EEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEE1>>>>>>>>>>>>>>-,>>>>>>>>>>>>>>>>>>>>>>>>>>>,,>>,>,>>>>>>>>>>>,,,,>,,,,,,,,,,,,,,,,>,,,,,><<>,<,,,EEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEE<->>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>,>>>>,>,>>,>,>>,>,,,,,,>,,,>>,,,,,,,,,,,,,,,,,,<><<,,,,,,EEEEEEEEEEEEEE", -"EEEEEEEEEEEEEE,,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>,,,>,>,,>,>,>,>>,,,,,,,,,,,,<><<>><,,,,,,,,,,,,,<><<><,<,1EEEEEEEEEEEEEE", -"EEEEEEEEEEEEE1,1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>,,><<>,,>,<,>>>,>,>>,,,,,,,,,,,>1<><<,,,,,,,,,,,,,,<,><<<<,<,1EEEEEEEEEEEEE", -"EEEEEEEEEEEE<-<->>>>>>>>>>>>>>>>,>>,>>>>>>>>,>,>>,>>>>>>,-,,>,><>>,>>,,,,,,,,,,,,,,,>>,,,,,,,,,,,,,,1,1,<<,<<<<<<<,,,,,>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>,>>,>,>,>>,>,,>,-,,,,>,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,,1,,<<<<<<<<<1,1EEEEEEEEEEE", -"EEEEEEEEEEE>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,>,,>,>,>,>>>,>1<,,-2,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,<,,,,,,,,1,<<<,<<<<<<>1,EEEEEEEEEEE", -"EEEEEEEEEE2,>>>>>>>>>>>>>>>>>>>>,>,>>>,>>>,>>>>,>,>,>>,>-,,,2-,,,,,,,,,,,,,,,,,,,,,,,,,>,,<<,,,,,,1,1,,,<<<<<1><<<><1,EEEEEEEEEE", -"EEEEEEEEE2>>>>>>>>>>>>>,>>>>>>>>,>>>,>>,>>>,>,>,,>>>>>>,,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,1,<,,,,,,<<,1,11,<<1><<>11>1<<<>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>,>,>,>,>,>,>,><>,,,,,,,,,,,,,,,,,,,,,,,,,,,>,,,,,,<<,<<<<<1,1,,11>111>1>1<<<<<>>>>>>>>>>><>>><>>,>>,>,>,>>>>,>>>>>>>>,,,,1,,,,,,,,,<>><,,,,,,,,,,,,<><<<><>,,<<<<<<<<<<,,<<,,1,1,<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>,>>,,,,,,,-,,,,,,,,,><>>,,<,,,,,,,,<,<><<1>>1<<<<<,<<<,<<<<,,1,1,1<<<<<<<<<-,,>>>>>>>>>>><>>>><>,>>>,,>>,,>>>>>>,,,,,,,,,,,,,,,,,,,<>><,<,,,,,,,,<,,,<<<<11,<<,<,<<<<<<,1<,,,,111,<1<<1<<<11EEEEEEE", -"EEEEEEE,1,,,>>>>>>>>>>>><>>>>>,,,>,>>,>,,>,,,,,,,,,,,,,,,,,,,,,,><,,,,<,,,<,<,,,,,<><<>1<<<<<<,<<<<<<,<<1,11,<1<<<1<1<111EEEEEEE", -"EEEEEE1,>,,>>>>>>>,,>>>>>>,>,>,>>,>,>>>>,>,,,>,,,,,,<,,,,,,<,,,,<><>,,<,,<,<,,,,<<<<<<<1<<<<<,<<<<<<<<<<,1,1<11<1<11<11<11EEEEEE", -"EEEEEE-,>>>>>>>>>>,,>,>,>>>>,>>>>>>>,,,>,,,,,,,,,,,,,,,,,,,,,,,,><<<,,,,,,,,,<<,<<<<<1<><<><<<<<<<<<<<<<1,1,<<11<1<<1<<111EEEEEE", -"EEEEE<,,>,>,>>>>>>>,,>>><>>>>,>,,>,,,,,,>,,,,,,,,,,,,,,,1,,,,,,,<><><,,,,,<<<<<<<<,<<>>11>1<<<<<<<<1<<<<,1,1111<<1<11<11111EEEEE", -"EEEEE1-2,>>,>,>>,>>>>>>,>>><,>,>>,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,,<<<<,,,,<<<<<,<<<<<<<<1>1<1>,<<<<<1<<<1<1,1<1<1<1<1<<11<1<1EEEEE", -"EEEE>>,,>>>,>>>,,>,>>,,>>>>>>,,,><>,,,,,,,,,,,,,,,,,,,,,,,,,,11,,,,,,<<<<,<<<<,<<<<<<<<<<<<<<<<<<1<111<11<111<11<11111111<<1EEEE", -"EEEE,,>,>,>,>,>>>,>,,>>,>>>>,,,<<><,,,,,,,,,,,,,,,,,,,,,,,,,,2-<,,<<<<<<<<<,<<<<<,<<,<,<<<<<<<<<1<1<<11<<11,1<1<11111111<111EEEE", -"EEEE>>,,>>>>,>,>,>>,>,>><>,>,,,>><,,,,<,,,,,,,,,,,,,,,,,,,,,,,-2<<<,<<<<<<<<<<,<<<<,<<<<<<<<<<<<<<,1<11<1<11<11<<111111111<1EEEE", -"EEE>>,,1>,,>>>,>>>,>,>,>><>,,,,,<>,,,<<,,,,,,,,,,,,,,,,,,,,,,1<<<<<<<<<<,<<<<<<<,<<<<<<<<<1<<<<2<<,11<11<1<<11<1<<11111111111EEE", -"EEE1>,>->>>,>>,>>,>,,,<><<><,,,,><><,,,,,,,,,,,,,,,,,,,,1,,1<<<<<<<><<<<<<<,<<<<1,1<<<<<<<<1<1<111<1<11<1<11,1<11111111111111EEE", -"EEE,>,>,,,>>,>,>>,,>,,>,<><>,,,,<><>,,,,,,,,,,,,,11,,,,,,11,<<<<<<<<<<<<<<<<<<<<<1<<<<<<<1<<<<1111<11<1<1<<1111<111<111111111EEE", -"EE,,>>,>>>,>>,,,,>,,,,,,<>><,,,,><><,,,,,,,,,<,,,,,,,1<<<<,1<<<<><<<><<<<<<<<<<<<<<1<11<>1<1111<1<1<<<11<111<<1111111111111112EE", -"EE,,,>>>>,>,,,,,>,,,,,,,,<><,,,,<><>,,,,,,,<,,,,,,,,,1<<<,1,<<<<<<<<<<<<<<<<<<<<1<1<1<<11<1<11<1<1<1111<1111111111111111111111EE", -"EE>,>>,>,,,,>,,,,><><><>><1>11><<<<<<<<<>11,1,,111,<<>>>22--22,,<111<<<11,,1,111<<<<<<>111<<11<1111111211111111111111111111112EE", -"EE,>>,>,,,,,,,,,,,><><<>7mNNNNNNMMMMNNNNNNNNNNNNNNNNmxy5-<222-,2xBBBBNBNCb5,111,<<<1111111<1<11<11gVBBBBVNVNe111<1111112211111EE", -"E,,,><,>,,,,,,,,,,,>><>>iTRRTRRRYRRRRRRRRRRRRRRRRRRRRRTSu<-212-9LRTRRRRRTRc1111,111<1111<<1<11112lTRRRRRRRRYe>11111111111111212E", -"E,,><><<,,,,,,>,,,><<>>>kRTTTRTTYTRRRTRRTRTRRTRTRRTRRRRRUh22,,1yYRRTRRRRRRUu,,11<1111<1<11<111,2xTRRRRRRRRRJ7111111111111111112E", -"E-<<><<>,,,,,,,,><<><<>gRRRRTRRRTRRF7>,,11<11111<111112cTRRRRRRRRRRS2111111111111112111E", -"E<>><>><,,,,,,,,<><<><>2ARRTRRTRRRTTTRRTRTRTRRTTRTRRRTTRRRD5<<<><<>,,,,,,,,<>><<>>6JRRTTRTRTRRRTRTRRRRRTRTRTRTTTRRRRRYt><1ZRRRTTRRRRRRRUd,11111111<11113nTRRRRRRRRRRRRDccccvcce11111111111E", -"<<<><<><,,,,,,,,><<><<>eURTRRTRTRTTTRTRTTTTTTTTTTRRRRRTRTRRg><5GRRRRRRTRTRRTRJ9,1<1<111<11<4nTRRRRRRRRRRRRRRRRRRRRRp<11111121121", -"<><>,,,,<,,<,,,,<<,,,,,dTRTRRRTRIhdippppppppddpdpkHRRRTRTRRg><0IRRRTRRRRRRRTRRM2111<11111<5MRRRRRRRRRRRRRRRRRRRRRRI0<1111211212<", -"><><,,,,,,,,,,,,<>,,,,,xTTTRTRRRG5,->>>>>>>>-,-1>>yURRRRRRRp>>iTRRRRRTRRRRRRRRTf<111111<<5NRRRRRRRRRRRRRRRRRRRRRRRH5121<2111111<", -"><<<,,,<,,,,,,,,,,,,,,,BRRRTRTTRZ21,<<<,<<<<,,,,<>0IRTTRRRIw<>kRTRRRRRTRTRRRRRRKq<11<1<<6NRRRRRRRRRRRRRRRRRRRRRRRRV<,:;;;;#$$+++", -"<><>,,,,,,<,,,,>>>,>,>3FRTRRRTRRv>>>>>>><>>>,,,>><,,,,,,,<,,,<7ewwwwewiPRTTRTRRRvererewewewweewercURRTRRRUd><2ARRRRRRRRRRRRRRRRRRk<1117ZRRRRRRRRRRRRRRRRRRHDSDDDDD9 ............", -"<>,,,,,,,,,,,1BUIUIIUUURTRRTTRTRTUUUUUUUUUUUUUUUURRRRRTRRb2<<6JRRTRRRRRHYRRRRRRRRPe1<9ZRRRRRRRRTDRRRRRRRRY6O@@@@@@o.............", -">><,,,,,,,<<<5GRRRRRRRTRRRTRRTRTTRRRRRRRRRRRRRRRRRRRRRRRm5><><>dRRRRRRRRU09HRRRRRRRRRnSRRRRRRRRTdOkRRRRRRRRA+.....................", -",,,,<><<<<<<-iTRRTRRRRTRTRTRRRTRTRRRRYRRRRRRRRRRRRRTTRYj11111xRRRRRRRRJ6>sYRRRRRRRRRRRRRRRRRYsooMRRRRRRRRv......................", -",,,<<<<<<<<<;$;DRRRRRRRRRRRRRRYuX .:IRRRRRRRRq.OOOOOO...............", -"<<><<<<<<<,,,0uuyyyuucRRRTRRTRYhyuuuuuuuuuuuuiupARRRRRRRUe<<9PRRRRRRRRi... 6URRRRRRRRRRRRIto.. 7RRRRRRRRRSVVVBBBn*..............", -"<<<<<><<<<<<<>>>--11-kRRRTRRRRJ6>,,><,,,,,,,>>>>qIRRRRRRTu<<<<<<<,11,2SRRTRTRRRm,>>,,>>,,,,,,,,>1kRRRRRRRL7-%lRRRRRRRRD@ .... 4IRRRRRRRL9 .....+CRRRRRRRRRRRRRRRRz...............", -"1<<<<<<<<<<<<<<,1,117JRRRRRRRRMuuuuuuuuuuuuuuupbYRRRRRRRC$.oMRRRRRRRRmo.......dRRRRRRL9.......&HRRRRRRRRRRRRRRRRu...............", -",<1,<<1,<<<<<<<2<<,,rUTRRRTRRRTTTRYTTRTRRTTRTRRRRRRRRRRRp .#FRRRRRRRRf .......#BRRRRK6....... 1URRRRRRRRRRRRRRRR6...............", -"E<,11,,1<<<<2<<<<<1,dTRRRRRRRTTRRRRRRRRRRRRRRRRRRRRRRRRF*. ;IRRRRRRRRe ....... 1LRRJ5 ....... qRRRRRRRRYbzxxzxxk&..............E", -"E<<,1,1,<<1<<<<<111,xRRTRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRU9...6TRRRRRRRU1..........iRH4 ........ fRRRRRRRRF#. ....................E", -"E<<<,1,1<<11<<<<1111NRRRTRRRRRRRRRRRRRRRRRRRRRRRRRRRRIe... uRRRRRRRRH=..........@h1 .........OnRRRRRRRRMo......................E", -"E<,212,,<1<<<11<2<<3FRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRF7.....zRRRRRRRRAO...........o ......... @DRRRRRRRRh ......................E", -"E<<<<<<<11111<11,<<9IRRRRRRRRRRRRRRRRRRRRRRRRRRRRRJh= ....OCRRRRRRRRc....................... ;LRRRRRRRRe ......................E", -"EE<<<<<<1<<11<<<<<20BZZZZZZZZZZZZZZZZCMMMNNNBNNMze*. .....@lNNMMMMBNq .......................;nNBMNNBMn> .....................EE", -"EE<11<111<11<1<<<<-22<2221212221221>&OXXoO.o.o.O .........oooOOoooo..........................XOoo.ooo........................EE", -"EE1111<<1<<1<<1111111111111111111;#o............................ .............................................................EE", -"EE111,11111<1111111111111111111:#o............................................................................................EE", -"EEE111,,<<1111111111111111121:#o.............................................................................................EEE", -"EEE111121111111111111111111>$o....................................................X..........................................EEE", -"EEE1111<<<<111111111111<1>%o.................................................................................................EEE", -"EEEE<1112<2111,11111111>&o..................................................................................................EEEE", -"EEEE1<1<,<11112,111111;O..........................................................................X.........................EEEE", -"EEEE11112<1111111111:#X.....................................................................................................EEEE", -"EEEEE111<<12111111>%X.....................................................................................X................EEEEE", -"EEEEE11111111111>;OX.......................................................................................................EEEEE", -"EEEEEE121111111>%X..................................X.....................................................................EEEEEE", -"EEEEEE1111111>;+..........................................................................................................EEEEEE", -"EEEEEEE11111>$...........................................................................................................EEEEEEE", -"EEEEEEE1111;O............................................................................................................EEEEEEE", -"EEEEEEEE1<&X............................................................................................................EEEEEEEE", -"EEEEEEEE;#..............................................................................X...............................EEEEEEEE", -"EEEEEEEEE....................X.........................................................................................EEEEEEEEE", -"EEEEEEEEE.............................................................X................................................EEEEEEEEE", -"EEEEEEEEEE..............................X................X............................................................EEEEEEEEEE", -"EEEEEEEEEEE................................................................................................X.........EEEEEEEEEEE", -"EEEEEEEEEEE..........................................................................................................EEEEEEEEEEE", -"EEEEEEEEEEEE........................................................................................................EEEEEEEEEEEE", -"EEEEEEEEEEEEE...........................................................................X..........................EEEEEEEEEEEEE", -"EEEEEEEEEEEEEE....................................................................................................EEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEX....................................................................................X..............EEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEE..................................................................................................EEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEE................................................................................................EEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEE.X............................................................................................EEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEE............................................................................................EEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEE.........................................................X................................EEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEE..................X............X........................................................EEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEE......................................................................................EEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEE....................................................................................EEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEE..................................................................................EEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEE.....................................................................X........EEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEE..........X.................................................................EEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEE..........................................................................EEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEE......................................................................EEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE..............................X.......X.............................EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE................................................................EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE...................X........................................EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE........................................................EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE....................................................EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE........................................X.......EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE..............................X...........EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE....................................EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE............................EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE", -"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE..................EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" +"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzXXXXXXo.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo.XXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXX.XXXoXXXXo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXXXXXoX.X . . X XXXXXXXXXXXXXXXXXXXXo XXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. XO@%-,24576531:=$+o XXXXXXXXXXXXXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXXXX .o+-39ighlllllllllllkhat8,$O....oXXXXXXXXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXXX. o$1edkllllllllllllllllllllllhp8-+. XXXXXXXXXXXXXXXXXXXXXXXXXXzzzzzzzzzzzzzzzzzzzz", +"zzzzzzzzzzzzzzzzzzzXXXXXXXXXXXXXXXXXXXXXXXX X@rkllllllllllllllllllu# oXXXXXXXXXXXXXXXXzzzzzzzzzz", +"zzzzzzzzzXXXXXXXXXXXXXXXXX >hlllllllllllllllllg5# XXXXXXXXX.oXXXXXX oXXXX.o o-eklllllllllllllllllt+ XXXXXXXXXXXXXXXXXzzzzzzzzz", +"zzzzzzzzXXXXXXXXXXXXXXXXX =gllllllllllllllllh8# o o XXXXXXXXXXXXXXXXXXXXXXXXXXo;ylllllllllllllllllwOXoXXXXXXXXXXXXXXXzzzzzzzzz", +"zzzzzzzzXXXXXXXXXXXX.oXX $alllllllllllllllly=X oXX.oo.XXXXXXXXXXXXXXXXXXXXXXXXXXo O4gllllllllllllllll6o XXXXXXXXXXXXXXXXzzzzzzzz", +"zzzzzzzXXXXXXXXXXXXXXXX.Orlllllllllllllllj6+ o oXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X&ulllllllllllllllj, XXXXXXXXXXXXXXXXXzzzzzzz", +"zzzzzzzXXXXXXXXXXXXXXXXX6lllllllllllllllg:o o XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +8lllllllllllllllg%.XXXXXXXXXXXXXXXXzzzzzzz", +"zzzzzzXXXXXXXXXXXXXX o -jllllllllllllllp% XXXXXXXXXXXXXXXXXXXXo XXXXXXXXXXXXXXXXXXXXX o4jlllllllllllllltOXXXXXXXXXXXXXXXXXzzzzzz", +"zzzzzzXXXXXXXXXXXXXXo.+plllllllllllllly$ XXXXXXXXXXXXXXXXXXXXX. XXXXXXXXXXXXXXXXXXXXXXXo1hllllllllllllll3.XXXXXXXXXXXXXXXXzzzzzz", +"zzzzzXXXXXXXXXXXXXXX X6lllllllllllllly# oXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXX,hlllllllllllllg% XXXXXXXXXXXXXXXXzzzzz", +"zzzzzXXXXXXXXXXXXXXXX%hlllllllllllllp# oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo1klllllllllllllwoXXXXXXXXXXXXXXXXzzzzz", +"zzzzXXXXXXXXXXXXXXXXoellllllllllllld% XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo5lllllllllllllk; XXXXXXXXXXXXXXXzzzzz", +"zzzzXXXXXXXXXXoXXXX -kllllllllllllh; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.o0lllllllllllllyOXXXXXXXXXXXXXXXXzzzz", +"zzzzXXXXXXXXXX.XXXXotlllllllllllll4XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo +pllllllllllllk> XXXXXXXXXXXXXXXzzzz", +"zzzXXXXXXXXXXXXXXX -jllllllllllllrO.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.X -jllllllllllllyOXXXXXXXXXXXXXXXXzzz", +"zzzXXXXXXXXXXXXXXXowllllllllllllg% oXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX7llllllllllllk- XXXXXXXXXXXXXXXzzz", +"zzzXXXXXXXXXXXXXX %hllllllllllll4 XXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX+allllllllllllwoXXXXXXXXXXXXXXXzzz", +"zzXXXXXXXXXXXXXXX 5lllllllllllla+.XXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ,llllllllllllg$ XXXXXXXXXXXXXzzz", +"zzXXXXXXXXXXXXXXoOallllllllllll1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOyllllllllllll3 oXXXXXXXXXXXXXXzz", +"zzXXXXXXXXXXXXXX -klllllllllllp+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXX .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX >llllllllllllyOXXXXXXXXXXXXXXXzz", +"zzXXXXXXXXXXXXXXX7llllllllllll3 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.Oplllllllllllh$ XXXXXXXXXXXXXXzz", +"zXXXXXXXXXXXXXXXOplllllllllllg# XXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 3llllllllllll2 XXXXXXXXXXXXXXXz", +"zXXXXXXXXXXXXXX %jlllllllllll9o.XXXXXXXXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX$hllllllllllleoXXXXXXXXXXXXXXXz", +"zXXXXXXXXXXXXXX 1lllllllllllk: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoellllllllllls+.oXXXXXXXXXXXXXz", +"zXXXXXXXXXXXXXXX9llllllllllld+.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2lllllllllllk& .XXXXXXXXXXXXXz", +"zXXXXXXXXXXXXX OillllllllllleoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX %hlllllllllll1 XXXXXXXXXXXXXXz", +"XXXXXXXXXXXXXX #glllllllllll2.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo XXXXXXXoOykjjjjjjjjjk7..XXXXXXXXXXXXXz", +"XXXXXXXXXXo.XX &kllllllllllk* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo#%%%%%%%%%%%#XXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXX >lllllllllllg#.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX . XXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXX 3lllllllllllpO.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXX XXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXX o 7llllllllllleoXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXX.oXXXXXXXXXXXX", +"XXXXXXXXXXXXXX 0lllllllllll8oXXXXXo .oXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXoelllllllllll6 XXXXXXXX XXXXXXXX oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXorlllllllllll4 .XXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXotlllllllllll2 .XXXXXXXXXXXXXXXXo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXtlllllllllll3 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXotlllllllllll3 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXoelllllllllll6 .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXX0lllllllllll8.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXX 7llllllllllleo..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo.... .... ..... .. .. .. .... ..... .XXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXX 3lllllllllllpO..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXO+++++++@@++@+@++++++++++++@@++@+++++@++++OoXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXX >lllllllllllg#.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoqggddgdddggdddgdgdgddggddggdddgdgdgddddggg0o.XXXXXXXXXXXXX", +"XXXXXXXXXXXXXX &kllllllllllk= XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXotlllllllllllllllllllllllllllllllllllllllllyoXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXX#glllllllllll2 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo..otlllllllllllllllllllllllllllllllllllllllllyoXXXXXXXXXXXXXX", +"zXXXXXXXXXXXXXXoyllllllllllleoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ootlllllllllllllllllllllllllllllllllllllllllroXXXXXXXXXXXXXX", +"zXXXXXXXXXXXXXXX9llllllllllld@.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o otlllllllllllllllllllllllllllllllllllllllllyoXXXXXXXXXXXXXX", +"zXXXXXXXXXXXXXX 1lllllllllllk: .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo ootlllllllllllllllllllllllllllllllllllllllllroXXXXXXXXXXXXXX", +"zXXXXXXXXXXXXXX.%jlllllllllll9o XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oylllllllllllllllllllllllllllllllllllllllllyoXXXXXXXXXXXXXX", +"zXXXXXXXXXXXXXXXOplllllllllllg# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXootllllllllllllllllllllllllllllllllllllllllltoXXXXXXXXXXo XX", +"zzXXXXXXXXXXXXXXX7llllllllllll3 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.otlllllllllllllllllllllllllllllllllllllllllyoXXXXXXXXXXXXXX", +"zzXXXXXXXXXXXXXXX-klllllllllllp+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXootllllllllllllllllllllllllllllllllllllllllltoXXXXXXXXXXXXXX", +"zzXXXXXXXXXXXXXXXOallllllllllll1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoyllllllllllllllllllllllllllllllllllllllllltoXXXXXXXXXXXXXX", +"zzXXXXXXXXXXXXXXX 5lllllllllllla@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXorkkkkkkkkkkjkkjkkjkkkkkkjllllllllllllllllltoXXXXXXXXXXXXXX", +"zzzXXXXXXXXXXXXXX %jllllllllllll5XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX$========*&&&&&&&&&%&%&=,hlllllllllllllllltoXXXXXXXXXXXXXX", +"zzzXXXXXXXXXXXXXXXowllllllllllllg% XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X 5llllllllllllllllltoXXXXXXXXXXXXXX", +"zzzXXXXXXXXXXXXXXX -kllllllllllllrOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -hllllllllllllllllltoXXXXXXXXXXXXXX", +"zzzzXXXXXXXXXXXXXXXorlllllllllllll4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX @pllllllllllllllllllyoXXXXXXXXXXXXXX", +"zzzzXXXXXXXXXXXXXXX -kllllllllllllh; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.OqllllllllllllllllllltoXXXXXXXXXXXXXX", +"zzzzXXXXXXXXXXXXXXXooellllllllllllld% XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.o4lllllllllllllllllllltoXXXXXXXXXXXXXX", +"zzzzzXXXXXXXXXXXXXXX %hllllllllllllli$ .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX1klllllllllllllllllllltoXXXXXXXXXXXXXX", +"zzzzzXXXXXXXXoXXXXXXXo6lllllllllllllly# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,jllllllllllllllllllllltoXXXXXXXXXXXXXX", +"zzzzzzXXXXXXXXXXXXXXX.+plllllllllllllly$ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo1hlllllllllllllllllllllltoXXXXXXXXXXXXXX", +"zzzzzzXXXXXXXXXXXXXXXX -jllllllllllllllp& XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo o4klllllllllllllllllllllllyoXXXXXXXXXXXXXX", +"zzzzzzzXXXXXXXXXXXXXXX o6lllllllllllllllf>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo +9klllllllllllllllllllllllltoXXXXXXXXXXXXXX", +"zzzzzzzXXXXXXXXXXXXXXXX.Orlllllllllllllllj7O XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX &ylllllllllllllllllllllllllltoXXXXXXXXXXXXXX", +"zzzzzzzzXXXXXXXXXXXXXXXX $alllllllllllllllly= Xo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX O4hlllllllllllllllllllllllllllyoXXXXXXXXXXXXXX", +"zzzzzzzzXXXXXXXXXXXXXXXXX =gllllllllllllllllj8$ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o:ullllllllllllllllljllllllllllltoXXXXXXXoXXXXXX", +"zzzzzzzzzXXXXXXXXXXXXXXXXX >hlllllllllllllllllg4#. XoXXXXXXXXXXXXXXXXXXXXXXX. o-eklllllllllllllllllt8llllllllllltooXXXXXXXXXXXXX", +"zzzzzzzzzXXXXXXXXXXXXXXXXXXX34676541:=$OoX .XXXXXXXXXXXXXXXXXXXXXX &87777777778 c #441673", -", c #51257C", -"< c #51267C", -"1 c #5A3183", -"2 c #5D3683", -"3 c #5C3584", -"4 c #5D3684", -"5 c #5D3784", -"6 c #5E3784", -"7 c #5E3785", -"8 c #5F3785", -"9 c #5F3786", -"0 c #5F3885", -"q c #5F3886", -"w c #5F3986", -"e c #603887", -"r c #603987", -"t c #603A87", -"y c #613A87", -"u c #613A88", -"i c #623B88", -"p c #643E8A", -"a c #653F8A", -"s c #65408B", -"d c #66408B", -"f c #66418C", -"g c #67418D", -"h c #67438C", -"j c #68438C", -"k c #6A468E", -"l c #6E4A93", -"z c #714F93", -"x c #714E94", -"c c #735195", -"v c #8162A0", -"b c #967CB0", -"n c #977DB1", -"m c #977EB0", -"M c #987EB2", -"N c #9980B1", -"B c #A189B8", -"V c #A38DB9", -"C c #A38CBA", -"Z c #A690BC", -"A c #AD9AC1", -"S c #B19EC5", -"D c #B3A1C6", -"F c #B8A7C9", -"G c #BBABCB", -"H c #BCABCC", -"J c #BCACCC", -"K c #BDACCD", -"L c #C0B1CF", -"P c #C0B0D0", -"I c #C1B2D0", -"U c #C3B4D1", -"Y c #C4B6D2", -"T c #C6B9D3", -"R c #CABED7", -"E c #CCC0D8", -"W c #CDC0D9", -"Q c #CEC2D9", -"! c #D0C5DB", -"~ c #D6CCE0", -"^ c #D8CEE1", -"/ c #DFD8E6", -"( c #E2DBE9", -") c #E3DCEA", -"_ c #E7E2ED", -"` c #E8E3EE", -"' c #EFECF2", -"] c #F0EDF3", -"[ c #F1EEF4", -"{ c #F7F5F9", -"} c None", +"16 16 82 1 ", +" c #96BF1B", +". c #96BF1C", +"X c #97BF1C", +"o c #97BF1D", +"O c #97C01D", +"+ c #97C01E", +"@ c #98C01E", +"# c #98C01F", +"$ c #99C121", +"% c #9AC122", +"& c #9AC123", +"* c #9BC224", +"= c #9BC225", +"- c #9BC226", +"; c #9CC328", +": c #9DC32A", +"> c #9EC42D", +", c #9FC42E", +"< c #9FC42F", +"1 c #A0C530", +"2 c #A0C531", +"3 c #A2C635", +"4 c #A2C636", +"5 c #A4C738", +"6 c #A4C739", +"7 c #A6C83D", +"8 c #A6C93E", +"9 c #A6C93F", +"0 c #A7C940", +"q c #A8CA42", +"w c #A8CA43", +"e c #AACB45", +"r c #AACB46", +"t c #ADCD4D", +"y c #B0CF54", +"u c #B2D058", +"i c #B4D15D", +"p c #B5D15D", +"a c #B5D25E", +"s c #B5D25F", +"d c #B6D260", +"f c #B6D361", +"g c #B8D465", +"h c #B9D466", +"j c #C1D977", +"k c #C9DE8A", +"l c #CBDF8E", +"z c #CBDF8F", +"x c #CCE090", +"c c #CEE195", +"v c #CFE297", +"b c #D5E5A3", +"n c #DAE9AF", +"m c #DCEAB3", +"M c #DEEBB7", +"N c #DFECBA", +"B c #E1EDBE", +"V c #E9F1CF", +"C c #EAF2D1", +"Z c #EAF2D2", +"A c #EBF3D3", +"S c #ECF3D6", +"D c #EDF4D7", +"F c #EDF4D8", +"G c #EFF5DD", +"H c #F0F6DE", +"J c #F2F7E2", +"K c #F5F9E9", +"L c #F6F9EB", +"P c #F7FAED", +"I c #F7FAEE", +"U c #F8FBEF", +"Y c #F9FBF1", +"T c #FAFCF3", +"R c #FAFCF4", +"E c #FAFCF5", +"W c #FBFCF5", +"Q c #FBFDF6", +"! c #FDFEFA", +"~ c #FEFFFD", +"^ c #FFFFFE", +"/ c None", /* pixels */ -"}}}}}224442}}}}}", -"}}}2244455r54}}}", -"}}4422r554r2rr}}", -"}454r444rr8r5rr}", -"}545r45rr8rrrrr}", -"558ajjsrfurusa8a", -"r2kTRTWNWVrv!Sxu", -"4cA]YF/G[_Z~{Pj-", -"5cY'JL)JWV)b`S:O", -"u5N~UIBNn:13Kl$O", -"uit<-=@$$OO@*OOO", -"}<$OOOOOOOOOOOO}", -"}+OOOOOOOOOOOOO}", -"}}OOOOOOOOOOOO}}", -"}}}OOOOOOOOOO}}}", -"}}}}}OOOOOO}}}}}" +"/////##oo#O/////", +"///#oo>88>oo$///", +"//#o8vSLLAx5o#//", +"/#oySYBzxBRAto#/", +"/o8DGs$o =hJA5O/", +"##vYs $o#O hYzO#", +"O1DM$$o$###=mN;#", +"oqPk o$o#o >3$#", +"oqPkoo$O1isssu;#", +"O2FM$$oouPWW!LqO", +"##vYs #o2fdb^Pr#", +"/o8SGs$oO#fH^PeX", +"/#oySYNzxBYAnPeo", +"//#o7vSPPAx3jHqo", +"///#o$>88>oo>0=#", +"/////#oooo$$Oo##" }; diff --git a/share/pixmaps/bitmark256.png b/share/pixmaps/bitmark256.png index b7d6895..5fcb408 100644 Binary files a/share/pixmaps/bitmark256.png and b/share/pixmaps/bitmark256.png differ diff --git a/share/pixmaps/bitmark256.xpm b/share/pixmaps/bitmark256.xpm index d19c65b..bb93047 100644 --- a/share/pixmaps/bitmark256.xpm +++ b/share/pixmaps/bitmark256.xpm @@ -1,339 +1,313 @@ /* XPM */ static char *bitmark256[] = { /* columns rows colors chars-per-pixel */ -"256 256 77 1 ", -" c #2F0063", -". c #330066", -"X c #360569", -"o c #38076A", -"O c #3C0C6D", -"+ c #3F106F", -"@ c #40106F", -"# c #421472", -"$ c #461974", -"% c #491B76", -"& c #4B1E78", -"* c #4E227A", -"= c #51267C", -"- c #542A7E", -"; c #562C80", -": c #582E82", -"> c #5E3784", -", c #5F3886", -"< c #603987", -"1 c #613B88", -"2 c #66418C", -"3 c #69448E", -"4 c #6B4790", -"5 c #6E4A92", -"6 c #714D94", -"7 c #745196", -"8 c #765498", -"9 c #785799", -"0 c #7B5B9C", -"q c #7F609E", -"w c #80619F", -"e c #8465A2", -"r c #8669A4", -"t c #896CA6", -"y c #8B6FA8", -"u c #8D71A9", -"i c #9176AC", -"p c #947BAE", -"a c #967DB0", -"s c #997FB2", -"d c #9C84B4", -"f c #9F88B7", -"g c #A089B7", -"h c #A38CBA", -"j c #A690BC", -"k c #A995BE", -"l c #AE9BC2", -"z c #B09DC3", -"x c #B4A2C6", -"c c #B6A4C9", -"v c #B8A7C9", -"b c #BDADCD", -"n c #BFB0CF", -"m c #C0B1CF", -"M c #C3B4D2", -"N c #C7B9D4", -"B c #C9BCD6", -"V c #CCBFD8", -"C c #CEC2D9", -"Z c #D1C6DC", -"A c #D5CADF", -"S c #D7CEE0", -"D c #D8CFE1", -"F c #DCD3E4", -"G c #DFD8E7", -"H c #E0D9E7", -"J c #E3DCE9", -"K c #E7E1EC", -"L c #E9E4EE", -"P c #EBE7F0", -"I c #EEEAF2", -"U c #F1EEF4", -"Y c #F4F2F6", -"T c #F7F5F8", -"R c #F8F7FA", -"E c #FDFDFD", -"W c None", +"256 256 51 1 ", +" c #97BF1C", +". c #97C01E", +"X c #98C01F", +"o c #9AC123", +"O c #9EC42C", +"+ c #A0C52F", +"@ c #A2C634", +"# c #A4C739", +"$ c #A6C83D", +"% c #A7C940", +"& c #A9CA44", +"* c #ACCC4B", +"= c #AFCE50", +"- c #B1CF55", +"; c #B2D057", +": c #B4D15D", +"> c #B7D362", +", c #B8D466", +"< c #BBD56C", +"1 c #BED771", +"2 c #BFD874", +"3 c #C1D977", +"4 c #C2DA7A", +"5 c #C6DC83", +"6 c #C8DD87", +"7 c #CBDF8F", +"8 c #CCE08F", +"9 c #CEE194", +"0 c #CFE298", +"q c #D1E39B", +"w c #D5E6A4", +"e c #D7E6A8", +"r c #D8E7AA", +"t c #DAE8AE", +"y c #DDEAB4", +"u c #DFEBB9", +"i c #E1EDBD", +"p c #E4EEC4", +"a c #E6EFC8", +"s c #E7F0CA", +"d c #E8F1CE", +"f c #EAF2D3", +"g c #EFF5DB", +"h c #F0F6DF", +"j c #F2F7E2", +"k c #F4F8E6", +"l c #F5F9EA", +"z c #F8FAEF", +"x c #FAFCF4", +"c c #FFFFFF", +"v c None", /* pixels */ -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW3>>>>>>>>>>>>>>>>>->>->>WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW,,>,>>73>>>>>>>>>>->>>>>>>>>>>>>>3>>2<>2WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW><1,>,2>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW><>>,>,-,>--<->>>3>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>,,>>,,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>><,,,,>>>>>>>1,-<>>>q>>->>>->>>->->>>>>>>>->>>->>>>>>>>>>:>>>>>>>,>WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW1,>>>1-->>>>>>>>-,,>>>>>W>>>>>>>>>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>,<,>2WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>>,,>>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>->>>>>>>>><>>>->>>>>>>:>>>>-1-<->-WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW-,<>>>>>>->>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,2>>1,,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,>>>>>>>>>>>,>,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW1>->>>>->>>>>>>>>>>>>>>>>>>>>>>>>>->>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>--,>>>>>>>>>>>>>,2>WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW7>>>>1>>>>>>>>>>>>>>>>>>>>>>>->>->>>>>>>>>>>>>>>>>>>->>>>->>>>>>->>;>>>>>>>->>>>><<>>>>>>>>>>>>>>>>,>,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>2>>>>>>>>>>>>>-->>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;>>,>>>>>>>>>>>>>>>>>>>>>>>>>>,2WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>>->>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>-2,>-WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>3<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>->>>>>->>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,,,,>,>2WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW1>>>>>>>>>>>>>>>>>>>>>>>>>>->>>->>>>>>>>>>>>>>>>>>>>>>>*>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>-2,>>>>>>>WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>>>>>>>>>>>->>>>>>->>>-->>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>-2-2>,>,>,>>,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>>>>>>>>>>>>->->>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,,>><>>,,,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>,,>>>>>>>>><,,,,,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>>>>>>>>>>>>>>>>>>>>->->>>->>>>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>><>>,>,>>,>>>>>,>>,,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>->>->>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><>>,>>>>>><>>>,>>>,>>,><,>>>,>,>>>WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW,>-<>>>>>>>>>>>>>>>->>>>>>>>>>>>*>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:>,>>1>>>>>>,<>>>>><>>,>>>,,>>WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW1-,>>1->>->>>>>>->>->>>>>>>>>>>>>>>>>>->>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>><,>>>>>>>1>,>>>>>>>>>>>,>,,>>,>,>WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>2-1,>,,->>>>->>>>>>>>>>>>3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>,>>>>>>>>>,>,>>>>>>>><>>,>>,,>>>>>>WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>-2->>1-2>>>>>>>>>>>>>>>>>qW>>>>>>>>>>>>>>>>>>>>>>>>->>>>->>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>,>>>>>1>>>>,>><>><>>>,>>>,>>>,>>,,,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>1,>->>>>>>>>>->>>>->>>>>>>>>>>>>>>>>>>>>>>>>->>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>,,>>>>>:,,,>,>1>>>1>>,>>,>,>,>>>>,,>>>WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>>>-,>>>>>>>>>>>>->>>>>>>>->>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,>>>>>>>>,>>>>>>>>>>>,>,,>>>>>1>,,,,>>>>>>,,,>>>>>,>,>>,,>>>>,>,,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW->>>>><>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>,>>,>>>>>>>><,,,:,>,>1>>,,1,>>>>,:,,,>>>>>>,>,>,,>,>>,>,,,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW1>>>>>><>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>->>>>>>->>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:,>,<,,>,,>>:,>>>>>>,,,,>>,>,>,>>>>>>,>,,,,,,,1WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW><-1,>>->>>>>>->>>>>-->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,>,>,>>,>,>,>,>>,>:>>,>>>>,,:,>>1>,,1>,>>>,>,,,>>,>,>>,>,>>,,,,,,,,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>>>>>>>>>->>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>>,,,><>>1>,,,,>>>>,,,>,:>>>,>>>>>>>>,>><>,,>,,>,,,,,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>,>>,>,>>,>,>>>>,>>,>,,,,>1>>>>,,>>,,,:>>>>>>>>>,>,>>,,,,,,,,>>,,,>,,,,>WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW-,>,->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>,>>>>>,,>,,>,:,,,,,>><>>:>>:,,,>1>>1>,>,>,>,,,,,>,,,,>,,,><,>,,,,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>-<,>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><>,>>>>>>>>>>>>>>>>3>>>>3>>,>,>,>>,>>,>>,>,>>,>>><>>><><>>>>,,>>,>>,>,,,,>><><,,,,,11:,,1:,,,,1->>>>>>>>>>>->>>>>->>>>>>>>->>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>>>,>,>>>>,>>>>>,>,>,,>>>>><>>>>><>,>>>>,>>,,,,,,,,>><>,,,,,111,,1<,,,,,>>,>>>>,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,>,>,>>,>,>>>>>,>,><>>><><>,>>>>,>>,,,>,>,,>,,><><,,11,,<:,,,,,,,,,,>>>>>>>>,->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>>>>>>,>>>,>>>>>>>,>,>>,>>>><>>>>>>,>,>>,,,,,,>,>,,,,>><><,:1,,,,,,,,,,,,,,<>->>>>>>>>>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>,,>>,>>>>,>>,>>>>>>>>,,>>>,,,,,:1><>,>,>,,>,<:1:1,,,,,,,,,,,,<,,,1,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW11->>>>>>->>>>,>>->>>>>>>>>>->>>>>>>>>>>>->>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>,>>>>>>>>>>>>>>>>>,><>>>>>,,>>,>,,>>>>>>>><>>>>,,,>,,,111,,,>,,,,<<<>,,11,,,,,1,<,<<,,,,,11,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW1-<>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,,>>>>>>>>,,:>>>>>>>>>>>>3>>>>>>>>>>>>,>,,,>>>,>,,><><>><>>,>>,>,,,:1,,,,,,,,><><,,,,,,,,:1,,<><<,,,,,,,,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>>>>>>>>>>>>>>>>>>->>>>>->>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,,>>>>>,>,>,,,,,>>>>>>>>>>>>>>>>,>>>>>>,,>,>>>>>>>>>>>>>>>><><>,,>,>,,,,,,,,,>,,<<><,,,,,,,,<,,,><><,,,,,,,,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW1>>>>>,,>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>,>,>>,,>>>>>>>>>>>>>>>>>>,>>,>>>>>>,>>>,,>>,>>,,<<>,,,,,,,,,:<,,,,,,,,,,><,,,,,,1,,,,<,<<>,,,<,,<,,<>WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>>>>-,>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,>,>>,>,>,,>>,>>>>>>>>>>>>>>>>,>>,>,>,,,>>,,>>>>,>,>,,<>,,,,,>,,,,,,,,,,,,,>,,<>,,,,,,1:,,,,,,<<,,,,,,,,,,<1WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>,,>>>>->>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,>>>>,>>>,>:,:,,>>>>>>>>>>3>>>>>>>,>,,>,>>>,>>>>>>,>,,,,,><,>,,>,,,,,,,,,,,,,,,,,>,,,,,,,,<<,,:1,>,,,,,,,,,,,<,,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW><-,,<->,>>>>>->>>>>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>,,>>>>,,,,>,,>,>3>>>>3>>>>>>>>3,>,>>>>>>,>>>,,,>,,,,,,><>><,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<1,<>,,,,,,,<,,,,,,WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>>>>>>>>>>>-,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>>>>>,>,>>,,>>>>>,>>,>,>,,:>>>>>>>>3>>>>>>>>>>>>>>>>>>,,,,,,>,,,,,,,>>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,11,,,,,,,,,<,,,,,,,,1,,,>,,<1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>>>>>,,>,>,,,,>,,,,>>>>>>>>>>>>>>>>,>>,>,>>,,,,,>,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,:,,,,,,,,,,,,,,,<,,<,,1,<>->>>>>>>>>>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>,>>>>>>,>>>,>,,,,>>,,>>>>>>>>>>>>>>>>>>>>>,>,,,,,,>>,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1,,<<>WWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWW,,->-<>>-1>>>>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>><,>>>,>,>,>:,>>,>>,>>>>>>>>>>>>>>>>,>>,,,,,,,,,>>>,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,,,,,<,<>,,<,<>WWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWW>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,,>>>,>>>>>,,,>,>>>,>,>>,>,>>,>,>,>,>,>>>>>>>>>>,>,>>,>,>>2>>>>,,,,,,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,,,<,<<<,,,,,,,<,<,WWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWW2>>>>>>>>>->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>,,,,,,>>>>>>>>>>>,>>,>,,>,,>,>>>>>>>>>>>>,>>,>2>>>>,>,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<>,,,,,,,,,,,,,<<,,,,,,,,<><,,,,<<<1,1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>,>>,>,>>>>,>>,>,>,>,,>,>>,>>,>>,>,:,>>>3>>>>>3>,>>,,,>>>2>>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,,,,,,,,,,,,,,,,,,,,,,<<,,,<<<<<<,<,<,WWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWW>>>>1->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>>,>>>,>>,>,>>>>>>>>>>>>,>>>>>,>,>,>,,>>>>>>>>>,,,,,>,>>>>,,,,>,,>>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,,,,,1,,<<,<,,<,,,,,1,<,<<<<<,<<<<,1,1,WWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWW1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>,>>>>>>>,>,>>>,>>,>>>>,>>>,>,>,>>>>:,>,:,,>>>>>>>>>,>,,,,,,,>,,,>>>,,,2,,,,,,,,,,,,,,,,,,,,<<<,,<<<,,,,,,<,,,<<<:,,<>,<<,,,,,,,11:1<<<<<<,<<,<<<,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,,,>>><>>,>,>,>,>>>>>,>,>,>>>,>>,>>>,>,>>,>,,,,>,,>,>>>>>>>>,,,,,,,,>,,,,,>>,,>>,,,,,,,,,,,,,,,,,,,,<<<,,<<>,,,,,,,,,,1:11,,,<<,,,,<,,,11111<<<<<,<<<<<<<<<>1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>>>>>>>><>>>>>,>>>>,>,,>>>>>>>,,,>,>>>>>,>,>,>>>,>,>,>,>2>>>>>>3,,>,,,>,,>,,,,>3,,,,,,,,,,,,,,,,,,,,,,,,:,,,:<<>,,,,<>,,,,,<1,1,,,,<,<,,<<<1,1:1<<<,<<,<<<<,<<<<,WWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWW>>-<,--1>>>->>>>>>>>>>>>>>;>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>>>>,>>>,,>>>>>>>,,>,>>>,>>>,>>>>,>,>>>>>,>,>,>,>>2>>>>>,,>>,>,>>>,,,,>>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<><,,,<><,<,,,,1,,,,,,,,,<<<<<,1,,<,<<<<<<<,<<<,<<<<,WWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWW>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>,>>>><><>>>>>>,,>>>>>>>>>>>,>>>,>,>>>,>>,>,,>,,,,>>>>>>>2>>>>>2>,3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,,,,,,,,,<,,<,,,,<<<,,,<<<<<111<<<<<1:<<<1111,<<<<<,,1WWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWW7>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,,,,>>>>><>>>>>,,>>>>>><>,,>,>>,>>,>,>>>,>,>>>,>>,,,,,>2>>>2>>>>2>,,>>>>,,,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,<<,,,,,,,,,<,,<,,,<<,,<<<<,<,<11,1<<<<1<<<<,11,1<<<<,,,1,WWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWW3,,>Wq>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>,>>>>>>>>,>>>>>>><>>>>,>>>>>,>>>>>,>>,,,>>>>,>>>>,,>,,,,,:1>>>2>>>>>2>>,,>2,,,>,,,,,,,,>>,,,,>,,,,,,,,,,,,,<><<,,,,,,,1,,1,,<,,,,1,<<<<,<<<1::,<<<<1:<<<<1111,<1,,1,,,,WWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWW,,>>>3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>,>>,,>>,>,>1>>><>>,>,>,>>,>>>,>>>>,>>>>>,>>>,,,,,,,>,,,,,,>>>>>>>2>>>>>>>,,,,,,,,,,,,,2>,,,,,,,,,,,,,,,,,,><<>,,,<11,,1,,,,<,<<<,<<<<,<<<<111<<<<<11<<<<:1,,1<,,1,1,11WWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWW3>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,>,,>>>,>>>,>>,,>,>,>>,>,>,,>>>,>,>,>>>>,>><>>,,,,,,,>,,>,,,,>>2>>>>>>>>2>>,,,>,,,,,,,,,,,,,,>,<<><,,,,,,,,,,<><<<<,<,,,,,,,,<<<,<,<<<<<<<<,<<<<<11<<11,1<<,11,1,11,11,1,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>>>>>,>>>,>>,>>>>>,,>>,,>,>>>,>,>>,>,,,>>,>,,,,,,,,,,,,,,,,,,>2>>>>>>2>>>>>,,,,,,,,,,,,,,,,,>,,><><,,,,,,,,<,><<,<<,,>1,,,,1,<,<<<,<,<<<<<<<<<<<<1:,<11<<<<:1<1,1,,,,,1,1>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>>>,>>,,>>,>>>>,>>,>,>,,>,>>>>,>,>>>>>,>,>>,,,,,,>,>,,,<>,,,,,,>>2>2>>>>>2>,,,,,,,,,,,,,,,,,,,,,><><<>,,,,,,,<<,,,,>,,,,,,1,,11<<<,<<<,<<<<<<<<<<11:1<<<<<<<<<<<<1,1,1,1,,1<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>2>>>>>>>>>>>>>>>,,>>>,>>,>,>>,>>>,>>,>>,>,>,>,>>>,,>,>>,,,,,,,,>,>,>><>,,,,,,,>>>>>>>2>>>>,,,,,,,,,,,,,,,,,,,,,<>1><<<,,,,,,,<,,,,,,,,1,1,1,,,,,<<<,<<<<<<<,1,<<1111<<<<<<<<<<<<,1,1,1,1,<<<>>>>>>>>>>>>>>>>>>,,>>>>>>>>>>>,,>>>,>>,>>,>,,>,:<,,>,>,>>>>>>,,>,:<,,>,,,>,>:,,>,,,,,>>,,,,,<>,,,,:11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<>,,,,,,,<,,,,1,,,,,,1<1<<<<<<<<<,1,1,1,:111,1<<,<<<<,<<<,<<<<<<<<<<1<<<<1<1,WWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWW,,<->>>>>>>>>>>>,>>>>>>>,,>>,>>>>>>>>>,>,>,>>,,>,>>,>,,>>>>,>,,>,>>>>,>,>,>>:<>,>,<,,>,,,>,,,>,,>,><,,,,1,,,,,,1,,,,<,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<<,1,,,,,,,,,,,1,11,,<><<,<<,<,,111,1,1,1111,,<<<<<<<<<<<<,<<<<<<<<<1<<<<1<2>>>>>>>>>>>>>>>,>>>>>>>>>>>>>>,>,>,>,>>>,>>,,,>:,>>>,>,>,,>,>,>>,>>>>,>>,>,>>,>,>,,><>,,>,,><,,,,,>,,,,11,,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<<<>,<<,,,<<,<,<,1,1,,1,>1<<1,<<,11,11,1:11,1:,1,<<<<<<<<<<<<1<<<,1<,11<<<<<,<<>>>>>>>>>>>>>>>>>><>>>>>>>>,>>>,>,>>>>,,>,,:<>,<,>,,>,>,>>>>>>>,>>,,>>>,>,>,>,,>,,,,>,,,,,,,>,,,,,,,,,,:,,,,,:1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,><<,<<,,,,<,<,,1,,1,,1,,>1<<,1<<,,1,:,1,11111,1,<<<<<<<<<<,<<<<<<1<<,<<11<111<<<3WWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWW,>>>>>>>>>>>>>>>><>>>>>>>>>,>,>>>,>>,,>,>>>>>>>,>>,>,><,>>>,,>>>>>,,>,:>,,>>>,,,,<<,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,,,,,,,,,,,,,,,<<<<>,,<,,,,<<<,,11,<,,1111>1,<<<1,1,1,,1,1,11,1,<<<<<<,<<,<<<<,<<<<,1,1,<1<<1<1<2WWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWW-,>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>,>,>>>>,>,>,>>,>,,>,>,:>,,>>>><>>,>>,,<>>>,,,,,,,:,,,,1:,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,,,<><<,,,,,1,<,<<<,,<<,1,,>1<<1,<,,1,1,11,1,1,11,1<<<<,<1,<<<<1<1,<<<111,11<<<<1<1<2WWWWWWWWWWWWWW", -"WWWWWWWWWWWWWW-2>,>,>>>>,,>>>>>>>>>>>>>>>,>>,>,>,>>,>,>>>>>>,>,>>,>,,>,>>>>>><<>>>,>>>,,,,<>,>,,,,,,,,,,,,,,,<,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<<<1,,,<,,<><,,<<<<1,,<<<<<<<1,111>>2,<1,,1,,1111,:11:,1,<<<<<<<1<<<<<1<12,,1,,1,<11<1<<<<1WWWWWWWWWWWWWW", -"WWWWWWWWWWWWW2>>>>>>>>>>>,>>>>>>>>>>><<>,>,>>>>>>,>,>>>,,>>,>>>><:,<:,>,>><>>>>>,>>,,,,,,,>,>>,>,,,,,,,,>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,,<,,<,<,<><<<<<<<,1<<<,<<<<11>>11>>1,,<1,,1,:11111111,1<1<<<<1<<<<<1<1<<,11,2,11<<1<1111<2WWWWWWWWWWWWW", -"WWWWWWWWWWWWW2,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,>,>>>,>,>>,>>,>,,>,>,>>>>,>>><>>>,,,,,,,,,,,,,,>,,,,,,,,,,,,,,,,><,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,,,,,,,,,,,,<<<,<<<,<<<<<<<<<<<,<<<,<,<<<,<<<<<<<<<<11,1,<<<<<<1<1<1<<<<1<1<2,2,2,,<<<<<1<1<<11WWWWWWWWWWWWW", -"WWWWWWWWWWWW->,>>>>>>>>,>,>>,>>,,>>,>,<>>,>,,,>>>>,>>>>>>,,>,>,>>,>,>>>,>>,>>><>,,,,,,>,,,>,,,>,,,,,,,11,,,,,,,,<>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<<<,,,,<,,,,<<<<<<<<<<<<<<<<<<<<<<,<,<<<<<<<<,1,<<<<<<<,1<11<<<<<1<1,<<<<<<<1<<,,,,1,<<2,<<<1<1<<1,WWWWWWWWWWWW", -"WWWWWWWWWWWW>>,2>,>>>>>>>,>,>>,>>>>,>>>>>,>>>>,>>>>>>,,>>,>,>,,>><,>,>,>>>>><>><,,,,,>,,,,,,,,,,,,,,,,,1,,,,,,,,,,,,,,,,<:,,,,><,,,,,,,,,,,<,,,,,,<,<<,,,,<<<<,<<<<<<<<<<<<<<<<<<<<<<<,<<<<<<,1,<<<<<<<<1,1,11<<<<<<,<<<<<<<1<<<2,,2<11,<<<<1<1<1<11WWWWWWWWWWWW", -"WWWWWWWWWWW,,2-->>>>>>>,>>>>>,>>,>>><><>>>,>>,>,,>,>>>>>,>,>,>>>><:,>>>,>,,<><<>,>,>,>,,>>,,,,,,,,,,,,,:,,,,,,,,,,,,,,,,<<,,,,<>,,,,,,,,,<,<,<,,,,,<<,<<<<,,<<<<<<,<<<,<<<<<<<<,<<,<<<<<,<<<<<,1<<<<<<<<,1,11<<<<<<11<<<1<<1<1<<,,,,1<11<21<<1<<<1111WWWWWWWWWWW", -"WWWWWWWWWWW>>,,>>>,>>>,>>,>>,>>,>>,>>,,>>,>,>,>>>>>,>,,>>,,>>>,>>,>>>>,>,,<,,,><>>,>,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<<<><<><,,,,,,,,,,,,1,,,,,,,,,<<<<<<1,,,<<<<<<<<<<<<,<,<,<<<<<<<<,<<<<<<<<<<<<<<1<1<1,1,<11,<1<1<11<11<<,1111111<2111,111<111WWWWWWWWWWW", -"WWWWWWWWWW>>>>>>,>,>>>>>,>,,>>>>,>>>>>>>,>,>,>>,>,,>,>>>>>>>>,>>,>>>,<>,,,><,,<>>,,<,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,><<><>,,,,,,<<,,<<,,,,,<<<<<<,<<<<,,11><<><,<<<<<<<<<<<<,<<<<<<<<,<<<<,<,<<<<<<1<<11>1,1111<1<1<11<1<1,1,11,,1,,1,1111<11<,,WWWWWWWWWW", -"WWWWWWWWWW,>>>>>>,>>>,>,>,,>>,>,,>>>,>>,>,>>>,>,>>,,>>,>,>>>>>>>><>,,,>,,><>>>>>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,><,,,,>>><<,,,,,,,<,,,1,1,,,<<<<<<,<<<<1,,,11<<<><<<<<<<,<,<,<,<<<<<<<<<<<<<<<<<<1<1<<<<<11<11<<<<1<<<<<111111111112,,,111,1111,2WWWWWWWWWW", -"WWWWWWWWWW,>,>>,>>>,>,>>,>>,>>>>>>,,>>>,>>>,,>>>,>>>>,>,>,,>>,,,,>,,,,,,><><<><>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,><<,,<,<><<,,,,<,<,,,,,,<<<<<,<,<<<<<<<<1,1><<<<<,,1,,<<<,<<<<,<<<<<<<<<<<<<<<<<,1<1<<<<<<11<1<<1<<11111<<1111,1,1,,2,111111<1,2WWWWWWWWWW", -"WWWWWWWWW,,>,>>>,,>>>>>><>>>,,>>>>>>>,,>>>,>>>>>>,,>,>>>>>>>,,,,<<>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<>><,,<>,,<<<<,,,,,<<,<<<<,,<<,1,<<<,1,,111>1,,1:11:111,,,2,2-<1<<<<<<<<<<1<1<1<<1<<1<1,,11,1,11<11<11<11,111,111<11<1<1<11<111WWWWWWWWW", -"WWWWWWWWW>>>>>,>>>>,>>>>>>,<>>>,,>,>>>>>,>,>,>,>>>>>>>,>>,,,,,,,:><>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<<<,,><<<<,,<,<,<<<<<<,<<<<<,,11,<<,1,1>111,11,11,111,1,,-2,2,,<<<<<<<<<<1,<1<1<<1111<11,,,111111<11111111,111,111<<<111111111WWWWWWWWW", -"WWWWWWWW<<>,>,>,>>>,>>>><><>>,,>>>>>>>>>>,>>>>>>>,,>>,,,,,,,,,>,,,,,,,,,,,11,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,<,<,,,><,,,,,,,<<<<<<<<,<<<<<<<,<<<<,,,11,,11,,111,,,1,1,2,,2,,,1<<<<<<><1<1<<1,<<<<<<11<11111,11<1<<1<<111111111,112<111<11111,WWWWWWWW", -"WWWWWWWW>>>,>>>>,,>>>>>>>>>>,>,>>,>,,>>,>>>,,>>,>>>>,,,,,,>,>>,>,,,,,,,,,,:1,,,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,,,<,,,<<,,,<<<<<<<<<,,<<<<<<<,,1<<<<1,1,,,1,,,1,1,,1,,1,2-2,,,2,,1<<>>2>1<1<<<<<<<<<111<111111111<111<11<111,111111<<<11111<1111WWWWWWWW", -"WWWWWWWW>>><>,>,>>2>>>>>>,>,>,>,,>,>>,,>,>>,>>>>>,,,,>,,,,,,,,>,,,,,:11,:,,,,,1,,,,,,,,,,,,,,,,,,,,,><<>,,,,,,,,,<,,,1,<,,,,><<>,<<,<<<<<<<1<<<<,1,<<,,<<<<,1,,11:,1:11,<<<<1,,12-2,1>1<1<<<<<<211<1<1<<1<<<1<111111111111<<1111111<11111111<<1111111111WWWWWWWW", -"WWWWWWW,>>>>>,>>>>>>>>>>>>>>,>>>>,>>,>>>,>>,>,,,,,,,>,,,,,,>,,,>,,<<,,,,1,,,,,:1,,,,,,,,,,,,,,,,,,,,<<><,,,,,<<,<,,,,,,<<,<,<<<<<<<<<<<,<<<:<<<<,11,<<<<,<<,1,1,111,11,1<<<<,11,,,,211<1<1<<2<<>1<1<<<<11>11111<1,1,1,11<1111,111<11,11,1111<<11111111,22WWWWWWW", -"WWWWWWW>,>>>,>>,>>>>>>>>>>>>>>,>,>>,>,>,>>>>,,,,,>,,,>,,>,,,,,,,<<<>,1,,,,,,,,,1,,,,,,,,,,,,,,,,,,,,,,<>,,,,<,<,<,<,,,,,<,,<<<<<<<<<<<<<<<<<<<<<1,,1,<<,<<<<,1,11,1,11,,<<<<<<,1,,,1,11<11,<<<<211<1<<1<1111111111111,1,<111111,1<<111<<1<<1<21111111111,WWWWWWW", -"WWWWWWW,>,>,>,>>>>>>>>2>>,,>>,>>>>,>,>>>,,,,,,,,>,>,>,,,,,,,,,,,>><<,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,<,,,,,,,,,,,,<,<<<<><<<<,<<<,<<<<<<<<<,1,,<<<<<,,<1,1,11,11,1,1<<<<<<<2,1,1,<11<1<<<<<111<111<11<11<<11<1,111111<<1<11111<,,2,211111<1111111112WWWWWWW", -"WWWWWW,,>>,,>>,>>>>>>>>,>>,>>>,>,>,,>>>,>>>>,,,>,>,,,,>,,><,,,,,<><<<,,,,,,:11:1,,,,<><<,,,,,,,:,,,,,,,,<<<,<<<,<,<,,,<<<<,<<<<<1:<<<<<<<<<<<<,<1,<,1,<<<<<<<<<<<<<<1,1,<1<<<<<<<1<<1<1<,1,1111<,11111111<1<1<1<1<1111<<11<11111<111111111111111211111111,WWWWWW", -"WWWWWW>>>,>>>,>>>,>,,,>>>,>>,>>>>,>>,,,,<>>,,,>,,,,,,,,,<,,,,,,,<<<<<:,,,,,1,,1,,,,,><>>,,,,,,11,,,,<,><,><,,,<<<<,<<<<<,<<<<<<<1<<<<<<<<<<<,<<<,,<<,1<<<<<<<<<<<<<<,1,1<<<<<<<<1<1111<<111<,<111111<11<<1<1<1<1<11<<1111<<111,11111112,111111111111111111WWWWWW", -"WWWWWW,>>>,>>>,,,>>>>>,>>>,,>>,>,>,,>,>,><,,,,,,,,,,,,,,,,,,,,,,:,,,<<,,,,:,,,,,,,>,<>><,,,,<1,:,<<<,<><,,,,<>,<,,<<<,<<,<<<<<<<111<<:<<<<<<<<,<,1<<1<<<<<<<<<<<<<<<,1,1<<<<<<1<<1<<<<1<11<1111<1,1,1111<11<1<<1111<<11<1111111111112,,1111111111111111111WWWWWW", -"WWWWW>,>,>>>,>>>>>,>>,>,,>>>,,>,>,,,,>,>,,,,>,,,,,,,,,,,,,<,,,,,,,,,<<<,,11,,,,,,,<><<<>,,,,<111<<,,<><>,<,<><<<<<<,<<<,<<,<<<<<<<1111<<<<<<<<<<<<,,,<<<,<<<<<<<<1<,1,11<1<1<<<11<<<11<<1,<1<11<11111<1<1<<1<1<<<<111<11<11<11111111-2,11111111111111111121WWWWW", -"WWWWW>><>,>,,>,>,,>,>,>>>>>>,,,,,,,,>,>,,,,,,,,,,,,,,,,,,,,,,,>,<<,,<,,,,,,,,,,,,,,,<><<,,,,<1<<,,<,,,,,,,,<<,<,<<,<<,<<<<,,<<<<<<<<111<<<<<<<<<<<<<<<<1<<<<,1<<11,1<<<1<<1,<<1<1,1<<111111,<1111,1<1111<1111<1111<1<11111111111111,22,,1111113111111111111WWWWW", -"WWWWW>>>>>>>>>>,>>,>,>,>,><<,,,,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,<<,,:,,,,,,,,,,,,,,,><<><,,,<:<<,,,,,,,,,<<<<,<<<<<<<<<<<<<<<<<,<<<<:<<<<<<<<<<<<<,<<<<<<<<<1<<<<<<<1<11<111<<<11<<<11<<1,1111<1111<1<<11<1<11111<1111111111111111122,,21121111111112111111WWWWW", -"WWWW>>>>>,>>>>,>,>>,>>>,<,<>>,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,<<,,<<,,,,,,,,,,,,,,<>><<<,,<><<,<<,<<<<<<<<<<,<<<<<<<<,<<<<<<<<<1<:<<<<<<<<<<<<<<<,<<<<<<<<<1<<<<<<11<<<<11111<11<11<111<1<1<<111,1<<111<11111<<<111111111111111111111111111111111111111111WWWW", -"WWWW,>,>>>,>>,>,>>,><>,>,,>,,>,>>,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,>,:,:<<<<,,,,,,,,,,,,><<<<<,,><<>,,<<<,<<<<<<,<<<<<<,<<<<<<<<<<,<<111<<<<<<<<<1:<<<<1<1<<<<<<1<11<<<<<11<<<11,<11<111<1<1<1<1<111,1<<111<11111<111111111111111111<111111112111111121112111111WWWW", -"WWWW>>,,>>,>>>,>:,,,,,,,,>,>,,>,>,>,:,,,,,,,,<<<,,,>,,>,,>>,>,,>,<,,>,,>>,>>>>,,>><><,>><,,,>,<><,1,,,,,,,,,,,1,1>11<<<<<><<<,<<<<,,,,,<,,,,,,,1,,,2,1<<<<<1<1,1<1<1<11<1<1<1<111<1<11<1<1<1<11<11111<<<<<<<<<1<<<<<<<<<111112112<<<<<1111112111111211112111WWWW", -"WWWW>,>>>,>>,>>,,,,,,,,>,,>,,,,>,,,,<<,,<<,,<<:<>>>>>>>>>>>>>>>><:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>,,,,,>,1,1,11><<<<<<<<<<<,1:>>,,,,>>,>,,>>,,,-1,<<<<1<1<<11<1<<1<<<1<1<11<<11<<1111<1<1<1<1<111,,,<,,><<<><<<,<<<<11111111<<<22<1111111111111121111111WWWW", -"WWW>,>>,>>>,>,,,,,,,,>,,,,,>,,,,,,,,<><<<<:,,,,,>3dgdddgddddgddgddssgddddddddddddddddddgdgddgddgddddgdddpyw5,>,11,,1<<<<<<<<<<<>,>>,,,,,>,,,,,,><,,,,,,,,,,,,,,><<<<<,,<,,,>iTRRRRRRRRRRRRRYUIKRRRRRERERREEERRERERRRRERRREREEEERRERETIHMd6,,,1,<<<<<<<><<<2CLLPYYUUEEEEEEEEEEELw,,1<<1<<1<11<1<1111<1<1,1111<<11<11<1<11<<11111gYEEEEEEEEEEEEEEEEEEc,111111,<<<<21<111111111111111112114WWW", -"WWW>>,>>,,,>>,,,><>,,,,,,,,,,,,,,,,,,,,,<<,,<<<:>lRRRRERERRERRRRTREREEREREREERERRRERRERRRRERERERREREREREEREEETHj5>,,1,,,<<,<<,<6KERETRRRERERERREEEEEB3,111111<<<<1<11,11111111111<<1<11<1,1,1,11<12lTEEEEEEEEEEEEEEEEEEEg,11111112112111112111111111111111111WWW", -"WWW>><<>,,,<,>,,,>,,,,,,,,,,,,,,,,,,,,,,<,,,<<,,,mRRRRRRRRRRRRRRRRREETRERRERREERERREEREERERRREREERERRRERRERREEEEAe,,,,111><<,1>eYEEETRRREEEEEEEERERERk,,1,1,,1<1<11<111,<1<11,,111111<1111111111,1lYEEEEEEEEEEEEEEEEEEEYt,1121111111<111111111111111111221111WWW", -"WWW<<><,>,,>>,,,,,,,,,,,,,,,,,,,,,,,,,,,<<,,,:,<2DERRRRRRRERRERRRREERRERERERERREREERRREREERERERRRREREREEREERERREELp,,2,,<<<<,<,sREEEEEEEEREEERREEEREEPe><1<1<1111<1<1<1111<11111<11<<1<1111111111lYEEEEEEEEEEEEEEEEEEEEP9111111111112111111111111111121111212WWW", -"WW,>><><,,>,>,,,,,,,,,,,,,,,,,,,,,,,,,,,:<,,,<<<9LRRRERRRRRRRRREEEERERRERERERRERERRERERERRERERERRERERERRERRERREREEUp>,1,<,<<1<,zEEREEREEEREREEEEEEEEEEA5><1<1<11<1<1<11111111,1,111<11<1111111,2xEEEEEEEEEEEEEEEEEEEEEEF41111111111111111121121111121111111124WW", -"WW,,>,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,:,,,,1,,,,2,,2BEEREEEEEEEREEREEEEEEEREl11<111<1,11111,11,,,1111<11,11<111111,3vEEEEEEEEEEEEEEEEEEEEEEEN11111121111111111111111111111112111111WW", -"WW,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<<,,,:dRRRRRRREREEEERERERRRRERERREERREREERREEREREEERRERERRRERRRRERREREEREES5>1,,2-1,3FEEEEREREREEEEEERRERREEEUu<11<1<1,,1,,1111,221,1,11111111111113vEEEEEEEEEEEEEEEEEEEEEEEEl<1111111211111121111112111121111121221WW", -"WW,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,><,,<<<<,>2,,2,,9PERREREREEEREEREEEEEEEREEF6,1111<<2-21111111,11,,11111<<111114nEEEEEEEEEEEEEEEEEEEEEEEEEa<11<1111111111111211111121112111121112WW", -"WW,,,,,,>,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<>,,<<<<,1BEREREERRRRRERERERREREREERREERRERRERREERRERERRRRERERERERRERRRREREREEEK9>,,,22-tTEEEEEEEEREREERERREEREEERRv1,<<11,22<11,1,1111,2,<111111111,5nEEEEEEEEEEEEEEEEEEEEEEEEEUe<1<<11111111111<1111<21111111112111114WW", -"W,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,,,,>>>3FERRREREERERERRERERRRERRERRERREREREEREERERREEERERRERERERREREEEEEREEEERd>,<<<1>gEEEREEEREEEEREEEEEEEEEERERTp,11112-2<2-221,,12,<,111<1111115NEEEEEEEEEEEEEEEEEEEEEEEEEEPy000000000000007<1111122<111211211111211W", -"W1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,,,,,,,,<<<9IERERRERREERREERERREERRERERRERRERERRERREREERREERERRERRRERREREREREERERRz,1<1<1>vEREEEEEEEEEEEEEERERERREEERRH9>111<<2<22,-1211<<<211111<1116BEEEEEEEEEEEEEEEEEEEEEEEEEEERUIUIIUIIUUUIIIUB21212111<211111111211112W", -"W,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>yTRRRERERERREERREREERREREERREERERERRRREERRRRERERRERERREEREEEEEREEREEEEEC2111<12ZEEEREEREEREEEREEEEREREEREEERm3<<12<<,,2,22,12<<<<1111111<6CEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEREEEEEM<12111112111112111221112W", -"W,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,>hEREERERERRERRREREREEEEEEEEEEEEEEEEEEEEEEEEEEEEEREEEEREEREEREEEEREEREEED3,<11<5HEEEEEEEEEEEEREEREEEEEREEEERRTd<>12-222-22-22-211<11111118CEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEk<11111211111211121111222W", -"W1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<<>bRRERERRERRERERRERRZmmmmmmbbmmbmbmbmbbmbmnnnnnnnnmmCPEEERREEEEREREEREEEF3<1<<,qUEREREEEEEEEEREEEREEREEREREEEEH0,,111111,2,111,<1<1111<,8AEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEERp<11111211111211212121111W", -"W,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,,,,,<,<<,1,1,,,2ZRRRRREERERREERRERYw>>>>>11,,,,<<1><<<<<<<<,,,,1<,>20vREEEEREEEERREEERES3,1<<>iREEEEERREREREEEEEEREEEEREEEREREN3111111122,<112<<21111<9SEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEUq<11211111211111111111122W", -"W,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,<<,,,,,,,,,,,6KERREERREREERRERREH6,,1,,1>,1,1,1>>1<<<<<<<,,<<<<,1,,1bERREEEEEREEREEEEN1<111,kERERREEEEEEREEREEEEEREEEEEEEEEEEh,1111122-<,12<11111<<9DEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEJ6<212111122112121111211<2W", -"W1,,,,,,,,,,,,,,,,,,,,,,,,,,,,<,,,,<<,,,,,,,,,qUREERRERRERREERREEZ2>1,,,,,1,1,1>11<<<<<<<,1,<<<<1,1,>eYEEEREREEEEEEREEx>11<<1mEEEEEEREREEEREEEEEREREEREREEEEEEPw<1112-,222,,211111<0FEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEZ2111111211111111222112222W", -">,,,<,,,,,,,,,,,:,,,,,,,,,,,,,,,<<,,,,,,1,,,1-dRERREEERERERRREEREb<<,1,1,1,11,,1,,1,><<<,,,,,,2,<<<1>9IEEERRREREEEREREd-<1113AEEEEREEEEEEEEEEEEREEEEEEEEEEEEEEEC4<111111,,,2,11111qFEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEv<12211,<<1111<::::;;&;%$$#", -">,,,<<,,,,,,,,,,1,,<,,,,,,,,,,,,,><,,<,,,,1,1>kRRERRRRERERREERRERh><1,1,1,1,,1,,11,,<<<<,22,1,,<<<<1>dTEEREEEEEEREEEEUe,11<<7KEEREEEREREERREEREEEREEEEEEEEEEEEEEk1111111,2,211111eHEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEf,<,:::;;&$$#+OooXo .......", -",,,,,,,,,,,,,,,,1<,,<,,<,,,<,<>,,,,<,<<<,1,111MEERREERRRREERREERRu><<<,<,11,,1,1,1,1>1<<<<<<<<<<<<1,2NEREEEREREREEEEES3,1<<>wYEEEEREREREEREEEEEEEEEEEEEEEEEEEEEEIt11111122-,12,,eJEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEY7OOOXXX............ .......", -",,,,,,,,,,,,,,,<,,,,,,,,,,<<,<>>,,,,<<<<,1,,>3DEERERRERERERERRRRI9><<<<<1,,,1,,,1,1,1<<<<<<<<<<,<<,,gTEEEREEEEEEREEEEj,,<<<>dERERREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEES711111,,2211,tJEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEK;..........................", -",,,,<><,,,,,,,<>,<,,,,,,,,<,>>>>>>>>--<---,>-9LRRERRRREREEREERREF3>>>>>>>>->->>->>>>-,,---,,-,,-,>1gUEEEEEEREREREREEG6<1111>zEEEEEEERREEEEEEEEEEEEEEEEEEEEEEEEEEEEx111111111<<,,,,,,,,><,,,,<,,<,,,,5pdiapaididdddddplTRERREERRERRERREEEHdddddddddddpddddidppdddddddidddddBTEREREREEEREEEEETd<<1<111BEEEREEREEREEEEEEEEEEEEEEEEEEEEEEEEEEEYu<1111111,,,<>,<<>,,<,,<<,<,,,,,,,<>dRERRRTRTEETRRYTRRERREERREERRRRRERREERRERERRERRRERRETTTERRRRRRTTREERRERREEEREEEREEEREEEb2<1<11,4FEEEEEEEEEEEEEEEEERYEEEEEEEEEEEEEEEEEEEG711111<<,>><><,,,,,<<,,,<,<<<,cEEREERRETEERRRRERREERREERREEERERREREEREREEEEEREREEREEEEEEEEEERREREEEEREREEEEREEEREEEEC5<1<111,9LEEEEREEEEEEEEEEEEFkREEEEEEEEEEEEEEEEEEEb11111,,,<<,,,,<,<<<<<1CRRERERREREEERRERRERRRRRERERREERRERERREEREREREREEEEEEEEREEEEEEEREEEREREREEREREREEEEEEC8,111<,1,tTEEEEEEEEEEEEEEEEEB3NEEEEEEEEEEEEEEEEEEETa<<11aIEEEEEEEEEEEEEEEEEEEl#nEEEEEEEEEEEEEEEEEY>...........................................", -",,,<,,,,<<<>,,,<,,,,<<<<<<<5JREEERERREREEEERRERRREERRERRERREERREEEREREEEEEEEERREEEEEREREEREEEEEEEEERREEEEEEEEREEN7,,11<111,hEEEEEEEEEEEEEEEEEEz<9KEEEEEEEEEEEEEEEEEEEJ9<2sUEEEEEEEEEEEEEEEEEEEjO#FEEEEEEEEEEEEEEEEEJ%...........................................", -",,,<<<<<<><<,,<<,<<<<<<<<<>qURRREREEEEREREEEEEREERREEERERRERRERREEEEEREERREREEEEEEEREEEEEEEEREEEEEREEEEERREREEYx3,1,1<1<,11vEEEEEEEEEEEEEEEEEEd<<<<<>,,<,<<<,<<<<<<:iRRREREERREERERRERRERREERRRERREREEEEEEREREEEREEEEERREETEEERERREEREEREREEEEREREEEEEKi1,1,2<1<1111AEEEEEEEEEEEEEEEEEYw><2mEEEEEEEEEEEEEEEEEEETBUEEEEEEEEEEEEEEEEEERfO..6EEEEEEEEEEEEEEEEEEl............................................", -",,,,:<,,,,,,1,,1<<<><<<<,,>jERERRRERERERREERRRERERREEREREEEEERREEREEEREEEEREEEEEEEEEREEEEREEEEEEEEEEEEEEREEEEId1,2,,11,1116JEEEEEEEEEEEEEEEEEL81119HEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEERdO . uEEEEEEEEEEEEEEEEEEu...........................X................", -",,,11,<,,<<<,1,,<<<<<<<<11>mEERREERERERRERREEERRRERRRERERERREEEEEEEEEEEREEEEEREEEEREEEEREEERREREEEREREREEEEEEEUf,,1211121<0UEEEEEEEEEEEEEEEEED2111,pTEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEERaX....lEEEEEEEEEEEEEEEEEE6 ...........................................", -",<1111,,<<<<1,1,><<<<<<<,,2SERRERERRREREREERREREERREEEREEEEEERREEEEREEEEEREEREEREEEEEEEEEEEEEEERREREEEEREEERREEUi,,,,2111,iREEEEEEEEEEEEEEEEEM<<1111vEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEYuX....OVEEEEEEEEEEEEEEEEEU;............................................", -",<1:<<1,<<<<<<,,<<<<<<<,,,6KEEERERERERERRRRREREREEEEREEEREEREEEEEEEEEREEEEEREEEEERREEEEEREEEREEEEEEEEREEEEEEEEEEG7,2,,111,lEEEEEEEEEEEEEEEEEEl><11116GEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEETyX ....$JEEEEEEEEEEEEEEEEEF#............................................", -",,1,,1,1<<<<,,11<<,<,1,1,>eTRRRERREREETEERERREEEREREEREREEEEEREEREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEREREEEEEEEEk,1111111mEEEEEEEEEEEEEEEEEEi,111>;$7UEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEUrX..... >UEEEEEEEEEEEEEEEEEMX............................................", -",1,1<<1,<<<<1,,,<<,<1,1,1,dEEEEEEEEEEEEEEEEEEREREEREEREEEREREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEERREEEEEEEEEEEEEEG6,111113DEEEEEEEEEEEEEEEEEUq>;&$OX..fEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEUe....... 0EEEEEEEEEEEEEEEEEEg.............................................", -"<,1,,<<<<,<<1,,<1,1,,1,1,,0klllllllklllllllSEEERREEEEEEREREREEClllkzllllllkzllllllkllllllllllllNUEEEEEEEEEEEEEEEETt,1111<7LEEEEEEEEEEEEEEEEEF;O.......$VEEEEEEEEEEEEEEEEEEEEEEEEEEEEI0........ sEEEEEEEEEEEEEEEEEEChjhhhhhhhhhjhhg;.............................", -"<1,1<<,,<<<<,,1<,,1,1,1,,,,>>>>,>>>>>>>>>>>mEEEEEEREEREEEEEEETy>>>><,,,,,,><,>>>,,>,,>>>,>,,,,,1iKEEEEEEEEEEEEEEEEh,111<111<1<1<11<11<11111<1<1<11111,11-gREEEEEEEEEEEEEEEl<<111eYEEEEEEEEEEREEREEEB211<1<<11<1<1<111<1<1<1<1<1,11111,,7KEEEEEEEEEEEEEEEj,11111BEEEEEEEEEEEEEEEEEE3 ...........,KEEEEEEEEEEEEEEEEEEEEEJ3........... 2REEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEv..............................", -",,:1,111<<<<,<<<,,,1<<<<<<<<<<<<,2,,,12-,>dEERERERREREREEREREx>1<1<1111111<11<11<1<1<1<111111111,rYEEEEEEEEEEEEEEEi,11115GEEEEEEEEEEEEEEEEEL=.............uEEEEEEEEEEEEEEEEEEEEJ1.............rEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEd......................X.......", -"W<1111,:,<<<<<<<<<<<,<<,<<<1<<<<>2<<1,11,,xEREREEEEEEEEEEEEEEd>,1<<<1<11<<1<1<<<1<111111111111<<1vEEEEEEEEEEEEEEEUq<21<-2IEEEEEEEEEEEEEEEEES@.............ObEEEEEEEEEEEEEEEEEEF<..............gEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE0 ............................W", -"W<11,,11<<<<<<<<<<<<<<<<<<<<<<<1<<<<11<<,2CEEEEERRERERERERRETt,2<1<,11<1<<<111<<<1111111111111<,iUEEEEEEEEEEEEEEEJ6,-*@.3REEEEEEEEEEEEEEEEEv...............:JEEEEEEEEEEEEEEEED,..............XMEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEET< ............................W", -"W111,<11<,<,<,<<<<<<1<<<<<<<<<1,<<<1<<<<,5FEEREREEEEEREREEEEL7-,<,,,,,>>,,,,,,,,,,,,,,,,,,,,,15fLEEEEEEEEEEEEEEEEB*OX.. rEEEEEEEEEEEEEEEEEEf................eREEEEEEEEEEEEEEA:...............#FEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEJ%.............................W", -"W<:,1<11<,<<<<<<<<<<<<<<<<<1<<,1<<11<<<<,9IEEEEEREREEEEEEEEEIxlllzlllllllllllzllzzllllzzllllzMJEEEEEEEEEEEEEEEEEEs .....jEEEEEEEEEEEEEEEEEE0................OcEEEEEEEEEEEEEZ; ...............-IEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEB+.............................W", -"W1<<<<<<<<1,,11,,1,<<<,1111,1,1,2<<21,11,iREEEEREEEEEEEERREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEY1.....XMEEEEEEEEEEEEEEEEET<.................=GEEEEEEEEEEEC=.................6EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEz..............................W", -"W1<<<<<<<<1<11111,<<<<1,,1111,,1>,,,,11,>jREREEEEEREEREREEREEREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEnO.....$FEEEEEEEEEEEEEEEEEJ&..................9TEEEEEEEEEB=................. uEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEi..............................W", -"W<<<<<<<<<<<1,,,1,,1<<<1<<1,111111,,1<1<,bREEEREERREEREEREEEEEEREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEET6 .... :UEEEEEEEEEEEEEEEEECO..................okEEEEEEEEM*...................lEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEET5..............................W", -"W<<<<<<<<<<<,1,1,1,,1<1<<<1111,1,1,1<1<12ZRRRREEEEEEEEEEEEEREREEEREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEElX..... 7EEEEEEEEEEEEEEEEEEl................... *SEEEEEEM%...................ONEEEEEEEEEEEEEEEEEUr444354545455533+...............X..............W", -"WW<<<<<<<<1<,<<<1111,1,1<11,1,1,111111<<7HEREREEEREEEEEEEEREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEED= ......iEEEEEEEEEEEEEEEEEEi.................... 6UEEEEv& ...................%HEEEEEEEEEEEEEEEEEF# . . ...............................WW", -"WW<<<<<<<1,11<<111,11,1,1<,1,1,1,11,11<,wUEEEEREEEERREEREREEREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEL2........lEEEEEEEEEEEEEEEEEE7......................dEEEc$.................... >UEEEEEEEEEEEEEEEEEMX.............................................WW", -"WW11<<<<<<1<<<<1<1<1<1,111<<11111,11111,pEEEREEEEREREEEEEREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEL7........OVEEEEEEEEEEEEEEEEEU:......................$BEz$..................... 9EEEEEEEEEEEEEEEEEEh..............................................WW", -"WW11<<1<<<<<<<<<1<1<1<11<11111,11111,11,kEREEEEREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEJ5.........&JEEEEEEEEEEEEEEEEEF#.......................11<<<<1<1<1<1111,111,1<<111<1<1<11111MEEEREREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEC>......... dEEEEEEEEEEEEEEEEEEEEREEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEUSg2+ ..............+SEEEEEEEEEEEEEEEEEL=................................................ eEEEEEEEEEEEEEEEEEEs.........................................X....WWW", -"WWW11<11<<11<<1111<1,1111<<11111<11<1,>elllzllllzkzzzlllllllzzllzzzzllzzzzlfdssdssdsdsdsdssdaddi0,@. ................OrddssdssdsdsdsdssdeO.................................................>1<<<<<<<<<<<<<<<1<<<<<<<<>*O.. . . . . . . ..................... . . . ... .. ..................................................... ... . . .. . . ..............................................WWWW", -"WWWW<111<111<11<11111,<11<111<11<<1111111111111111<11<111111111111<<1<>&+...................................................................................................................................................................................WWWW", -"WWWW211,1,1,11<1<1<111<11<1<1<1<111111111111,2,,2,11<2<<1111111111<1>&O.............................................X............................................X..............................................X...........................................WWWW", -"WWWW,,111111,11<1<1<11111111<1111111111111111,11111111<<1111111111>&o.......................................................................................................................................................................................WWWW", -"WWWWW1111,111111111<1<1<<11<11111111111111111211112<112<11111111>%X........................................................................................................................................................................................WWWWW", -"WWWWW11111,11,1<<<111<11111111111111111<11111111111121<<111111>%X..........................................................................................................................................................................................WWWWW", -"WWWWW<<<11111,1,111<11<11<1111111111<211111111111111<2<<1111>%o..........X.........................................................................................................................X......................................................XWWWWW", -"WWWWWW<1,1111111<1<11111111111111111<111211111111111<<1111>%o..........................................................................................................................X.....................................................X............WWWWWW", -"WWWWWW1<111,1,111111111<<1111111111111111111111112111111>%o............................................................................................X..................................................................................................WWWWWW", -"WWWWWW<11111111111111111<11111111111111111112111111111>=O..........................................X......................................................................................................................................................WWWWWW", -"WWWWWWW1<111111111112<<21<11111111111111111121111111,=O.................................X..................................................................................................................X.............................................WWWWWWW", -"WWWWWWW<1111,,11111<<<<<11111112111111121211111112,-@...................................................................................................................X................................................................................WWWWWWW", -"WWWWWWW11111,21111<<<<<<111111<11111211111111111,;#X.....................................................................................................................................................................................................WWWWWWW", -"WWWWWWWW1111,2,1<12111<22111111111111111111111<>%X.......................................................................................................................................................................X..............................WWWWWWWW", -"WWWWWWWW1112,,,111112<<121111121111111211111,>&X...............................................................X........X...............................................................................................................................WWWWWWWW", -"WWWWWWWW1111212111<211<111111111112111112111;O..........................................................................................................................................................................................................WWWWWWWW", -"WWWWWWWWW111,1112<<111>2>21111111111111111:#X..........................................................................................................................................................................................................WWWWWWWWW", -"WWWWWWWWW1111111<111>21>1121111121111112:%XX..................................................................................................................X..............................X.........................................................WWWWWWWWW", -"WWWWWWWWWW111111<111111211111111111112,;o.......................................X....................................................................................................................X................................................WWWWWWWWWW", -"WWWWWWWWWW11111111<211111111212111111:#X........................................................................................................X...............X...............X.....................................................................WWWWWWWWWW", -"WWWWWWWWWW111112,211111111112111111,&o................................................................................................................................................................................................X...............WWWWWWWWWW", -"WWWWWWWWWWW1111111111111111111111<;@X................................................................................................................................................................................................................WWWWWWWWWWW", -"WWWWWWWWWWW111112,2,111111111111>$.....................................................................................X.............................................................................................................................WWWWWWWWWWW", -"WWWWWWWWWWWW1111,2,2,2211111111;+..................................................................................................................................................................................X................................WWWWWWWWWWWW", -"WWWWWWWWWWWW211<2222111121<11>%X....................................................................................................................................................................................................................WWWWWWWWWWWW", -"WWWWWWWWWWWWW11<-2-2111111<,;O........X................X...............X............................X..............................................................................................................................................WWWWWWWWWWWWW", -"WWWWWWWWWWWWW212111<111112,%............................................................X................................................X...............X...............X................X........................................................WWWWWWWWWWWWW", -"WWWWWWWWWWWWWW<2211211111;O..................................................................................................................................................................................................X....................WWWWWWWWWWWWWW", -"WWWWWWWWWWWWWW211111211,%X........................................................................................................................................................................................................................WWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWW1111111:+X........................................................................................................................................................................................................................WWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWW211121;.........................................................................................X.................................................................................................................................WWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWW111,$...........................................................................................................................................................................................................................WWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWW11;O...........................X.......................................................................................................................................................X....................................X...WWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWW&o............................................X...............X............................................X..................................................................................................................WWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWW....................................X............................X.......................................................................................X.................X....................X.............................WWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWW............................................................................................................................................................................................................................WWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWW....X........................................................................X........................................................................................................X...................................WWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWW..........................................................................................................................................................................................................................WWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWW........................................................................................................................................................................................................................WWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWW............X...........................................................................................................................................................................................................WWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWW..................................................................................................................X...............X...................................................................................WWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWW...............................................X..............................................X.............................................................................................................X.......WWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWW......................X............................................................X................................................................................................................X.............WWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWW..................................................................................................................................................................................................................WWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWW................................................................X...............................................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWW....X.........................................................................................................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWW......................................................................................................X....................................................X..................................................WWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWW.....................................................X......................................................................................................................X...............................WWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWW.............................X............................................................................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWW..................................................................................................................X...............X.......X.............................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWXX........................X............................................X...............X................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWW...................................................................................................X..................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW....................................................................................................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW..................................................................................................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW................................................................................................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW......................................................X................................................................................................................X......................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW......................................................................................................................................................X.....................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW..................................X....................................................................................................X..................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW..X..................................................................................................X..................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW.........X.......................................................................................................X....................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW......................................................................................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW.................................................................X...............X................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW..........................................................................................................................................................................X.....WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW......................................X..................................................................................X.............................X......................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW..............X.............................................................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW..................................................X.......................................................................................X...............................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW.....................................................................................X..................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW........X............................X.............................................................X..................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW.........................................................................................................................X..........................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW.................................................X...............X................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW.............................................................................................................................................................XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW...........................................................................................................................................X................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW..................X.......................................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW......................................................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW.....................................................X...............X.............................X................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW................................................................................X.......................................X......................XWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW...............................X..............................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW............................................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW..................X.....................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW.............................................................................................................X......................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW..................................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW..............................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW................................................X.........................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW...........................................................X...............X..................X.......................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW..................................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW..............................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW............................X.............................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW......................................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW.........X......................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW............................................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW....................................................X.................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW................................X................................X..............WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW..........................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW....................................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW............................................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW...X..............................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW........................................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW", -"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW........................WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW" +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXX oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXXXXXXXXXXXXXXo XXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXXXXXXXXXXXXXXXX.... .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .. ooo+@@@#&&&#@@@+ooX .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. .oO$-,40wuadggkkkllkkggdair05<;&@oX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo X o#-2qufkzcccccccccccccccccccccccccxlgiq4;$oo .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX O$,9phzcccccccccccccccccccccccccccccccccccccxkpq1&O. ..oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. X@:7plxcccccccccccccccccccccccccccccccccccccccccccccxzaq>#o XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. o#,egxcccccccccccccccccccccccccccccccccccccccccccccccccccccxht1$o .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo.X @,ejxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccjt1@o.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..o=0gxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxgq;O ..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX @,yzccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccczi4@. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .#5fxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxg7&X XXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XX X$7hcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccjq&o XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo..$7hccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccckq&X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX #6hccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccck8$ X oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX O3fxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccg5@ X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;ixcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxs>o XX oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX #qzccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccczr& XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o>1,359wyagzxcccccccccccccccccccccccccccccccccccccccccccccccccccg;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvvoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X ;gcccccccccccccccccccccccccccccccccccccccccccccccxldr6>*@OoX XXO@&>4eakxcccccccccccccccccccccccccccccccccccccccccccccccj,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvv XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo :jcccccccccccccccccccccccccccccccccccccccccccccza9,&OX .XXXX.X.X.X.XX.XXXXX. XO$,9pkcccccccccccccccccccccccccccccccccccccccccccccl1.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.>jcccccccccccccccccccccccccccccccccccccccccccjy4&O.. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o&1rjxccccccccccccccccccccccccccccccccccccccccccz2XXXXXo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.,lcccccccccccccccccccccccccccccccccccccccccly1$o X.oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX &fccccccccccccccccccccccccccccccccccccxu:o XX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o;tzcccccccccccccccccccccccccccccccccccch- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX @acccccccccccccccccccccccccccccccccccca,oXXXXXXo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o:ixcccccccccccccccccccccccccccccccccccf&XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Otcccccccccccccccccccccccccccccccccccj4@XXXXXXXXo.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoX O2gcccccccccccccccccccccccccccccccccccp@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo9cccccccccccccccccccccccccccccccccczr& XXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXX #qzcccccccccccccccccccccccccccccccccceOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.3xcccccccccccccccccccccccccccccccccg1o o XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo>dcccccccccccccccccccccccccccccccccx6XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;kccccccccccccccccccccccccccccccccxt& XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX @qxccccccccccccccccccccccccccccccccz,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX #dccccccccccccccccccccccccccccccccl4O XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.o1jcccccccccccccccccccccccccccccccch& XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoeccccccccccccccccccccccccccccccccd;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *pcccccccccccccccccccccccccccccccci+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvvv", +"vvvvvvvvvvvvvXXXXXXXXXo XXXXXXXXXXXXXXXXXXXXXXXX4xcccccccccccccccccccccccccccccccy$ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo @exccccccccccccccccccccccccccccccx7oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvv", +"vvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.o *kccccccccccccccccccccccccccccccxqOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX O6zccccccccccccccccccccccccccccccz:..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvv", +"vvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XOiccccccccccccccccccccccccccccccz5o.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o1lccccccccccccccccccccccccccccccd#.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvvv", +"vvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo.6xcccccccccccccccccccccccccccccz1oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo XX>kccccccccccccccccccccccccccccccqoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvv", +"vvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *kcccccccccccccccccccccccccccccl,oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXX ;gcccccccccccccccccccccccccccccz: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvvv", +"vvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOyccccccccccccccccccccccccccccck,.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;gccccccccccccccccccccccccccccca@.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvv", +"vvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2xccccccccccccccccccccccccccccl, oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo ;jccccccccccccccccccccccccccccc6.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvvv", +"vvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX #gccccccccccccccccccccccccccccz1o..oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX :kccccccccccccccccccccccccccccj* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvv", +"vvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0ccccccccccccccccccccccccccccx4o o XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.,zccccccccccccccccccccccccccccroXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvvv", +"vvvvvvvvvXXXXXXXXXXXXXXXXXXXXXo XXXXXXXXX *lcccccccccccccccccccccccccccx8oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX4xcccccccccccccccccccccccccccz> o XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvv", +"vvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXorcccccccccccccccccccccccccccceO.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo9cccccccccccccccccccccccccccciOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvv", +"vvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX;zcccccccccccccccccccccccccccp@..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.Otcccccccccccccccccccccccccccx1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvvv", +"vvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoyccccccccccccccccccccccccccch*XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX $dcccccccccccccccccccccccccccs+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvv", +"vvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX :xccccccccccccccccccccccccccz,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXX ;lccccccccccccccccccccccccccx3 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvvv", +"vvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoyccccccccccccccccccccccccccc0oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXo5xcccccccccccccccccccccccccca@.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvv", +"vvvvvvv XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX :xcccccccccccccccccccccccccca+XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOyccccccccccccccccccccccccccx1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvv", +"vvvvvvXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXotccccccccccccccccccccccccccl; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX &hccccccccccccccccccccccccccaOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvvv", +"vvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *zcccccccccccccccccccccccccc7.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4xcccccccccccccccccccccccccx> XXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXvvvvvv", +"vvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXqcccccccccccccccccccccccccca@.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOyccccccccccccccccccccccccccyoXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXvvvvvv", +"vvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX $hcccccccccccccccccccccccccz,.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX =kcccccccccccccccccccccccccl* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvvv", +"vvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4ccccccccccccccccccccccccccro.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo0cccccccccccccccccccccccccc9XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvv", +"vvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOaccccccccccccccccccccccccck* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXX $gcccccccccccccccccccccccccg@o.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvv", +"vvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;zccccccccccccccccccccccccc0 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXX 4cccccccccccccccccccccccccx, XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvv", +"vvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..qcccccccccccccccccccccccccj$ oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX @dccccccccccccccccccccccccctoX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvvv", +"vvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..@gccccccccccccccccccccccccc8 o XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 3cccccccccccccccccccccccccl& oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvv", +"vvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ,xcccccccccccccccccccccccch$ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.@fccccccccccccccccccccccccc4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvv", +"vvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.wccccccccccccccccccccccccc0 oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4xccccccccccccccccccccccccuoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvv", +"vvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.@gcccccccccccccccccccccccck& XXXXXXXXXXXoXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX #gcccccccccccccccccccccccck& XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvvv", +"vvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX >xcccccccccccccccccccccccceoXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX9ccccccccccccccccccccccccc3 ..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvv", +"vvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.0ccccccccccccccccccccccccx: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *lcccccccccccccccccccccccctoooXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvv", +"vvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOaccccccccccccccccccccccccaO.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoyccccccccccccccccccccccccg@..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvv", +"vvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *zcccccccccccccccccccccccc5 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ,xcccccccccccccccccccccccx> .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXvvv", +"vvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4ccccccccccccccccccccccccl& XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoX@gcccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvv", +"vvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoeccccccccccccccccccccccccuoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXwcccccccccccccccccccccccciooXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvv", +"vvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOfcccccccccccccccccccccccc4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. >xcccccccccccccccccccccccj$ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvv", +"vvXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *zccccccccccccccccccccccck& XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.@gcccccccccccccccccccccccx: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvv", +"vvXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1xcccccccccccccccccccccccpoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXorcccccccccccccccccccccccc6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvv", +"vXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.0cccccccccccccccccccccccc6 oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo XXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXX 2cccccccccccccccccccccccctoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXvv", +"vXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoicccccccccccccccccccccccz: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXX oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX &lcccccccccccccccccccccccdOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXv", +"vXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@gcccccccccccccccccccccccg@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.Oacccccccccccccccccccccccl% XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXv", +"vXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&zcccccccccccccccccccccccuoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.oqcccxccxxccxccxccxccxccxz; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXv", +"vXXo XXXXXXXXXXXXXXXXXXXXXXXXX >xccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX$::>:::::>::>::>::>::::>:@XXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXv", +"vXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX4cccccccccccccccccccccccx, XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. . . . ..XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXv", +"vXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.qcccccccccccccccccccccccz& XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXX..XXXX..XXXX..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXv", +"vXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoycccccccccccccccccccccccf@.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXv", +"XXXXXXXXXXXXXXXXoXXXXXXXXXXX..OacccccccccccccccccccccccioXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXv", +"XXXXXXXXXXXXXXXX XXXXXXXXXXX..@gcccccccccccccccccccccccqXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX %lccccccccccccccccccccccc6 .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXX o *zccccccccccccccccccccccx1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;xccccccccccccccccccccccx: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ,cccccccccccccccccccccccz* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXXX. 1cccccccccccccccccccccccl$ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXXX..2ccccccccccccccccccccccch@.XXXXXXXXXXXX oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5cccccccccccccccccccccccg+.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo .XXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXXX. 6cccccccccccccccccccccccfOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXXXo 7cccccccccccccccccccccccdOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXXX 7cccccccccccccccccccccccaOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7cccccccccccccccccccccccaO.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7cccccccccccccccccccccccaO.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXX.XX 6cccccccccccccccccccccccfO.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXX.o. 5cccccccccccccccccccccccg@XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXo XXXXXXXXXXXXXXXXXXXXXXX 4cccccccccccccccccccccccj@.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXXX. 1xcccccccccccccccccccccck$ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXXX. ,cccccccccccccccccccccccz* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXXXo ;xccccccccccccccccccccccx; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXo oXXXXXXXXXXXXXXX *zccccccccccccccccccccccc1 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXX.oo XXXXXXXXXXXXXXX $kccccccccccccccccccccccc5 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXo.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXoXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXoXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXX XXXXXXXXXXXXXXXX.@gcccccccccccccccccccccccqXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...................X...................X.......X...................X.................XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOacccccccccccccccccccccccioXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXO@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@OXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoycccccccccccccccccccccccg@XXXXXXXXXXXXXo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4jggggggggggggggggggggggggggggggggggggggggggghggggggggggggggggggggggggggggggggggggggh4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.qcccccccccccccccccccccccl& XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5cccccccccccccccccccccccx, XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vXXXXXXXXXXXXXXXXXXXXXXXXXXXXX >xccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vXXXXXXXXXXXXXXXXXXXXXXXXXXXXX &zcccccccccccccccccccccccyooXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o. 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@gccccccccccccccccccccccch@.XXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .. 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 oXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oicccccccccccccccccccccccx: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo o 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vXXXXXXXXXXXXXXXXXXXXXXXXXXXX o.0cccccccccccccccccccccccc6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o. 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1xcccccccccccccccccccccccpO XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 .XXXXXo XXXXXXXXXXXXXXXXXXo .", +"vvXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *zccccccccccccccccccccccck& XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXX o", +"vvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOfcccccccccccccccccccccccc4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXXX oo 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoeccccccccccccccccccccccccyoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXo.. 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 4ccccccccccccccccccccccccl& XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *zcccccccccccccccccccccccc5 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXX OaccccccccccccccccccccccccaOXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.0ccccccccccccccccccccccccx: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX >xccccccccccccccccccccccccro XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.@gcccccccccccccccccccccccck& XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvv XXXXXXXXXXXXXXXXXXXXXXXXXXX.oowccccccccccccccccccccccccc0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvoXXXXXXXXXXXXXXXXXXXXXXXXXXX.. >xcccccccccccccccccccccccch$ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@gxcccccccccccccccccccccccc7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXqccccccccccccccccccccccccch$ XX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;zccccccccccccccccccccccccc0o oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOaccccccccccccccccccccccccck* o XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7ccccccccccccccccccxcxccccxcccxccxccccxcccxcccccccccccccccccccccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXX4ccccccccccccccccccccccccccroX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.*4333333333333333331,1,1,1,11,1,<<<<,1,<<<,<<<3334dcccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvXXXXXXXXXXXXXXXXXXXXXXXXX XXXX #hcccccccccccccccccccccccccx> oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX . *lcccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXqcccccccccccccccccccccccccca@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..XXXXXXXXXXXX.XXX XXX XXX XXXX XXXXXXXX o Ouccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *zcccccccccccccccccccccccccc7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXXXXXXXX.XXXXXXX XXXXXXXXXX XXXXXXXX o 4xccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXotccccccccccccccccccccccccccl; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *jcccccccccccccccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:zcccccccccccccccccccccccccca@.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOyccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoucccccccccccccccccccccccccccqoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX5xccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX :zccccccccccccccccccccccccccx, XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;lcccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOyccccccccccccccccccccccccccch* XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.o XXXXXXXXXXXXXXXXXXXXXXXXXX $dccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;zccccccccccccccccccccccccccca@ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo XXXXXXXXXXXXXXXXXXXXXXXXXXXXXOycccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXotccccccccccccccccccccccccccccrO..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo0ccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *lcccccccccccccccccccccccccccx8oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX4xccccccccccccccccccccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX0ccccccccccccccccccccccccccccx4 oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o ,zcccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX #gccccccccccccccccccccccccccccz1XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo :kccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1xccccccccccccccccccccccccccccl,.o XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;jcccccccccccccccccccccccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOyccccccccccccccccccccccccccccck, o.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;gccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *lccccccccccccccccccccccccccccck,o XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ;hcccccccccccccccccccccccccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX6xcccccccccccccccccccccccccccccz2oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo,kccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOiccccccccccccccccccccccccccccccz6o.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo2zcccccccccccccccccccccccccccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *jccccccccccccccccccccccccccccccxqO XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo6zccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXX.4xcccccccccccccccccccccccccccccccy$ oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX @excccccccccccccccccccccccccccccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXoeccccccccccccccccccccccccccccccccd;X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX *pcccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo#dccccccccccccccccccccccccccccccccl4O XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo o o1jccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. ;kccccccccccccccccccccccccccccccccxt$ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o #wzcccccccccccccccccccccccccccccccccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.3xcccccccccccccccccccccccccccccccccg1o.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o>dcccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo0xcccccccccccccccccccccccccccccccccxr&.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX $qzccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.Otccccccccccccccccccccccccccccccccccch6@ oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo O3gccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o @acccccccccccccccccccccccccccccccccccxs,o XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o:ixccccccccccccccccccccccccccccccccccchlccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX &gccccccccccccccccccccccccccccccccccccxi:O.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o;tzcccccccccccccccccccccccccccccccccccch>dccccccccccccccccccccccc7 .oXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX =gccccccccccccccccccccccccccccccccccccczy:O ..oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o;tzccccccccccccccccccccccccccccccccccccck>Ofccccccccccccccccccccccc7 X..XXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXXXXX ;jcccccccccccccccccccccccccccccccccccccczp1+..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX O,yzccccccccccccccccccccccccccccccccccccccl< +fccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX :kcccccccccccccccccccccccccccccccccccccccxf6*o XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..o&6dxcccccccccccccccccccccccccccccccccccccccz1X.Ofccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo 8pkcccccccccccccccccccccccccccccccccccccccccccccl1XXXXX@fccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oX ;gcccccccccccccccccccccccccccccccccccccccccccccccxldr5,*@OoX XoO@&>4eakxccccccccccccccccccccccccccccccccccccccccccccccck, XXXXXOfccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXXXXXXX *dcccccccccccccccccccccccccccccccccccccccccccccccccccxzjdue9641,,>:,1357wyahzxcccccccccccccccccccccccccccccccccccccccccccccccccccg: XXXXX Ofccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX $uccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxxcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccs* XXXXXXXOfccccccccccccccccccccccc7 oXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX @wxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccy# XXXXXXXOfccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXO6zcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccx9O .XXXXXXX +fccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.o,gccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccck2o XXXXXXXXXXOfccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX. &icccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccs=.XXXXXXXXXXXXOfccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +9zcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxw@ XXXXXXXXXXXX +fccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo,fccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccch1oXXXXXXXXXXXXXXXOfccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX $ezcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxy&XXXXXXXXXXXXXXXXX+fccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX o,fcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccg2o XXXXXXXXXXXXXXXXXOfccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo#qlcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxw&XXXXXXXXXXXXXXXX X Ofccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo o;ixcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccxa>o oXXXXXXXXXXXXXXXoo oOfccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX O1fcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccg4@ XXXXXXXXXXXXXXXXXX o X+fccccccccccccccccccccccc7 .XXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX @6gccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccck9$ XXXXXXXXXXXXXXXXXXXXo XXOfccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..$8jccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccckq&X oXXXXXXXXXXXXXXXXXXXXXXXXOfccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X$7gcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccjq&o XX XXXXXXXXXXXXXXXXXXXXXXXXOfccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX .#5dxccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccg6& XXXXXXXXXXXXXXXXXXXXXXXXXXXXX+dccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX @#o o..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOfccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXX. o&<0ijxcccccccccccccccccccccccccccccccccccccxjaq1&O. .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOfccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.XXXXXX . o#;3quflxcccccccccccccccccccccccccxkgiq4:#o. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX+fccccccccccccccccccccccc7 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Xo@$-<40eiadghjklllkkjgfaur05,;&@oX .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOpzllllllllllklllllllklll6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XooO@@##&&&$#@@OooX. .X.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#&&&&&&%&%&&&&&&%&&&&&&&+.XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..X. ...XoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX X XX .. . .. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX XXXXXXXXXX..o...XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.o.oXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX..XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXo.XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXoXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", +"vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" }; diff --git a/share/pixmaps/bitmark32.png b/share/pixmaps/bitmark32.png index ecd7852..4522d30 100644 Binary files a/share/pixmaps/bitmark32.png and b/share/pixmaps/bitmark32.png differ diff --git a/share/pixmaps/bitmark32.xpm b/share/pixmaps/bitmark32.xpm index 6d2a2b8..c212081 100644 --- a/share/pixmaps/bitmark32.xpm +++ b/share/pixmaps/bitmark32.xpm @@ -1,231 +1,163 @@ /* XPM */ static char *bitmark32[] = { /* columns rows colors chars-per-pixel */ -"32 32 193 2 ", -" c #2D0062", -". c #2E0062", -"X c #2F0063", -"o c #300064", -"O c #310065", -"+ c #320065", -"@ c #320066", -"# c #330066", -"$ c #330166", -"% c #340166", -"& c #340167", -"* c #340267", -"= c #350267", -"- c #350368", -"; c #360368", -": c #350468", -"> c #370669", -", c #380A6A", -"< c #3B0A6C", -"1 c #3F0F6F", -"2 c #411170", -"3 c #401270", -"4 c #451774", -"5 c #4D2179", -"6 c #4F247B", -"7 c #50257B", -"8 c #52267C", -"9 c #52267D", -"0 c #52277D", -"q c #53287E", -"w c #53297E", -"e c #54297E", -"r c #542A7F", -"t c #562C80", -"y c #5D3683", -"u c #5B3284", -"i c #5D3684", -"p c #5D3784", -"a c #5E3784", -"s c #5E3685", -"d c #5E3785", -"f c #5F3785", -"g c #5F3786", -"h c #5E3687", -"j c #5F3885", -"k c #5F3886", -"l c #5F3986", -"z c #5F3887", -"x c #603887", -"c c #603987", -"v c #613987", -"b c #603A87", -"n c #613A87", -"m c #613B87", -"M c #603988", -"N c #613A88", -"B c #613B88", -"V c #623B88", -"C c #623B89", -"Z c #623C89", -"A c #623D89", -"S c #633D89", -"D c #633D8A", -"F c #643D8A", -"G c #643E8A", -"H c #643F8A", -"J c #653E8B", -"K c #663F8C", -"L c #65408B", -"P c #66418C", -"I c #68448D", -"U c #6A458E", -"Y c #6C4890", -"T c #6D4991", -"R c #6D4A91", -"E c #704D93", -"W c #735195", -"Q c #735096", -"! c #765498", -"~ c #775698", -"^ c #79589A", -"/ c #7D5E9D", -"( c #7F609E", -") c #7F609F", -"_ c #8061A0", -"` c #8161A0", -"' c #8162A0", -"] c #8264A1", -"[ c #8568A2", -"{ c #876AA4", -"} c #886BA5", -"| c #8C6FA8", -" . c #8F73AA", -".. c #9075AB", -"X. c #9176AC", -"o. c #9277AD", -"O. c #947AAF", -"+. c #987EB1", -"@. c #9981B2", -"#. c #9D84B5", -"$. c #9E86B5", -"%. c #9E86B6", -"&. c #A189B8", -"*. c #A48EBA", -"=. c #A58FBB", -"-. c #A792BC", -";. c #A994BE", -":. c #AC97C1", -">. c #AD9AC1", -",. c #AE9AC2", -"<. c #B09DC3", -"1. c #B19EC5", -"2. c #B29FC4", -"3. c #B5A2C7", -"4. c #B5A4C7", -"5. c #B6A4C7", -"6. c #BAA9CB", -"7. c #BAAACB", -"8. c #BBAACB", -"9. c #BBAACC", -"0. c #BBABCC", -"q. c #BCACCD", -"w. c #BEADCE", -"e. c #BFAFCF", -"r. c #C2B3D1", -"t. c #C3B5D2", -"y. c #C5B7D2", -"u. c #C5B8D3", -"i. c #C6B9D4", -"p. c #C7BAD5", -"a. c #C8BBD5", -"s. c #C9BDD6", -"d. c #CABDD6", -"f. c #CBBED8", -"g. c #D1C6DB", -"h. c #D1C6DD", -"j. c #D3C8DD", -"k. c #D3C9DE", -"l. c #D4CADE", -"z. c #D4CBDE", -"x. c #D6CDDF", -"c. c #D7CEE1", -"v. c #D8CEE1", -"b. c #D8CFE1", -"n. c #D9D0E2", -"m. c #DAD1E2", -"M. c #DAD2E2", -"N. c #DDD5E5", -"B. c #DED6E5", -"V. c #DED7E6", -"C. c #DFD8E6", -"Z. c #E0D9E8", -"A. c #E2DCE9", -"S. c #E5DFEC", -"D. c #E7E3EC", -"F. c #E8E3ED", -"G. c #EAE5EF", -"H. c #EBE6EF", -"J. c #EBE7F0", -"K. c #ECE8F1", -"L. c #EDEAF1", -"P. c #EDE9F2", -"I. c #EFEBF3", -"U. c #EFECF3", -"Y. c #F0ECF3", -"T. c #F0EEF3", -"R. c #F1EEF3", -"E. c #F1EEF4", -"W. c #F1EFF4", -"Q. c #F2EFF5", -"!. c #F2F0F5", -"~. c #F3F1F5", -"^. c #F4F2F6", -"/. c #F5F3F6", -"(. c #F5F3F7", -"). c #F6F4F7", -"_. c #F6F4F8", -"`. c #F7F6F8", -"'. c #F9F8FA", -"]. c #F9F9FA", -"[. c #FAF9FB", -"{. c gray98", -"}. c #FBFAFB", -"|. c #FBFBFB", -" X c #FBFAFC", -".X c #FCFBFD", -"XX c #FDFDFD", -"oX c #FDFDFE", -"OX c #FEFEFE", -"+X c #FEFFFE", -"@X c #FFFFFE", -"#X c gray100", -"$X c None", +"32 32 125 2 ", +" c #96BF1A", +". c #96BF1B", +"X c #96BF1C", +"o c #97BF1C", +"O c #97BF1D", +"+ c #97C01D", +"@ c #97C01E", +"# c #98C01E", +"$ c #98C01F", +"% c #98C020", +"& c #99C020", +"* c #99C121", +"= c #99C122", +"- c #9AC123", +"; c #9AC124", +": c #9BC226", +"> c #9CC227", +", c #9CC228", +"< c #9CC328", +"1 c #9DC32A", +"2 c #9DC32B", +"3 c #9EC32B", +"4 c #9EC42C", +"5 c #9EC42D", +"6 c #9FC42D", +"7 c #9FC42E", +"8 c #A0C530", +"9 c #A1C532", +"0 c #A1C633", +"q c #A2C634", +"w c #A4C738", +"e c #A4C739", +"r c #A6C83D", +"t c #A6C93E", +"y c #A7C93F", +"u c #A7C940", +"i c #A7C941", +"p c #A8CA43", +"a c #AACB46", +"s c #ABCC49", +"d c #ACCC4A", +"f c #ADCD4D", +"g c #AFCE50", +"h c #AFCE51", +"j c #B0CE52", +"k c #B0CE53", +"l c #B0CF53", +"z c #B1CF55", +"x c #B1CF56", +"c c #B3D059", +"v c #B3D15A", +"b c #B4D15C", +"n c #B6D260", +"m c #B9D466", +"M c #B9D467", +"N c #BBD56B", +"B c #BCD66D", +"V c #C6DC83", +"C c #C9DE89", +"Z c #C9DE8A", +"A c #CADE8B", +"S c #CADF8C", +"D c #CBDF8D", +"F c #CBDF8E", +"G c #CBDF8F", +"H c #CEE194", +"J c #CFE297", +"K c #D0E298", +"L c #D0E299", +"P c #D1E39B", +"I c #D2E39C", +"U c #D2E39D", +"Y c #D3E49F", +"T c #D4E5A1", +"R c #D4E5A2", +"E c #D7E7A8", +"W c #D7E7A9", +"Q c #D8E7AA", +"! c #D9E8AD", +"~ c #DAE8AF", +"^ c #DAE9AF", +"/ c #DCEAB3", +"( c #DDEAB5", +") c #DEEBB6", +"_ c #E0ECBC", +"` c #E2EDBF", +"' c #E2EEC1", +"] c #E3EEC2", +"[ c #E4EEC4", +"{ c #E5EFC6", +"} c #E7F0CA", +"| c #E8F1CD", +" . c #E9F2CF", +".. c #E9F2D0", +"X. c #EAF2D1", +"o. c #EBF3D3", +"O. c #EEF4D9", +"+. c #EEF5DA", +"@. c #EFF5DB", +"#. c #F1F7E2", +"$. c #F3F8E4", +"%. c #F4F8E6", +"&. c #F4F8E7", +"*. c #F5F9E8", +"=. c #F5F9E9", +"-. c #F6F9EB", +";. c #F7FAED", +":. c #F7FAEE", +">. c #F7FAEF", +",. c #F8FBF0", +"<. c #FAFCF4", +"1. c #FAFCF5", +"2. c #FBFCF6", +"3. c #FBFDF6", +"4. c #FBFDF7", +"5. c #FCFDF9", +"6. c #FDFEFA", +"7. c #FDFEFB", +"8. c #FDFEFC", +"9. c #FEFEFC", +"0. c #FEFFFD", +"q. c #FEFFFE", +"w. c #FFFFFE", +"e. c gray100", +"r. c None", /* pixels */ -"$X$X$X$X$X$X$X$X$X$X$X$Xy y y y i i i i $X$X$X$X$X$X$X$X$X$X$X$X", -"$X$X$X$X$X$X$X$X$Xy y y y i i i i i i p a a p $X$X$X$X$X$X$X$X$X", -"$X$X$X$X$X$X$Xy y y y i i i i i a y p p x p a a p $X$X$X$X$X$X$X", -"$X$X$X$X$X$Xy y i i i i i i p p a x p p p p p a x x $X$X$X$X$X$X", -"$X$X$X$X$Xi i i y i i p a a a x p p x p p x x b p B p $X$X$X$X$X", -"$X$X$X$Xi i i i a a p p a p a p x p p p a x p x B p B p $X$X$X$X", -"$X$X$Xi i i i p a a x p p p a p i p x x x x p x i B p S x $X$X$X", -"$X$Xi p p p p p x p p p x p x p x x x p p x m p x B x m x x $X$X", -"$X$Xp x p x p p p y p p x p m x B i b p l l m x x B x B x x $X$X", -"$Xp a y p p p x x x x x x p p x i B p b m x x x B p x B B B B $X", -"$Xi p x a a x p a x x p p x p x B B b b x x x m B B B B B B B $X", -"$Xx p i x a x x m x x m m x x x x B S p m m x x x B B B B V V $X", -"p x a x p L >.u.u.u.u.u.u.5.~ R 9.p.*.S B B B L =.a.9.Y g B V V ", -"x x x x p E D.@X`.T.T.U.`.@Xp.[ (.@X~.X.i B K 1.[.@XY.;.X.K S K ", -"p p x m S [ ~.`.$./ ( / <.@Xg.$.}..X@XV.Q P 3.'.@X@X{.{.t.t 7 5 ", -"x x p @.x.C.{.{.N.j.z.z.D.~.X.<.@XJ.J.@Xr.9..XZ.J.@X1.K q % # # ", -"x x i -.n.P.@XE.v.v.c.n._.U.] p.@Xe.| _.oX@Xz.Q S.@X&.h 3 # * # ", -"x x B K I p.@Xj._ / _ } A.[. .b.@X+.: >.@Xh.0 b (.@X[.I.b o # # ", -"x m B B I C.@X'.!.E.E.(.@Xf.K G.@X^ X 6 >.t X _ @XP.O._ 3 o # # ", -"m x B p R w.d.d.p.w.9.9.$.5 q 5.3.q # # : # o ! w.$., o * # # # ", -"$XB B B S S b 0 1 - % % # # # # # # # # # # # * - - # # # # # $X", -"$XS B B B q 1 # # # # # # # # # # # # # # # # # # # # # # # # $X", -"$XB S u 4 : # # # # # # # # # # # # # # # # # # # # # # # # # $X", -"$X$X0 < # # # # # # # # # # # # # # # # # # # # # # # # # # $X$X", -"$X$X% # # # # # # # # # # # # # # # # # # # # # # # # # # # $X$X", -"$X$X$X# # # # # # # # # # # # # # # # # # # # # # # # # # $X$X$X", -"$X$X$X$X# # # # # # # # # # # # # # # # # # # # # # # # $X$X$X$X", -"$X$X$X$X$X# # # # # # # # # # # # # # # # # # # # # # $X$X$X$X$X", -"$X$X$X$X$X$X# # # # # # # # # # # # # # # # # # # # $X$X$X$X$X$X", -"$X$X$X$X$X$X$X# # # # # # # # # # # # # # # # # # $X$X$X$X$X$X$X", -"$X$X$X$X$X$X$X$X$X# # # # # # # # # # # # # # $X$X$X$X$X$X$X$X$X", -"$X$X$X$X$X$X$X$X$X$X$X$X# # # # # # # # $X$X$X$X$X$X$X$X$X$X$X$X" +"r.r.r.r.r.r.r.r.r.r.r.r.$ $ $ $ $ $ $ $ r.r.r.r.r.r.r.r.r.r.r.r.", +"r.r.r.r.r.r.r.r.r.& $ $ $ $ $ $ $ $ $ $ $ $ $ r.r.r.r.r.r.r.r.r.", +"r.r.r.r.r.r.r.$ X * & X $ X O O . $ $ $ $ $ * O r.r.r.r.r.r.r.r.", +"r.r.r.r.r.r.$ $ & * O . * 7 u d d r 3 $ O $ O * $ $ r.r.r.r.r.r.", +"r.r.r.r.r.$ $ $ * . 7 m E o.*.,.,.%.o.T b 3 X O $ $ $ r.r.r.r.r.", +"r.r.r.r.$ $ $ @ * m } 7.e.e.e.e.e.e.e.e.4.' b * $ $ $ $ r.r.r.r.", +"r.r.r.$ $ $ @ 6 P 1.e.e.e.7.%.O.O.*.e.e.e.e.,.S > $ $ $ $ r.r.r.", +"r.r.$ $ $ @ 6 ! e.e.e.*.R b r 9 9 u m E ;.e.e.7.U > $ $ $ r.r.r.", +"r.r.$ $ $ * U e.e.e.( s $ . . $ $ O . * x ' e.e.7.C * @ $ $ r.r.", +"r.$ $ $ . N 2.e.7.Y 3 . $ $ $ $ $ $ $ $ . 9 ! e.e.;.x + $ $ $ r.", +"r.$ $ @ 9 | e.e./ 3 $ $ $ $ $ $ $ $ $ $ $ X q [ e.e._ 3 $ $ $ r.", +"r.$ $ X B 7.e.$.a . $ $ $ $ $ $ $ $ $ $ $ $ X x ;.e.1.c . $ $ r.", +"$ $ $ * ! e.e.P $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ * ! e.e.P $ $ $ $ ", +"$ $ $ 9 O.e.1.c . $ $ $ $ $ $ $ $ $ $ $ $ $ $ X N *.*.( > $ $ $ ", +"$ $ X a ;.e.#.w @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ : r r e * $ $ $ ", +"$ $ O j 1.e.o.6 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O X X @ $ $ $ $ ", +"$ $ X j 1.e.o.3 $ $ $ $ $ $ $ $ $ @ . O O O o o o o O O $ $ $ $ ", +"$ $ O a ;.e.#.w @ $ $ $ $ $ $ $ X j D D D S D D D D D C w $ $ $ ", +"$ $ $ 9 O.e.2.b . $ $ $ $ $ $ $ . V e.e.e.e.e.e.e.e.e.2.x o $ $ ", +"$ $ $ * ! e.e.P $ $ $ $ $ $ $ $ . V e.e.e.e.e.e.e.e.e.1.j . $ $ ", +"r.$ $ X B 7.e.#.a . $ $ $ $ $ $ X x P J J J H _ e.e.e.2.x o $ $ ", +"r.$ $ $ 8 .e.e./ 3 @ $ $ $ $ $ $ $ O O o . 9 ' e.e.e.2.x + $ $ ", +"r.$ $ $ O N 1.e.7.Y 3 . $ $ % % $ $ $ $ . 9 ! e.e.e.e.1.j o $ $ ", +"r.r.$ $ $ * P e.e.e.( d @ . @ @ $ X . * j ] e.e.7.e.e.2.x o $ $ ", +"r.r.$ $ $ @ 6 ! e.e.e.%.T b r 9 9 u m Q ;.e.e.7.E O.e.<.x O O $ ", +"r.r.r.$ $ $ @ 6 U <.e.e.e.7.&.O.O.*.7.e.e.e.,.C 9 .e.<.x O $ $ ", +"r.r.r.r.$ $ $ @ : m } 7.e.e.e.e.e.e.e.e.1.' b $ 7 o.e.<.x O $ $ ", +"r.r.r.r.r.$ $ $ O . 7 m E o.*.,.,.%.o.R b 3 o $ 3 [ <.*.j O $ $ ", +"r.r.r.r.r.r.$ $ $ $ $ . * 6 r d s r 6 * O $ $ $ * u d d 3 + $ $ ", +"r.r.r.r.r.r.r.$ $ $ $ $ $ $ $ . X O $ $ $ $ $ $ * O + o $ $ $ $ ", +"r.r.r.r.r.r.r.r.r.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ", +"r.r.r.r.r.r.r.r.r.r.r.r.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ " }; diff --git a/share/pixmaps/bitmark512.png b/share/pixmaps/bitmark512.png index 64db696..9b2d154 100644 Binary files a/share/pixmaps/bitmark512.png and b/share/pixmaps/bitmark512.png differ diff --git a/share/pixmaps/bitmark64.png b/share/pixmaps/bitmark64.png index 8feb504..dbc288e 100644 Binary files a/share/pixmaps/bitmark64.png and b/share/pixmaps/bitmark64.png differ diff --git a/share/pixmaps/bitmark64.xpm b/share/pixmaps/bitmark64.xpm index 4fd8e91..694ff72 100644 --- a/share/pixmaps/bitmark64.xpm +++ b/share/pixmaps/bitmark64.xpm @@ -1,143 +1,265 @@ /* XPM */ static char *bitmark64[] = { /* columns rows colors chars-per-pixel */ -"64 64 73 1 ", -" c #2F0063", -". c #330066", -"X c #360568", -"o c #39076A", -"O c #370969", -"+ c #3B0B6C", -"@ c #40106F", -"# c #431472", -"$ c #471975", -"% c #4A1D77", -"& c #4A1E78", -"* c #4D2079", -"= c #51257C", -"- c #552A7F", -"; c #572E81", -": c #582E82", -"> c #5D3784", -", c #5F3886", -"< c #603987", -"1 c #613B88", -"2 c #66408C", -"3 c #69458E", -"4 c #6B4790", -"5 c #6D4A91", -"6 c #714E94", -"7 c #755396", -"8 c #775598", -"9 c #7C5B9C", -"0 c #7F609F", -"q c #80619F", -"w c #8364A1", -"e c #8668A4", -"r c #896CA6", -"t c #8B6EA8", -"y c #8D72A9", -"u c #9176AC", -"i c #947AAE", -"p c #977EB0", -"a c #987FB1", -"s c #9B83B3", -"d c #A28BB9", -"f c #A791BC", -"g c #A994BD", -"h c #AB96C0", -"j c #AE9BC2", -"k c #B19EC4", -"l c #B2A0C5", -"z c #B7A6C8", -"x c #B8A7C9", -"c c #BBABCB", -"v c #BFB0CF", -"b c #C0B0CF", -"n c #C3B5D1", -"m c #C6B9D3", -"M c #C9BDD6", -"N c #CBBFD8", -"B c #CEC1DA", -"V c #D2C7DD", -"C c #D4CADE", -"Z c #D6CCE0", -"A c #DBD3E4", -"S c #DFD8E6", -"D c #E2DBE9", -"F c #E6E0EC", -"G c #E9E5EE", -"H c #ECE7F0", -"J c #EDE9F1", -"K c #F1EEF4", -"L c #F4F1F6", -"P c #F6F4F8", -"I c #F8F7F9", -"U c #FDFDFD", -"Y c None", +"64 64 195 2 ", +" c #96BF1A", +". c #96BF1B", +"X c #96BF1C", +"o c #97BF1C", +"O c #97BF1D", +"+ c #97C01D", +"@ c #97C01E", +"# c #98C01E", +"$ c #98C01F", +"% c #98C020", +"& c #99C020", +"* c #99C021", +"= c #99C121", +"- c #99C122", +"; c #9AC122", +": c #9AC123", +"> c #9AC124", +", c #9BC225", +"< c #9BC226", +"1 c #9CC227", +"2 c #9CC328", +"3 c #9DC329", +"4 c #9EC32B", +"5 c #9EC42C", +"6 c #9EC42D", +"7 c #9FC42E", +"8 c #9FC42F", +"9 c #9FC52F", +"0 c #A0C530", +"q c #A0C531", +"w c #A1C532", +"e c #A1C633", +"r c #A2C634", +"t c #A2C635", +"y c #A2C636", +"u c #A3C636", +"i c #A3C738", +"p c #A4C738", +"a c #A4C739", +"s c #A4C73A", +"d c #A4C83A", +"f c #A5C83B", +"g c #A5C83C", +"h c #A6C83D", +"j c #A6C93D", +"k c #A6C93E", +"l c #A7C93F", +"z c #A7C940", +"x c #A7C941", +"c c #A8CA41", +"v c #A8CA42", +"b c #A9CA43", +"n c #A9CA44", +"m c #A9CB44", +"M c #AACB46", +"N c #AACB47", +"B c #ABCB47", +"V c #ABCB48", +"C c #ABCC49", +"Z c #ACCC4A", +"A c #ACCC4B", +"S c #ADCD4C", +"D c #ADCD4D", +"F c #AECD4E", +"G c #B0CF54", +"H c #B1D056", +"J c #B2D058", +"K c #B3D15A", +"L c #B4D15C", +"P c #B5D25E", +"I c #B6D260", +"U c #B6D261", +"Y c #B7D362", +"T c #B7D363", +"R c #B8D364", +"E c #B9D466", +"W c #B9D467", +"Q c #B9D468", +"! c #BAD569", +"~ c #BBD56B", +"^ c #BCD66C", +"/ c #BCD66D", +"( c #BDD76F", +") c #BED772", +"_ c #BFD873", +"` c #BFD875", +"' c #C0D976", +"] c #C1D978", +"[ c #C1D979", +"{ c #C2DA7A", +"} c #C3DA7C", +"| c #C3DB7D", +" . c #C3DB7E", +".. c #C4DB7E", +"X. c #C5DC81", +"o. c #C6DC83", +"O. c #C6DC84", +"+. c #C7DD86", +"@. c #C9DE8B", +"#. c #CBDF8D", +"$. c #CEE194", +"%. c #CEE195", +"&. c #CFE298", +"*. c #D0E298", +"=. c #D0E29A", +"-. c #D1E39A", +";. c #D1E39B", +":. c #D1E39C", +">. c #D5E5A3", +",. c #D5E5A4", +"<. c #D6E6A6", +"1. c #D8E7A9", +"2. c #D8E7AA", +"3. c #D8E7AB", +"4. c #D9E8AC", +"5. c #D9E8AD", +"6. c #DAE8AE", +"7. c #DAE8AF", +"8. c #DBE9B0", +"9. c #DCE9B2", +"0. c #DDEAB6", +"q. c #DEEBB6", +"w. c #DEEBB7", +"e. c #DEEBB8", +"r. c #DFEBB9", +"t. c #DFECBA", +"y. c #E0ECBC", +"u. c #E1ECBD", +"i. c #E1EDBE", +"p. c #E1EDBF", +"a. c #E2EDC1", +"s. c #E2EEC1", +"d. c #E3EEC2", +"f. c #E4EFC4", +"g. c #E5EFC5", +"h. c #E5EFC6", +"j. c #E6F0C8", +"k. c #E6F0C9", +"l. c #E7F0CA", +"z. c #E7F0CB", +"x. c #E7F1CC", +"c. c #E8F1CC", +"v. c #E9F2CF", +"b. c #EAF2D1", +"n. c #EAF2D2", +"m. c #EBF3D3", +"M. c #EBF3D4", +"N. c #ECF3D5", +"B. c #ECF3D6", +"V. c #EDF4D8", +"C. c #EEF5DA", +"Z. c #EEF5DB", +"A. c #EFF5DC", +"S. c #EFF5DD", +"D. c #F0F6DD", +"F. c #F0F6DE", +"G. c #F0F6DF", +"H. c #F1F7E1", +"J. c #F1F7E2", +"K. c #F2F7E2", +"L. c #F2F7E3", +"P. c #F3F8E4", +"I. c #F3F8E5", +"U. c #F3F8E6", +"Y. c #F4F8E6", +"T. c #F4F8E7", +"R. c #F5F9E9", +"E. c #F6F9EB", +"W. c #F6FAEC", +"Q. c #F7FAED", +"!. c #F7FAEE", +"~. c #F7FAEF", +"^. c #F8FBF0", +"/. c #F8FBF1", +"(. c #F9FBF1", +"). c #F9FBF2", +"_. c #F9FBF3", +"`. c #FAFCF3", +"'. c #FAFCF4", +"]. c #FAFCF5", +"[. c #FBFCF5", +"{. c #FBFDF6", +"}. c #FBFDF7", +"|. c #FCFDF8", +" X c #FCFDF9", +".X c #FDFEFA", +"XX c #FDFEFB", +"oX c #FDFEFC", +"OX c #FEFEFC", +"+X c #FEFEFD", +"@X c #FEFFFD", +"#X c #FEFFFE", +"$X c #FFFFFE", +"%X c gray100", +"&X c None", /* pixels */ -"YYYYYYYYYYYYYYYYYYYYYYYYYY,,>>->>>>>>>YYYYYYYYYYYYYYYYYYYYYYYYYY", -"YYYYYYYYYYYYYYYYYYYYYY>>,,,->>>>>>>>->,1>>YYYYYYYYYYYYYYYYYYYYYY", -"YYYYYYYYYYYYYYYYYYYY,-1>->>>>>>>>>>>>>,,>>>>YYYYYYYYYYYYYYYYYYYY", -"YYYYYYYYYYYYYYYYY><>,,,,1>2->>>>>>>>>>>>>>>>1,>>>>>>>>>>>-,>>>>>>>>>>>>>><>,>YYYYYYYYYYYYYYYY", -"YYYYYYYYYYYYYY>>>>->>->>>>>>>,>>>>>>>>>>>,>>>>>>,>>>>>>>>>>>>>,>>>>>>>>>>>,>>,>>,>,,,YYYYYYYYYYYYY", -"YYYYYYYYYYY><>>>>>>>>>>>>>>>>>>>>>>>>>>>>,><>>>>,,,,,YYYYYYYYYYY", -"YYYYYYYYYY>>>>>>>>>>>>>>-,,>,>,>>>>>>>,,>>>,>><>>><>1>YYYYYYYYYY", -"YYYYYYYYY>>>>:>>>>>>>>>>,>>>>>>>>>>>,>>>>,>,><,,<><<>>1YYYYYYYYY", -"YYYYYYYY>>>>>->>-,>>>>>>,,,>>>>,>>>>,>>>,,,,,,,,<>><<>,,YYYYYYYY", -"YYYYYYY,>>>>>>>>>>>>>>>>>,>>>,>>>>>>>>,,,,,,,,,,<<<><<,>,YYYYYYY", -"YYYYYYY,>>>>,>,->>>>>>>>,,>,>,>,<>><><,,,,,,,<,,>><>,,,1>>>>>-2>>>>>,>,,>,>>>>>>>>>><,,,,,,,,,,<<<<1>1,<>>>>>>>2->,,>>,,>,>>,>>,,2>>><><,,,,,,><,<><<,1,1<<>>>>>>>>>2>>>>,>>,>>,>,,,,>>2>><><,,,,,<,<<<<<1,1,1,,>>>>>,>>>,>>,>,>,,,,,,,,,,,,,,,,,<<>><<><<<<<<<<<1,1>>>>>>>>>,,>-,,>,>>>,,,,,,>,,,,,,,,,>>11<<1<<<<<<1<<11<<1YYY", -"YYY>>>,>,>,>>,>,1,,>,,,,,,,,,,,,,,,,,,,<1<>1>1<<<<<<<<<<<1<11YYY", -"YYY,,>,>>,>>,>,>,,>,,,,,,,,,,,,,,,,,<<<<<<11>1<<<<<<<<<<1<1<1YYY", -"YY>,>,>>>,>,1-,,>,,,,,,,,,,,<,,,,,1,<<<<<<<<<<<<1<<1<111111111YY", -"YY>>>>,>,>,>1,,<1,,,,,,,,,,,,,,<1,,1<<<<<<<<<<<<>1<<1<1<1<1111YY", -"Y>>>>,>>,,,,,,2<>,1111,,2<1,,<,,<<<<1<1>>1<<<<<1111<<1<11<11111Y", -"Y,,>>>,,,,,11--->>->>->>-2-,<<,,>>>>>>111<<1<1111>,,<,111111111Y", -"Y>><,,>,,,,>0sssssspssssssu7>,,2uspsu3,,<<1<111<1ysssp511111111Y", -"Y,,,,,,,,,>1mUPIIIIIIUPIPIPGd2>9JIUUIf,1<111<1<2kPUUUH811111111Y", -"<>><,,,,,,>4AIIUIIIIUIUUIIIILu-yIUUUUJe,11111<2lIUUUUS6132111221", -"><>,,,,,,>>8GUUIILLLLLLLPUIUUm1dUUUIUUC5<1<<<3zIUUUUUKCCCg111111", -"<>,,,,,,,,>rPUUUvqqqqwwwrZUUUm,cUIUUUUUj1<1<3xUUUUUUUUUUUk11111,", -"<<,,,,,>,,>sIUIIs->>>>1-,mUUUg2VUUUUUUUKy<<4cUUUUUUUUUUUUr$$$@++", -">,,,,,2fcxxAUIUIMxxxcxxxMLUUS85DUUULIUUUA65bUUUILUUUPdyyr&......", -"<,,,,,7HUUUUIUIUIUUUUUUUUUUSw>qLUUUnnUUUUbnUUUIdNUUUD$ ........", -">><<<>ePUUUUIUUUUUUUUUUUUUUS7>iUUUUf7DUUUUUUUIp%AUUUMO ........", -"<<<<<>qbvcBIUIUDbbbbbbbnHUUUj>hUUUI9+9IUUUUUPiX:KUUUCree<.......", -"<<<<<<<<<>uIUUUg>>,,1>>>xUUUc1nUUUJ; ohUUUULyo 6UUUUUUUUy ......", -"<<<<<<<<<>fUUUIg9q000wwyDUUUs&CUUUA#..&ZUULr.. uUUUUUUUU6 ......", -"<<<<<<11<*+...............................................Y", -"YY11<<<11111=+................................................YY", -"YY11<2111,;@..................................................YY", -"YYY11111>$X..................................................YYY", -"YYY112<-+....................................................YYY", -"YYY11>$......................................................YYY", -"YYYY-+......................................................YYYY", -"YYYYY......................XX..............................YYYYY", -"YYYYY......................................................YYYYY", -"YYYYYY....................................................YYYYYY", -"YYYYYYY.............................X........X...........YYYYYYY", -"YYYYYYY..................................................YYYYYYY", -"YYYYYYYY................................................YYYYYYYY", -"YYYYYYYYY..............................................YYYYYYYYY", -"YYYYYYYYYY..........X.................................YYYYYYYYYY", -"YYYYYYYYYYY..........................................YYYYYYYYYYY", -"YYYYYYYYYYYYY......................................YYYYYYYYYYYYY", -"YYYYYYYYYYYYYY........................X...........YYYYYYYYYYYYYY", -"YYYYYYYYYYYYYYYY................................YYYYYYYYYYYYYYYY", -"YYYYYYYYYYYYYYYYY....X.........X...............YYYYYYYYYYYYYYYYY", -"YYYYYYYYYYYYYYYYYYYY........................YYYYYYYYYYYYYYYYYYYY", -"YYYYYYYYYYYYYYYYYYYYYY....................YYYYYYYYYYYYYYYYYYYYYY", -"YYYYYYYYYYYYYYYYYYYYYYYYYY............YYYYYYYYYYYYYYYYYYYYYYYYYY" +"&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ &X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X", +"&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ &X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X", +"&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ &X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X", +"&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ &X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X", +"&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ &X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X", +"&X&X&X&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ &X&X&X&X&X&X&X&X&X&X&X&X&X&X", +"&X&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O + . . . . O $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ &X&X&X&X&X&X&X&X&X&X&X&X&X", +"&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ O O O $ 7 h D K P U H Z s 3 $ . O $ $ $ $ $ $ $ $ $ $ $ $ &X&X&X&X&X&X&X&X&X&X&X&X", +"&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ @ . 1 Z } 4.m.T.^. X X X'.).L.l.,.) c - O O O $ $ $ $ $ $ $ $ $ $ &X&X&X&X&X&X&X&X&X&X", +"&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ O r ' d.~.%X%X%X%X%X%X%X%X%X%X%X%X%X%XI.9.Q 7 O $ @ $ $ $ $ $ $ $ $ $ &X&X&X&X&X&X&X&X&X", +"&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ . w o.V.%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X Xj./ 2 O O % $ $ $ $ $ $ $ $ &X&X&X&X&X&X&X&X", +"&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ O - U v. X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X|.r.D @ O $ $ $ $ $ $ $ $ &X&X&X&X&X&X&X&X", +"&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ O 6 %.^.%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%XI.{ , @ @ $ $ $ $ $ $ $ &X&X&X&X&X&X&X", +"&X&X&X&X&X&X$ $ $ $ $ $ $ $ O f w.%X%X%X%X%X%X%X%X%X%X%X).D.m.j.v.N.T.'.%X%X%X%X%X%X%X%X%X%X'.-.7 O $ $ $ $ $ $ $ $ &X&X&X&X&X&X", +"&X&X&X&X&X$ $ $ $ $ $ $ $ O c j.%X%X%X%X%X%X%X%X%XS.1._ Z f 7 1 1 7 f G | w.R.%X%X%X%X%X%X%X%X%X4.9 O $ $ $ $ $ $ $ $ &X&X&X&X&X", +"&X&X&X&X$ $ $ $ $ $ $ $ O h j.%X%X%X%X%X%X%X Xv.{ f @ . + + $ $ $ $ O . . - c #.D.%X%X%X%X%X%X%X%X3.3 @ $ $ $ $ $ $ $ &X&X&X&X&X", +"&X&X&X&X$ $ $ $ $ $ $ @ w t.%X%X%X%X%X%X%XI.O.w O @ $ $ $ $ $ $ $ $ $ $ $ $ O O h :.^.%X%X%X%X%X%X%X*.- $ $ $ $ $ $ $ $ &X&X&X&X", +"&X&X&X$ $ $ $ $ $ $ $ - &.%X%X%X%X%X%X%Xf.D O O $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O - R V.%X%X%X%X%X%X'._ O $ $ $ $ $ $ $ &X&X&X&X", +"&X&X&X$ $ $ $ $ $ $ O Q '.%X%X%X%X%X%X4.r O @ - $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O B j.%X%X%X%X%X%XH.V O $ $ $ $ $ $ $ &X&X&X", +"&X&X$ $ $ $ $ $ $ O r m.%X%X%X%X%X%X4.6 O $ $ O $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ % O c j.%X%X%X%X%X%X8., $ $ $ $ $ $ $ &X&X&X", +"&X&X$ $ $ $ $ $ @ @ @.%X%X%X%X%X%Xd.w O $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ o Z A.%X%X%X%X%X'.R . $ $ $ $ $ $ $ &X&X", +"&X&X$ $ $ $ $ $ O h D.%X%X%X%X%XH.V @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O ! ).%X%X%X%X%Xu.1 $ $ $ $ $ $ $ &X&X", +"&X$ $ $ $ $ $ $ O o.%X%X%X%X%X X{ O $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ - ,.%X%X%X%X%X'.P O $ $ $ $ $ $ $ &X", +"&X$ $ $ $ $ $ $ 7 j.%X%X%X%X%Xj.7 @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O c H.%X%X%X%X%X,.- $ $ $ $ $ $ $ &X", +"&X$ $ $ $ $ $ . H '.%X%X%X%X X/ O @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ %.%X%X%X%X%XD.p @ $ $ $ $ $ $ &X", +"&X$ $ $ $ $ $ O #.%X%X%X%X%XV.w @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . D ~.%X%X%X%X XT . $ $ $ $ $ $ &X", +"$ $ $ $ $ $ $ , u.%X%X%X%X%X-.@ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 3 d.%X%X%X%X%X$.O $ $ $ $ $ $ $ ", +"$ $ $ $ $ $ @ r D.%X%X%X%X XR . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O +.!.R.~.R.~.3.- $ $ $ $ $ $ $ ", +"$ $ $ $ $ $ O Z ^.%X%X%X%XR.z O $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O 7 c c c c c f - $ $ $ $ $ $ $ ", +"$ $ $ $ $ $ . P X%X%X%X%Xm.7 O $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ - O O O O O O $ $ $ $ $ $ $ $ $ ", +"$ $ $ $ $ $ . / %X%X%X%X%Xd., - $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ", +"$ $ $ $ $ $ . ` %X%X%X%X%Xr.- @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ", +"$ $ $ $ $ $ . ` %X%X%X%X%Xr.- $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ", +"$ $ $ $ $ $ . / %X%X%X%X%Xd., $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ + @ + $ + + + + + $ + + + + + $ + + $ $ $ $ $ $ $ $ ", +"$ $ $ $ $ $ . P |.%X%X%X%Xm.7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ - w s s p p s p p s p p p p p p p p s p p p 1 $ $ $ $ $ $ $ ", +"$ $ $ $ $ $ O Z ^.%X%X%X%XR.z O $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 3 u.P.H.H.H.L.H.H.H.H.L.L.G.G.P.G.P.L.H.H.H.~ + $ $ $ $ $ $ ", +"$ $ $ $ $ $ $ r S.%X%X%X%X XE . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ 5 m.%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X' . $ $ $ $ $ $ ", +"$ $ $ $ $ $ $ , u.%X%X%X%X%X-.@ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ 7 m.%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X$ $ $ $ $ $ . #.%X%X%X%X%XN.w $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 7 m.%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X$ $ $ $ $ $ O H '.%X%X%X%X X) . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 5 m.%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X$ $ $ $ $ $ $ 7 j.%X%X%X%X%Xf.7 @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ + 5 f.!.!.!.!.!.~.!.!.~.R.!.'.%X%X%X%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X$ $ $ $ $ $ $ . o.%X%X%X%X%X X} . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ l B B M M m c B c B c Z u.%X%X%X%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X&X$ $ $ $ $ $ O h S.%X%X%X%X%XH.V @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ o o o O O O . O O . ! ^.%X%X%X%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X&X$ $ $ $ $ $ $ O @.%X%X%X%X%X%Xd.w @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O Z S.%X%X%X%X%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X&X&X$ $ $ $ $ $ @ r m.%X%X%X%X%X%X4.9 O $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O c j.%X%X%X%X%X%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X&X&X$ $ $ $ $ $ $ O ! '.%X%X%X%X%X%X4.w $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O Z z.%X%X%X%X%X%X%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X&X&X$ $ $ $ $ $ $ - - -.%X%X%X%X%X%X%Xd.D . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O - T V.%X%X%X%X%X%X%X%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X&X&X&X$ $ $ $ O - O O 8 r.%X%X%X%X%X%X%XI.o.w . + $ $ $ $ $ $ $ $ $ $ $ $ o O h :.^.%X%X%X%X%X%X X|.%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X&X&X&X&X$ $ $ $ $ $ $ O h j.%X%X%X%X%X%X%X Xv.{ s $ . O @ $ $ $ O O O . , c @.D.%X%X%X%X%X%X%X%X4.j.%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X&X&X&X&X$ $ $ $ $ $ $ $ O c j.%X%X%X%X%X%X%X%X%XD.3._ D s 5 3 3 9 s G | w.R.%X%X%X%X%X%X%X%X%X3.w w.%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X&X&X&X&X&X$ $ $ $ $ $ $ $ O f r.%X%X%X%X%X%X%X%X%X%X%X^.H.N.j.v.m.I.'.%X%X%X%X%X%X%X%X%X%X'.:.3 - r.%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ O 9 %.^.%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%XI.{ - $ - r.%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ @ - U l.%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X|.q.D $ $ $ - y.%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ w X.V. X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X%X Xj.~ 1 . $ $ $ - w.%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ @ O r ' f.~.%X%X%X%X%X%X%X%X%X%X%X%X%X%XT.9.E 7 + $ $ $ $ $ ; y.%X%X%X%X%X' . $ $ $ $ $ $ ", +"&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ O o 1 Z } 4.m.Y.^. X X X X^.H.l.>.) c - . $ $ $ $ $ $ $ - w.%X X X X%X_ . $ $ $ $ $ $ ", +"&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ $ O . $ 5 h D K U U H Z s 3 $ . O $ $ $ $ $ $ $ $ $ $ D U Y U Y U s @ $ $ $ $ $ $ ", +"&X&X&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O . . . O . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ + . + . + . @ $ $ $ $ $ $ $ ", +"&X&X&X&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ", +"&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ", +"&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ", +"&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ", +"&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ", +"&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X&X$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ " }; diff --git a/share/pixmaps/favicon.ico b/share/pixmaps/favicon.ico index 09b7274..c4625aa 100644 Binary files a/share/pixmaps/favicon.ico and b/share/pixmaps/favicon.ico differ diff --git a/share/pixmaps/nsis-header.bmp b/share/pixmaps/nsis-header.bmp index 56964d8..cce0aed 100644 Binary files a/share/pixmaps/nsis-header.bmp and b/share/pixmaps/nsis-header.bmp differ diff --git a/share/pixmaps/nsis-wizard.bmp b/share/pixmaps/nsis-wizard.bmp index dc9d369..8741df9 100644 Binary files a/share/pixmaps/nsis-wizard.bmp and b/share/pixmaps/nsis-wizard.bmp differ diff --git a/share/qt/Info.plist.in~ b/share/qt/Info.plist.in~ new file mode 100644 index 0000000..a6c3275 --- /dev/null +++ b/share/qt/Info.plist.in~ @@ -0,0 +1,97 @@ + + + + + LSMinimumSystemVersion + 10.6.0 + + LSArchitecturePriority + + x86_64 + + + CFBundleIconFile + bitmark.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 + GameCredits-Qt + + CFBundleIdentifier + org.bitmarkfoundation.GameCredits-Qt + + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLName + org.bitmark.BitmarkPayment + CFBundleURLSchemes + + bitmark + + + + + UTExportedTypeDeclarations + + + UTTypeIdentifier + org.bitmark.paymentrequest + UTTypeDescription + Bitmark payment request + UTTypeConformsTo + + public.data + + UTTypeTagSpecification + + public.mime-type + application/x-bitmark-payment-request + public.filename-extension + + bitmarkpaymentrequest + + + + + + CFBundleDocumentTypes + + + CFBundleTypeRole + Editor + LSItemContentTypes + + org.bitmark.paymentrequest + + LSHandlerRank + Owner + + + + NSPrincipalClass + NSApplication + + NSHighResolutionCapable + True + + LSApplicationCategoryType + public.app-category.finance + + diff --git a/share/qt/make_icons.sh b/share/qt/make_icons.sh index d0b6789..d6e6318 100755 --- a/share/qt/make_icons.sh +++ b/share/qt/make_icons.sh @@ -18,6 +18,7 @@ cp ../pixmaps/bitmark256.png ../../src/qt/res/icons/bitmark.png convert ../pixmaps/bitmark16.png ../pixmaps/bitmark32.png bitmark-48.png ../pixmaps/bitmark256.png ${ICON_DST} cp ../pixmaps/bitmark16.png ../../src/qt/res/icons/toolbar.png # create base for all testnet icons +convert ${ICON_SRC} -colorspace Gray ../pixmaps/Tbitmark1024.png convert ../pixmaps/Tbitmark1024.png -resize 256x256 ${ICON_SRC_TEST} convert ${ICON_SRC_TEST} -resize 16x16 bitmark-test-16.png convert ${ICON_SRC_TEST} -resize 32x32 bitmark-test-32.png @@ -41,3 +42,4 @@ mv ../pixmaps/tempbitmark64.png ../pixmaps/bitmark64.png # clean up rm bitmark-48.png rm bitmark-test-*.png +rm ../pixmaps/Tbitmark1024.png diff --git a/share/setup.nsi.in b/share/setup.nsi.in index a86409c..c37787d 100644 --- a/share/setup.nsi.in +++ b/share/setup.nsi.in @@ -6,7 +6,7 @@ SetCompressor /SOLID lzma # General Symbol Definitions !define REGKEY "SOFTWARE\$(^Name)" !define VERSION @CLIENT_VERSION_MAJOR@.@CLIENT_VERSION_MINOR@.@CLIENT_VERSION_REVISION@ -!define COMPANY "Project Bitmark" +!define COMPANY "Gamecredits Foundation" !define URL http://github.com/project-bitmark/bitmark/ # MUI Symbol Definitions @@ -48,18 +48,18 @@ Var StartMenuGroup !insertmacro MUI_LANGUAGE English # Installer attributes -OutFile @abs_top_srcdir@/bitmark-${VERSION}-win@WINDOWS_BITS@-setup.exe +OutFile @abs_top_srcdir@/pfennig-${VERSION}-win@WINDOWS_BITS@-setup.exe !if "@WINDOWS_BITS@" == "64" -InstallDir $PROGRAMFILES64\Bitmark +InstallDir $PROGRAMFILES64\Gamecredits !else -InstallDir $PROGRAMFILES\Bitmark +InstallDir $PROGRAMFILES\Gamecredits !endif CRCCheck on XPStyle on BrandingText " " ShowInstDetails show VIProductVersion ${VERSION}.@CLIENT_VERSION_BUILD@ -VIAddVersionKey ProductName "Bitmark Core" +VIAddVersionKey ProductName "Gamecredits Core" VIAddVersionKey ProductVersion "${VERSION}" VIAddVersionKey CompanyName "${COMPANY}" VIAddVersionKey CompanyWebsite "${URL}" @@ -84,8 +84,8 @@ Section -Main SEC0000 SetOutPath $INSTDIR WriteRegStr HKCU "${REGKEY}\Components" Main 1 - # Remove old wxwidgets-based-bitmark executable and locales: - Delete /REBOOTOK $INSTDIR\bitmark.exe + # Remove old wxwidgets-based-pfennig executable and locales: + Delete /REBOOTOK $INSTDIR\pfennig.exe RMDir /r /REBOOTOK $INSTDIR\locale SectionEnd @@ -106,10 +106,10 @@ Section -post SEC0001 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 "bitmark" "URL Protocol" "" - WriteRegStr HKCR "bitmark" "" "URL:Bitmark" - WriteRegStr HKCR "bitmark\DefaultIcon" "" $INSTDIR\pfennig-qt.exe - WriteRegStr HKCR "bitmark\shell\open\command" "" '"$INSTDIR\pfennig-qt.exe" "%1"' + WriteRegStr HKCR "pfennig" "URL Protocol" "" + WriteRegStr HKCR "pfennig" "" "URL:Gamecredits" + WriteRegStr HKCR "pfennig\DefaultIcon" "" $INSTDIR\pfennig-qt.exe + WriteRegStr HKCR "pfennig\shell\open\command" "" '"$INSTDIR\pfennig-qt.exe" "%1"' SectionEnd # Macro for selecting uninstaller sections @@ -139,7 +139,7 @@ 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\Bitmark.lnk" + Delete /REBOOTOK "$SMSTARTUP\Gamecredits.lnk" Delete /REBOOTOK $INSTDIR\uninstall.exe Delete /REBOOTOK $INSTDIR\debug.log Delete /REBOOTOK $INSTDIR\db.log @@ -147,7 +147,7 @@ Section -un.post UNSEC0001 DeleteRegValue HKCU "${REGKEY}" Path DeleteRegKey /IfEmpty HKCU "${REGKEY}\Components" DeleteRegKey /IfEmpty HKCU "${REGKEY}" - DeleteRegKey HKCR "bitmark" + DeleteRegKey HKCR "pfennig" RmDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup RmDir /REBOOTOK $INSTDIR Push $R0 diff --git a/share/setup.nsi.in~ b/share/setup.nsi.in~ new file mode 100644 index 0000000..c62c843 --- /dev/null +++ b/share/setup.nsi.in~ @@ -0,0 +1,179 @@ +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 "Gamecredits Foundation" +!define URL http://github.com/project-bitmark/bitmark/ + +# MUI Symbol Definitions +!define MUI_ICON "@abs_top_srcdir@/share/pixmaps/bitmark.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\gamecredits-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@/gamecredits-${VERSION}-win@WINDOWS_BITS@-setup.exe +!if "@WINDOWS_BITS@" == "64" +InstallDir $PROGRAMFILES64\Gamecredits +!else +InstallDir $PROGRAMFILES\Gamecredits +!endif +CRCCheck on +XPStyle on +BrandingText " " +ShowInstDetails show +VIProductVersion ${VERSION}.@CLIENT_VERSION_BUILD@ +VIAddVersionKey ProductName "Gamecredits 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/gamecredits-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/gamecreditsd.exe + File @abs_top_srcdir@/release/gamecredits-cli.exe + SetOutPath $INSTDIR\doc + File /r @abs_top_srcdir@/doc\*.* + SetOutPath $INSTDIR + WriteRegStr HKCU "${REGKEY}\Components" Main 1 + + # Remove old wxwidgets-based-gamecredits executable and locales: + Delete /REBOOTOK $INSTDIR\gamecredits.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\gamecredits-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 "gamecredits" "URL Protocol" "" + WriteRegStr HKCR "gamecredits" "" "URL:Gamecredits" + WriteRegStr HKCR "gamecredits\DefaultIcon" "" $INSTDIR\gamecredits-qt.exe + WriteRegStr HKCR "gamecredits\shell\open\command" "" '"$INSTDIR\gamecredits-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\gamecredits-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\Gamecredits.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 "gamecredits" + 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/alert.h b/src/alert.h index c6b00d9..313a740 100644 --- a/src/alert.h +++ b/src/alert.h @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Copyright (c) 2009-2013 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/alert.h~ b/src/alert.h~ new file mode 100644 index 0000000..6713d7f --- /dev/null +++ b/src/alert.h~ @@ -0,0 +1,111 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Copyright (c) 2009-2013 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef _BITMARKALERT_H_ +#define _BITMARKALERT_H_ 1 + +#include "serialize.h" +#include "sync.h" + +#include +#include +#include +#include + +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. + * Alert messages are broadcast as a vector of signed data. Unserializing may + * not read the entire buffer if the alert is for a newer version, but older + * versions can still relay the original data. + */ +class CUnsignedAlert +{ +public: + int nVersion; + int64_t nRelayUntil; // when newer nodes stop relaying to newer nodes + int64_t nExpiration; + int nID; + int nCancel; + std::set setCancel; + int nMinVer; // lowest version inclusive + int nMaxVer; // highest version inclusive + std::set setSubVer; // empty matches all + int nPriority; + + // Actions + std::string strComment; + std::string strStatusBar; + std::string strReserved; + + IMPLEMENT_SERIALIZE + ( + READWRITE(this->nVersion); + nVersion = this->nVersion; + READWRITE(nRelayUntil); + READWRITE(nExpiration); + READWRITE(nID); + READWRITE(nCancel); + READWRITE(setCancel); + READWRITE(nMinVer); + READWRITE(nMaxVer); + READWRITE(setSubVer); + READWRITE(nPriority); + + READWRITE(LIMITED_STRING(strComment, 65536)); + READWRITE(LIMITED_STRING(strStatusBar, 256)); + READWRITE(LIMITED_STRING(strReserved, 256)); + ) + + void SetNull(); + + std::string ToString() const; + void print() const; +}; + +/** An alert is a combination of a serialized CUnsignedAlert and a signature. */ +class CAlert : public CUnsignedAlert +{ +public: + std::vector vchMsg; + std::vector vchSig; + + CAlert() + { + SetNull(); + } + + IMPLEMENT_SERIALIZE + ( + READWRITE(vchMsg); + READWRITE(vchSig); + ) + + void SetNull(); + bool IsNull() const; + uint256 GetHash() const; + bool IsInEffect() const; + bool Cancels(const CAlert& alert) const; + bool AppliesTo(int nVersion, std::string strSubVerIn) const; + bool AppliesToMe() const; + bool RelayTo(CNode* pnode) const; + bool CheckSignature() const; + bool ProcessAlert(bool fThread = true); + static void Notify(const std::string& strMessage, bool fThread); + + /* + * Get copy of (active) alert object by hash. Returns a null alert if it is not found. + */ + static CAlert getAlertByHash(const uint256 &hash); +}; + +#endif diff --git a/src/allocators.cpp b/src/allocators.cpp index be88cf4..09af077 100644 --- a/src/allocators.cpp +++ b/src/allocators.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/allocators.cpp~ b/src/allocators.cpp~ new file mode 100644 index 0000000..8cf1b24 --- /dev/null +++ b/src/allocators.cpp~ @@ -0,0 +1,68 @@ +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 af45dba..7f547bd 100644 --- a/src/allocators.h +++ b/src/allocators.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/allocators.h~ b/src/allocators.h~ new file mode 100644 index 0000000..7c19fc8 --- /dev/null +++ b/src/allocators.h~ @@ -0,0 +1,256 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_ALLOCATORS_H +#define BITMARK_ALLOCATORS_H + +#include +#include +#include + +#include +#include +#include // for OPENSSL_cleanse() + +/** + * Thread-safe class to keep track of locked (ie, non-swappable) memory pages. + * + * Memory locks do not stack, that is, pages which have been locked several times by calls to mlock() + * will be unlocked by a single call to munlock(). This can result in keying material ending up in swap when + * those functions are used naively. This class simulates stacking memory locks by keeping a counter per page. + * + * @note By using a map from each page base address to lock count, this class is optimized for + * small objects that span up to a few pages, mostly smaller than a page. To support large allocations, + * something like an interval tree would be the preferred data structure. + */ +template class LockedPageManagerBase +{ +public: + LockedPageManagerBase(size_t page_size): + page_size(page_size) + { + // Determine bitmask for extracting page from address + assert(!(page_size & (page_size-1))); // size must be power of two + 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) + { + boost::mutex::scoped_lock lock(mutex); + if(!size) return; + const size_t base_addr = reinterpret_cast(p); + const size_t start_page = base_addr & page_mask; + const size_t end_page = (base_addr + size - 1) & page_mask; + for(size_t page = start_page; page <= end_page; page += page_size) + { + Histogram::iterator it = histogram.find(page); + if(it == histogram.end()) // Newly locked page + { + locker.Lock(reinterpret_cast(page), page_size); + histogram.insert(std::make_pair(page, 1)); + } + else // Page was already locked; increase counter + { + it->second += 1; + } + } + } + + // For all pages in affected range, decrease lock count + void UnlockRange(void *p, size_t size) + { + boost::mutex::scoped_lock lock(mutex); + if(!size) return; + const size_t base_addr = reinterpret_cast(p); + const size_t start_page = base_addr & page_mask; + const size_t end_page = (base_addr + size - 1) & page_mask; + for(size_t page = start_page; page <= end_page; page += page_size) + { + Histogram::iterator it = histogram.find(page); + assert(it != histogram.end()); // Cannot unlock an area that was not locked + // Decrease counter for page, when it is zero, the page will be unlocked + it->second -= 1; + if(it->second == 0) // Nothing on the page anymore that keeps it locked + { + // Unlock page and remove the count from histogram + locker.Unlock(reinterpret_cast(page), page_size); + histogram.erase(it); + } + } + } + + // Get number of locked pages for diagnostics + int GetLockedPageCount() + { + boost::mutex::scoped_lock lock(mutex); + return histogram.size(); + } + +private: + Locker locker; + boost::mutex mutex; + size_t page_size, page_mask; + // map of page base address to lock count + typedef std::map Histogram; + Histogram histogram; +}; + + +/** + * OS-dependent memory page locking/unlocking. + * Defined as policy class to make stubbing for test possible. + */ +class MemoryPageLocker +{ +public: + /** Lock memory pages. + * addr and len must be a multiple of the system page size + */ + 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); +}; + +/** + * 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() + { + boost::call_once(LockedPageManager::CreateInstance, LockedPageManager::init_flag); + return *LockedPageManager::_instance; + } + +private: + 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; +}; + +// +// Functions for directly locking/unlocking memory objects. +// Intended for non-dynamically allocated structures. +// +template void LockObject(const T &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)); +} + +// +// Allocator that locks its contents from being paged +// out of memory and clears its contents before deletion. +// +template +struct secure_allocator : public std::allocator +{ + // MSVC8 default copy constructor is broken + typedef std::allocator base; + typedef typename base::size_type size_type; + typedef typename base::difference_type difference_type; + typedef typename base::pointer pointer; + typedef typename base::const_pointer const_pointer; + typedef typename base::reference reference; + typedef typename base::const_reference const_reference; + typedef typename base::value_type value_type; + secure_allocator() throw() {} + secure_allocator(const secure_allocator& a) throw() : base(a) {} + template + secure_allocator(const secure_allocator& a) throw() : base(a) {} + ~secure_allocator() throw() {} + template struct rebind + { typedef secure_allocator<_Other> other; }; + + T* allocate(std::size_t n, const void *hint = 0) + { + T *p; + p = std::allocator::allocate(n, hint); + if (p != NULL) + LockedPageManager::Instance().LockRange(p, sizeof(T) * n); + return p; + } + + void deallocate(T* p, std::size_t n) + { + if (p != NULL) + { + OPENSSL_cleanse(p, sizeof(T) * n); + LockedPageManager::Instance().UnlockRange(p, sizeof(T) * n); + } + std::allocator::deallocate(p, n); + } +}; + + +// +// Allocator that clears its contents before deletion. +// +template +struct zero_after_free_allocator : public std::allocator +{ + // MSVC8 default copy constructor is broken + typedef std::allocator base; + typedef typename base::size_type size_type; + typedef typename base::difference_type difference_type; + typedef typename base::pointer pointer; + typedef typename base::const_pointer const_pointer; + typedef typename base::reference reference; + typedef typename base::const_reference const_reference; + typedef typename base::value_type value_type; + zero_after_free_allocator() throw() {} + zero_after_free_allocator(const zero_after_free_allocator& a) throw() : base(a) {} + template + zero_after_free_allocator(const zero_after_free_allocator& a) throw() : base(a) {} + ~zero_after_free_allocator() throw() {} + template struct rebind + { typedef zero_after_free_allocator<_Other> other; }; + + void deallocate(T* p, std::size_t n) + { + if (p != NULL) + OPENSSL_cleanse(p, sizeof(T) * n); + std::allocator::deallocate(p, n); + } +}; + +// This is exactly like std::string, but with a custom allocator. +typedef std::basic_string, secure_allocator > SecureString; + +#endif diff --git a/src/base58.cpp b/src/base58.cpp index ce5ea21..41fc2be 100644 --- a/src/base58.cpp +++ b/src/base58.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/base58.cpp~ b/src/base58.cpp~ new file mode 100644 index 0000000..ef777ac --- /dev/null +++ b/src/base58.cpp~ @@ -0,0 +1,273 @@ +// Original Code: Copyright (c) 2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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) || (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; + bool rc58 = DecodeBase58Check(psz, vchTemp); + if ((!rc58) || (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 CBitmarkAddressVisitor : public boost::static_visitor { + private: + CBitmarkAddress *addr; + public: + CBitmarkAddressVisitor(CBitmarkAddress *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 CBitmarkAddress::Set(const CKeyID &id) { + SetData(Params().Base58Prefix(CChainParams::PUBKEY_ADDRESS), &id, 20); + return true; +} + +bool CBitmarkAddress::Set(const CScriptID &id) { + SetData(Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS), &id, 20); + return true; +} + +bool CBitmarkAddress::Set(const CTxDestination &dest) { + return boost::apply_visitor(CBitmarkAddressVisitor(this), dest); +} + +bool CBitmarkAddress::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 CBitmarkAddress::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 CBitmarkAddress::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 CBitmarkAddress::IsScript() const { + return IsValid() && vchVersion == Params().Base58Prefix(CChainParams::SCRIPT_ADDRESS); +} + +void CBitmarkSecret::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 CBitmarkSecret::GetKey() { + CKey ret; + ret.Set(&vchData[0], &vchData[32], vchData.size() > 32 && vchData[32] == 1); + return ret; +} + +bool CBitmarkSecret::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 CBitmarkSecret::SetString(const char* pszSecret) { + return CBase58Data::SetString(pszSecret) && IsValid(); +} + +bool CBitmarkSecret::SetString(const std::string& strSecret) { + return SetString(strSecret.c_str()); +} diff --git a/src/base58.h b/src/base58.h index 786e0bc..86e80a5 100644 --- a/src/base58.h +++ b/src/base58.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -93,7 +93,7 @@ class CBase58Data bool operator> (const CBase58Data& b58) const { return CompareTo(b58) > 0; } }; -/** base58-encoded Bitmark addresses. +/** base58-encoded Pfennig addresses. * Public-key-hash-addresses have version 0 (or 111 testnet). * The data vector contains RIPEMD160(SHA256(pubkey)), where pubkey is the serialized public key. * Script-hash-addresses have version 5 (or 196 testnet). diff --git a/src/base58.h~ b/src/base58.h~ new file mode 100644 index 0000000..ca703bd --- /dev/null +++ b/src/base58.h~ @@ -0,0 +1,160 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 +// could be used to create visually identical looking account numbers. +// - A string with non-alphanumeric characters is not as easily accepted as an account number. +// - E-mail usually won't line-break if there's no punctuation to break at. +// - Double-clicking selects the whole number as one word if it's all alphanumeric. +// +#ifndef BITMARK_BASE58_H +#define BITMARK_BASE58_H + +#include "chainparams.h" +#include "key.h" +#include "script.h" + +#include +#include + +/** + * 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); + +/** + * Encode a byte vector as a base58-encoded string + */ +std::string EncodeBase58(const std::vector& vch); + +/** + * 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); + +/** + * 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); + +/** + * Encode a byte vector into a base58-encoded string, including checksum + */ +std::string EncodeBase58Check(const std::vector& vchIn); + +/** + * 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); + +/** + * 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); + +/** + * Base class for all base58-encoded data + */ +class CBase58Data +{ +protected: + // the version byte(s) + std::vector vchVersion; + + // the actually encoded data + typedef std::vector > vector_uchar; + vector_uchar vchData; + + 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, 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; } + bool operator>=(const CBase58Data& b58) const { return CompareTo(b58) >= 0; } + bool operator< (const CBase58Data& b58) const { return CompareTo(b58) < 0; } + bool operator> (const CBase58Data& b58) const { return CompareTo(b58) > 0; } +}; + +/** base58-encoded Pfennig addresses. + * Public-key-hash-addresses have version 0 (or 111 testnet). + * The data vector contains RIPEMD160(SHA256(pubkey)), where pubkey is the serialized public key. + * Script-hash-addresses have version 5 (or 196 testnet). + * The data vector contains RIPEMD160(SHA256(cscript)), where cscript is the serialized redemption script. + */ +class CBitmarkAddress : public CBase58Data { +public: + bool Set(const CKeyID &id); + bool Set(const CScriptID &id); + bool Set(const CTxDestination &dest); + bool IsValid() const; + + CBitmarkAddress() {} + CBitmarkAddress(const CTxDestination &dest) { Set(dest); } + CBitmarkAddress(const std::string& strAddress) { SetString(strAddress); } + CBitmarkAddress(const char* pszAddress) { SetString(pszAddress); } + + CTxDestination Get() const; + bool GetKeyID(CKeyID &keyID) const; + bool IsScript() const; +}; + +/** + * A base58-encoded secret key + */ +class CBitmarkSecret : public CBase58Data +{ +public: + void SetKey(const CKey& vchSecret); + CKey GetKey(); + bool IsValid() const; + bool SetString(const char* pszSecret); + bool SetString(const std::string& strSecret); + + CBitmarkSecret(const CKey& vchSecret) { SetKey(vchSecret); } + CBitmarkSecret() {} +}; + +template class CBitmarkExtKeyBase : public CBase58Data +{ +public: + void SetKey(const K &key) { + unsigned char vch[Size]; + key.Encode(vch); + SetData(Params().Base58Prefix(Type), vch, vch+Size); + } + + K GetKey() { + K ret; + ret.Decode(&vchData[0], &vchData[Size]); + return ret; + } + + CBitmarkExtKeyBase(const K &key) { + SetKey(key); + } + + CBitmarkExtKeyBase() {} +}; + +typedef CBitmarkExtKeyBase CBitmarkExtKey; +typedef CBitmarkExtKeyBase CBitmarkExtPubKey; + +#endif // BITMARK_BASE58_H diff --git a/src/bignum.h b/src/bignum.h index 5e89f0e..df55f9e 100644 --- a/src/bignum.h +++ b/src/bignum.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -285,7 +285,7 @@ class CBigNum : public BIGNUM // and 0xc0de000000 is compact (0x0600c0de) // (0x05c0de00) would be -0x40de000000 // - // Bitmark only uses this "compact" format for encoding difficulty + // Pfennig only uses this "compact" format for encoding difficulty // targets, which are unsigned 256bit quantities. Thus, all the // complexities of the sign bit and using base 256 are probably an // implementation accident. diff --git a/src/bignum.h~ b/src/bignum.h~ new file mode 100644 index 0000000..f03d52a --- /dev/null +++ b/src/bignum.h~ @@ -0,0 +1,596 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_BIGNUM_H +#define BITMARK_BIGNUM_H + +#include "serialize.h" +#include "uint256.h" +#include "version.h" + +#include +#include +#include + +#include + +/** Errors thrown by the bignum class */ +class bignum_error : public std::runtime_error +{ +public: + explicit bignum_error(const std::string& str) : std::runtime_error(str) {} +}; + + +/** RAII encapsulated BN_CTX (OpenSSL bignum context) */ +class CAutoBN_CTX +{ +protected: + BN_CTX* pctx; + BN_CTX* operator=(BN_CTX* pnew) { return pctx = pnew; } + +public: + CAutoBN_CTX() + { + pctx = BN_CTX_new(); + if (pctx == NULL) + throw bignum_error("CAutoBN_CTX : BN_CTX_new() returned NULL"); + } + + ~CAutoBN_CTX() + { + if (pctx != NULL) + BN_CTX_free(pctx); + } + + operator BN_CTX*() { return pctx; } + BN_CTX& operator*() { return *pctx; } + BN_CTX** operator&() { return &pctx; } + bool operator!() { return (pctx == NULL); } +}; + + +/** C++ wrapper for BIGNUM (OpenSSL bignum) */ +class CBigNum : public BIGNUM +{ +public: + CBigNum() + { + BN_init(this); + } + + CBigNum(const CBigNum& b) + { + BN_init(this); + if (!BN_copy(this, &b)) + { + BN_clear_free(this); + throw bignum_error("CBigNum::CBigNum(const CBigNum&) : BN_copy failed"); + } + } + + CBigNum& operator=(const CBigNum& b) + { + if (!BN_copy(this, &b)) + throw bignum_error("CBigNum::operator= : BN_copy failed"); + return (*this); + } + + ~CBigNum() + { + BN_clear_free(this); + } + + //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(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) + { + BN_init(this); + setvch(vch); + } + + void setulong(unsigned long n) + { + if (!BN_set_word(this, n)) + throw bignum_error("CBigNum conversion from unsigned long : BN_set_word failed"); + } + + unsigned long getulong() const + { + return BN_get_word(this); + } + + unsigned int getuint() const + { + return BN_get_word(this); + } + + int getint() const + { + unsigned long n = BN_get_word(this); + if (!BN_is_negative(this)) + return (n > (unsigned long)std::numeric_limits::max() ? std::numeric_limits::max() : n); + else + return (n > (unsigned long)std::numeric_limits::max() ? std::numeric_limits::min() : -(int)n); + } + + void setint64(int64_t sn) + { + unsigned char pch[sizeof(sn) + 6]; + unsigned char* p = pch + 4; + bool fNegative; + uint64_t n; + + 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, + // we instead increment the negative integer by 1, convert it, then increment the (now positive) unsigned integer by 1 to compensate + n = -(sn + 1); + ++n; + fNegative = true; + } else { + n = sn; + fNegative = false; + } + + bool fLeadingZeroes = true; + for (int i = 0; i < 8; i++) + { + unsigned char c = (n >> 56) & 0xff; + n <<= 8; + if (fLeadingZeroes) + { + if (c == 0) + continue; + if (c & 0x80) + *p++ = (fNegative ? 0x80 : 0); + else if (fNegative) + c |= 0x80; + fLeadingZeroes = false; + } + *p++ = c; + } + unsigned int nSize = p - (pch + 4); + pch[0] = (nSize >> 24) & 0xff; + pch[1] = (nSize >> 16) & 0xff; + pch[2] = (nSize >> 8) & 0xff; + pch[3] = (nSize) & 0xff; + BN_mpi2bn(pch, p - pch, this); + } + + void setuint64(uint64_t n) + { + unsigned char pch[sizeof(n) + 6]; + unsigned char* p = pch + 4; + bool fLeadingZeroes = true; + for (int i = 0; i < 8; i++) + { + unsigned char c = (n >> 56) & 0xff; + n <<= 8; + if (fLeadingZeroes) + { + if (c == 0) + continue; + if (c & 0x80) + *p++ = 0; + fLeadingZeroes = false; + } + *p++ = c; + } + unsigned int nSize = p - (pch + 4); + pch[0] = (nSize >> 24) & 0xff; + pch[1] = (nSize >> 16) & 0xff; + pch[2] = (nSize >> 8) & 0xff; + pch[3] = (nSize) & 0xff; + BN_mpi2bn(pch, p - pch, this); + } + + void setuint256(uint256 n) + { + unsigned char pch[sizeof(n) + 6]; + unsigned char* p = pch + 4; + bool fLeadingZeroes = true; + unsigned char* pbegin = (unsigned char*)&n; + unsigned char* psrc = pbegin + sizeof(n); + while (psrc != pbegin) + { + unsigned char c = *(--psrc); + if (fLeadingZeroes) + { + if (c == 0) + continue; + if (c & 0x80) + *p++ = 0; + fLeadingZeroes = false; + } + *p++ = c; + } + unsigned int nSize = p - (pch + 4); + pch[0] = (nSize >> 24) & 0xff; + pch[1] = (nSize >> 16) & 0xff; + pch[2] = (nSize >> 8) & 0xff; + pch[3] = (nSize >> 0) & 0xff; + BN_mpi2bn(pch, p - pch, this); + } + + uint256 getuint256() const + { + unsigned int nSize = BN_bn2mpi(this, NULL); + if (nSize < 4) + return 0; + std::vector vch(nSize); + BN_bn2mpi(this, &vch[0]); + if (vch.size() > 4) + vch[4] &= 0x7f; + uint256 n = 0; + for (unsigned int i = 0, j = vch.size()-1; i < sizeof(n) && j >= 4; i++, j--) + ((unsigned char*)&n)[i] = vch[j]; + return n; + } + + void setvch(const std::vector& vch) + { + std::vector vch2(vch.size() + 4); + unsigned int nSize = vch.size(); + // BIGNUM's byte stream format expects 4 bytes of + // big endian size data info at the front + vch2[0] = (nSize >> 24) & 0xff; + vch2[1] = (nSize >> 16) & 0xff; + vch2[2] = (nSize >> 8) & 0xff; + vch2[3] = (nSize >> 0) & 0xff; + // swap data to big endian + reverse_copy(vch.begin(), vch.end(), vch2.begin() + 4); + BN_mpi2bn(&vch2[0], vch2.size(), this); + } + + std::vector getvch() const + { + unsigned int nSize = BN_bn2mpi(this, NULL); + if (nSize <= 4) + return std::vector(); + std::vector vch(nSize); + BN_bn2mpi(this, &vch[0]); + vch.erase(vch.begin(), vch.begin() + 4); + reverse(vch.begin(), vch.end()); + return vch; + } + + // The "compact" format is a representation of a whole + // number N using an unsigned 32bit number similar to a + // floating point format. + // The most significant 8 bits are the unsigned exponent of base 256. + // This exponent can be thought of as "number of bytes of N". + // The lower 23 bits are the mantissa. + // Bit number 24 (0x800000) represents the sign of N. + // N = (-1^sign) * mantissa * 256^(exponent-3) + // + // Satoshi's original implementation used BN_bn2mpi() and BN_mpi2bn(). + // MPI uses the most significant bit of the first byte as sign. + // Thus 0x1234560000 is compact (0x05123456) + // and 0xc0de000000 is compact (0x0600c0de) + // (0x05c0de00) would be -0x40de000000 + // + // Pfennig only uses this "compact" format for encoding difficulty + // targets, which are unsigned 256bit quantities. Thus, all the + // complexities of the sign bit and using base 256 are probably an + // implementation accident. + // + // This implementation directly uses shifts instead of going + // through an intermediate MPI representation. + CBigNum& SetCompact(unsigned int nCompact) + { + unsigned int nSize = nCompact >> 24; + bool fNegative =(nCompact & 0x00800000) != 0; + unsigned int nWord = nCompact & 0x007fffff; + if (nSize <= 3) + { + nWord >>= 8*(3-nSize); + BN_set_word(this, nWord); + } + else + { + BN_set_word(this, nWord); + BN_lshift(this, this, 8*(nSize-3)); + } + BN_set_negative(this, fNegative); + return *this; + } + + unsigned int GetCompact() const + { + unsigned int nSize = BN_num_bytes(this); + unsigned int nCompact = 0; + if (nSize <= 3) + nCompact = BN_get_word(this) << 8*(3-nSize); + else + { + CBigNum bn; + BN_rshift(&bn, this, 8*(nSize-3)); + nCompact = BN_get_word(&bn); + } + // The 0x00800000 bit denotes the sign. + // Thus, if it is already set, divide the mantissa by 256 and increase the exponent. + if (nCompact & 0x00800000) + { + nCompact >>= 8; + nSize++; + } + nCompact |= nSize << 24; + nCompact |= (BN_is_negative(this) ? 0x00800000 : 0); + return nCompact; + } + + void SetHex(const std::string& str) + { + // skip 0x + const char* psz = str.c_str(); + while (isspace(*psz)) + psz++; + bool fNegative = false; + if (*psz == '-') + { + fNegative = true; + psz++; + } + if (psz[0] == '0' && tolower(psz[1]) == 'x') + psz += 2; + while (isspace(*psz)) + psz++; + + // hex string to bignum + *this = 0; + int n; + while ((n = HexDigit(*psz)) != -1) + { + *this <<= 4; + *this += n; + ++psz; + } + if (fNegative) + *this = 0 - *this; + } + + std::string ToString(int nBase=10) const + { + CAutoBN_CTX pctx; + CBigNum bnBase = nBase; + CBigNum bn0 = 0; + std::string str; + CBigNum bn = *this; + BN_set_negative(&bn, false); + CBigNum dv; + CBigNum rem; + if (BN_cmp(&bn, &bn0) == 0) + return "0"; + while (BN_cmp(&bn, &bn0) > 0) + { + if (!BN_div(&dv, &rem, &bn, &bnBase, pctx)) + throw bignum_error("CBigNum::ToString() : BN_div failed"); + bn = dv; + unsigned int c = rem.getulong(); + str += "0123456789abcdef"[c]; + } + if (BN_is_negative(this)) + str += "-"; + reverse(str.begin(), str.end()); + return str; + } + + std::string GetHex() const + { + return ToString(16); + } + + unsigned int GetSerializeSize(int nType=0, int nVersion=PROTOCOL_VERSION) const + { + return ::GetSerializeSize(getvch(), nType, nVersion); + } + + template + void Serialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION) const + { + ::Serialize(s, getvch(), nType, nVersion); + } + + template + void Unserialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION) + { + std::vector vch; + ::Unserialize(s, vch, nType, nVersion); + setvch(vch); + } + + + bool operator!() const + { + return BN_is_zero(this); + } + + CBigNum& operator+=(const CBigNum& b) + { + if (!BN_add(this, this, &b)) + throw bignum_error("CBigNum::operator+= : BN_add failed"); + return *this; + } + + CBigNum& operator-=(const CBigNum& b) + { + *this = *this - b; + return *this; + } + + CBigNum& operator*=(const CBigNum& b) + { + CAutoBN_CTX pctx; + if (!BN_mul(this, this, &b, pctx)) + throw bignum_error("CBigNum::operator*= : BN_mul failed"); + return *this; + } + + CBigNum& operator/=(const CBigNum& b) + { + *this = *this / b; + return *this; + } + + CBigNum& operator%=(const CBigNum& b) + { + *this = *this % b; + return *this; + } + + CBigNum& operator<<=(unsigned int shift) + { + if (!BN_lshift(this, this, shift)) + throw bignum_error("CBigNum:operator<<= : BN_lshift failed"); + return *this; + } + + CBigNum& operator>>=(unsigned int shift) + { + // Note: BN_rshift segfaults on 64-bit if 2^shift is greater than the number + // if built on ubuntu 9.04 or 9.10, probably depends on version of OpenSSL + CBigNum a = 1; + a <<= shift; + if (BN_cmp(&a, this) > 0) + { + *this = 0; + return *this; + } + + if (!BN_rshift(this, this, shift)) + throw bignum_error("CBigNum:operator>>= : BN_rshift failed"); + return *this; + } + + + CBigNum& operator++() + { + // prefix operator + if (!BN_add(this, this, BN_value_one())) + throw bignum_error("CBigNum::operator++ : BN_add failed"); + return *this; + } + + const CBigNum operator++(int) + { + // postfix operator + const CBigNum ret = *this; + ++(*this); + return ret; + } + + CBigNum& operator--() + { + // prefix operator + CBigNum r; + if (!BN_sub(&r, this, BN_value_one())) + throw bignum_error("CBigNum::operator-- : BN_sub failed"); + *this = r; + return *this; + } + + const CBigNum operator--(int) + { + // postfix operator + const CBigNum ret = *this; + --(*this); + return ret; + } + + + friend inline const CBigNum operator-(const CBigNum& a, const CBigNum& b); + friend inline const CBigNum operator/(const CBigNum& a, const CBigNum& b); + friend inline const CBigNum operator%(const CBigNum& a, const CBigNum& b); +}; + + + +inline const CBigNum operator+(const CBigNum& a, const CBigNum& b) +{ + CBigNum r; + if (!BN_add(&r, &a, &b)) + throw bignum_error("CBigNum::operator+ : BN_add failed"); + return r; +} + +inline const CBigNum operator-(const CBigNum& a, const CBigNum& b) +{ + CBigNum r; + if (!BN_sub(&r, &a, &b)) + throw bignum_error("CBigNum::operator- : BN_sub failed"); + return r; +} + +inline const CBigNum operator-(const CBigNum& a) +{ + CBigNum r(a); + BN_set_negative(&r, !BN_is_negative(&r)); + return r; +} + +inline const CBigNum operator*(const CBigNum& a, const CBigNum& b) +{ + CAutoBN_CTX pctx; + CBigNum r; + if (!BN_mul(&r, &a, &b, pctx)) + throw bignum_error("CBigNum::operator* : BN_mul failed"); + return r; +} + +inline const CBigNum operator/(const CBigNum& a, const CBigNum& b) +{ + CAutoBN_CTX pctx; + CBigNum r; + if (!BN_div(&r, NULL, &a, &b, pctx)) + throw bignum_error("CBigNum::operator/ : BN_div failed"); + return r; +} + +inline const CBigNum operator%(const CBigNum& a, const CBigNum& b) +{ + CAutoBN_CTX pctx; + CBigNum r; + if (!BN_mod(&r, &a, &b, pctx)) + throw bignum_error("CBigNum::operator% : BN_div failed"); + return r; +} + +inline const CBigNum operator<<(const CBigNum& a, unsigned int shift) +{ + CBigNum r; + if (!BN_lshift(&r, &a, shift)) + throw bignum_error("CBigNum:operator<< : BN_lshift failed"); + return r; +} + +inline const CBigNum operator>>(const CBigNum& a, unsigned int shift) +{ + CBigNum r = a; + r >>= shift; + return r; +} + +inline bool operator==(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) == 0); } +inline bool operator!=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) != 0); } +inline bool operator<=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) <= 0); } +inline bool operator>=(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) >= 0); } +inline bool operator<(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) < 0); } +inline bool operator>(const CBigNum& a, const CBigNum& b) { return (BN_cmp(&a, &b) > 0); } + +#endif diff --git a/src/bitmark-cli.cpp b/src/bitmark-cli.cpp index b645a22..7c4123b 100644 --- a/src/bitmark-cli.cpp +++ b/src/bitmark-cli.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/bitmark-cli.cpp~ b/src/bitmark-cli.cpp~ new file mode 100644 index 0000000..b752b72 --- /dev/null +++ b/src/bitmark-cli.cpp~ @@ -0,0 +1,88 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 = _("Pfennig Core RPC client version") + " " + FormatFullVersion() + "\n\n" + + _("Usage:") + "\n" + + " pfennig-cli [options] [params] " + _("Send command to Pfennig Core") + "\n" + + " pfennig-cli [options] help " + _("List commands") + "\n" + + " pfennig-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/bitmarkd-res.rc b/src/bitmarkd-res.rc index 32e2558..f13458d 100644 --- a/src/bitmarkd-res.rc +++ b/src/bitmarkd-res.rc @@ -24,7 +24,7 @@ BEGIN 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", "pfennigd.exe" - VALUE "ProductName", "Pfennigd" + VALUE "ProductName", "pfennigd" VALUE "ProductVersion", VER_PRODUCTVERSION_STR END END diff --git a/src/bitmarkd.cpp b/src/bitmarkd.cpp index 20380bf..62042ce 100644 --- a/src/bitmarkd.cpp +++ b/src/bitmarkd.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -64,7 +64,7 @@ bool AppInit(int argc, char* argv[]) // // Parameters // - // If Qt is used, parameters/bitmark.conf are parsed in qt/bitmark.cpp's main() + // If Qt is used, parameters/pfennig.conf are parsed in qt/pfennig.cpp's main() ParseParameters(argc, argv); if (!boost::filesystem::is_directory(GetDataDir(false))) { diff --git a/src/bitmarkd.cpp~ b/src/bitmarkd.cpp~ new file mode 100644 index 0000000..d6f2390 --- /dev/null +++ b/src/bitmarkd.cpp~ @@ -0,0 +1,189 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "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 Bitmark (http://github.com/coinsolidation/bitmark), + * which enables instant payments to anyone, anywhere in the world. Bitmark 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 fShutdown = ShutdownRequested(); + // Tell the main threads to shutdown. + while (!fShutdown) + { + MilliSleep(200); + fShutdown = ShutdownRequested(); + } + if (threadGroup) + { + threadGroup->interrupt_all(); + threadGroup->join_all(); + } +} + +////////////////////////////////////////////////////////////////////////////// +// +// Start +// +bool AppInit(int argc, char* argv[]) +{ + boost::thread_group threadGroup; + boost::thread* detectShutdownThread = NULL; + + bool fRet = false; + try + { + // + // Parameters + // + // If Qt is used, parameters/pfennig.conf are parsed in qt/pfennig.cpp's main() + 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 (mapArgs.count("-?") || mapArgs.count("--help")) + { + // First part of help message is specific to pfennigd / RPC client + std::string strUsage = _("Pfennig Core Daemon") + " " + _("version") + " " + FormatFullVersion() + "\n\n" + + _("Usage:") + "\n" + + " pfennigd [options] " + _("Start Pfennig Core Daemon") + "\n" + + _("Usage (deprecated, use pfennig-cli):") + "\n" + + " pfennigd [options] [params] " + _("Send command to Pfennig Core") + "\n" + + " pfennigd [options] help " + _("List commands") + "\n" + + " pfennigd [options] help " + _("Get help for a command") + "\n"; + + strUsage += "\n" + HelpMessage(HMM_BITMARKD); + 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], "bitmark:")) + fCommandLine = true; + + if (fCommandLine) + { + int ret = CommandLineRPC(argc, argv); + exit(ret); + } +#ifndef WIN32 + fDaemon = GetBoolArg("-daemon", false); + if (fDaemon) + { + fprintf(stdout, "Pfennig server starting\n"); + + // Daemonize + pid_t pid = fork(); + if (pid < 0) + { + fprintf(stderr, "Error: fork() returned %d errno %d\n", pid, errno); + return false; + } + if (pid > 0) // Parent process, pid is child process id + { + CreatePidFile(GetPidFile(), pid); + return true; + } + // Child process falls through to rest of initialization + + pid_t sid = setsid(); + if (sid < 0) + 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); + } + catch (std::exception& e) { + PrintExceptionContinue(&e, "AppInit()"); + } catch (...) { + PrintExceptionContinue(NULL, "AppInit()"); + } + + 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) + { + detectShutdownThread->join(); + delete detectShutdownThread; + detectShutdownThread = NULL; + } + Shutdown(); + + return fRet; +} + +int main(int argc, char* argv[]) +{ + SetupEnvironment(); + + bool fRet = false; + + // Connect pfennigd signal handlers + noui_connect(); + + fRet = AppInit(argc, argv); + + if (fRet && fDaemon) + return 0; + + return (fRet ? 0 : 1); +} diff --git a/src/bloom.cpp b/src/bloom.cpp index feb5037..50e48bf 100644 --- a/src/bloom.cpp +++ b/src/bloom.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/bloom.cpp~ b/src/bloom.cpp~ new file mode 100644 index 0000000..904b5a6 --- /dev/null +++ b/src/bloom.cpp~ @@ -0,0 +1,183 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "core.h" +#include "script.h" + +#include +#include + +#define LN2SQUARED 0.4804530139182014246671025263266649717305529515945455 +#define LN2 0.6931471805599453094172321214581765680755001343602552 + +using namespace std; + +CBloomFilter::CBloomFilter(unsigned int nElements, double nFPRate, unsigned int nTweakIn, unsigned char nFlagsIn) : +// The ideal size for a bloom filter with a given number of elements and false positive rate is: +// - nElements * log(fp rate) / ln(2)^2 +// We ignore filter parameters which will create a bloom filter larger than the protocol limits +vData(min((unsigned int)(-1 / LN2SQUARED * nElements * log(nFPRate)), MAX_BLOOM_FILTER_SIZE * 8) / 8), +// The ideal number of hash functions is filter size * ln(2) / number of elements +// Again, we ignore filter parameters which will create a bloom filter with more hash functions than the protocol limits +// See 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) +{ +} + +inline unsigned int CBloomFilter::Hash(unsigned int nHashNum, const std::vector& vDataToHash) const +{ + // 0xFBA4C795 chosen as it guarantees a reasonable bit difference between nHashNum values. + return MurmurHash3(nHashNum * 0xFBA4C795 + nTweak, vDataToHash) % (vData.size() * 8); +} + +void CBloomFilter::insert(const vector& vKey) +{ + 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] |= (1 << (7 & nIndex)); + } + isEmpty = false; +} + +void CBloomFilter::insert(const COutPoint& outpoint) +{ + CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); + stream << outpoint; + vector data(stream.begin(), stream.end()); + insert(data); +} + +void CBloomFilter::insert(const uint256& hash) +{ + vector data(hash.begin(), hash.end()); + insert(data); +} + +bool CBloomFilter::contains(const vector& vKey) const +{ + 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] & (1 << (7 & nIndex)))) + return false; + } + return true; +} + +bool CBloomFilter::contains(const COutPoint& outpoint) const +{ + CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); + stream << outpoint; + vector data(stream.begin(), stream.end()); + return contains(data); +} + +bool CBloomFilter::contains(const uint256& hash) const +{ + vector data(hash.begin(), hash.end()); + return contains(data); +} + +bool CBloomFilter::IsWithinSizeConstraints() const +{ + return vData.size() <= MAX_BLOOM_FILTER_SIZE && nHashFuncs <= MAX_HASH_FUNCS; +} + +bool CBloomFilter::IsRelevantAndUpdate(const CTransaction& tx, const uint256& hash) +{ + 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; + + for (unsigned int i = 0; i < tx.vout.size(); i++) + { + const CTxOut& txout = tx.vout[i]; + // Match if the filter contains any arbitrary script data element in any scriptPubKey in tx + // If this matches, also add the specific output that was matched. + // This means clients don't have to update the filter themselves when a new relevant tx + // is discovered in order to find spending transactions, which avoids round-tripping and race conditions. + CScript::const_iterator pc = txout.scriptPubKey.begin(); + vector data; + while (pc < txout.scriptPubKey.end()) + { + opcodetype opcode; + if (!txout.scriptPubKey.GetOp(pc, opcode, data)) + break; + if (data.size() != 0 && contains(data)) + { + fFound = true; + if ((nFlags & BLOOM_UPDATE_MASK) == BLOOM_UPDATE_ALL) + insert(COutPoint(hash, i)); + else if ((nFlags & BLOOM_UPDATE_MASK) == BLOOM_UPDATE_P2PUBKEY_ONLY) + { + txnouttype type; + vector > vSolutions; + if (Solver(txout.scriptPubKey, type, vSolutions) && + (type == TX_PUBKEY || type == TX_MULTISIG)) + insert(COutPoint(hash, i)); + } + break; + } + } + } + + if (fFound) + return true; + + BOOST_FOREACH(const CTxIn& txin, tx.vin) + { + // Match if the filter contains an outpoint tx spends + if (contains(txin.prevout)) + return true; + + // Match if the filter contains any arbitrary script data element in any scriptSig in tx + CScript::const_iterator pc = txin.scriptSig.begin(); + vector data; + while (pc < txin.scriptSig.end()) + { + opcodetype opcode; + if (!txin.scriptSig.GetOp(pc, opcode, data)) + break; + if (data.size() != 0 && contains(data)) + return true; + } + } + + 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 4e9d064..1cf727a 100644 --- a/src/bloom.h +++ b/src/bloom.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/bloom.h~ b/src/bloom.h~ new file mode 100644 index 0000000..a4f8d96 --- /dev/null +++ b/src/bloom.h~ @@ -0,0 +1,93 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_BLOOM_H +#define BITMARK_BLOOM_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 +static const unsigned int MAX_HASH_FUNCS = 50; + +// First two bits of nFlags control how much IsRelevantAndUpdate actually updates +// The remaining bits are reserved +enum bloomflags +{ + BLOOM_UPDATE_NONE = 0, + BLOOM_UPDATE_ALL = 1, + // Only adds outpoints to the filter if the output is a pay-to-pubkey/pay-to-multisig script + BLOOM_UPDATE_P2PUBKEY_ONLY = 2, + BLOOM_UPDATE_MASK = 3, +}; + +/** + * BloomFilter is a probabilistic filter which SPV clients provide + * so that we can filter the transactions we sends them. + * + * This allows for significantly more efficient transaction and block downloads. + * + * Because bloom filters are probabilistic, an SPV node can increase the false- + * positive rate, making us send them transactions which aren't actually theirs, + * allowing clients to trade more bandwidth for more privacy by obfuscating which + * keys are owned by them. + */ +class CBloomFilter +{ +private: + std::vector vData; + bool isFull; + bool isEmpty; + unsigned int nHashFuncs; + unsigned int nTweak; + unsigned char nFlags; + + unsigned int Hash(unsigned int nHashNum, const std::vector& vDataToHash) const; + +public: + // Creates a new bloom filter which will provide the given fp rate when filled with the given number of elements + // Note that if the given parameters will result in a filter outside the bounds of the protocol limits, + // the filter created will be as close to the given parameters as possible within the protocol limits. + // This will apply if nFPRate is very low or nElements is unreasonably high. + // nTweak is a constant which is added to the seed value passed to the hash function + // 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); + CBloomFilter() : isFull(true) {} + + IMPLEMENT_SERIALIZE + ( + READWRITE(vData); + READWRITE(nHashFuncs); + READWRITE(nTweak); + READWRITE(nFlags); + ) + + void insert(const std::vector& vKey); + void insert(const COutPoint& outpoint); + void insert(const uint256& hash); + + bool contains(const std::vector& vKey) const; + bool contains(const COutPoint& outpoint) const; + bool contains(const uint256& hash) const; + + // True if the size is <= MAX_BLOOM_FILTER_SIZE and the number of hash functions is <= MAX_HASH_FUNCS + // (catch a filter which was just deserialized which was too big) + bool IsWithinSizeConstraints() const; + + // 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 /* BITMARK_BLOOM_H */ diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 19cf74f..3cc2a97 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -21,7 +21,7 @@ using namespace boost::assign; unsigned int pnSeed[] = { - 0xac1f1f2a // replace this with your own networks fixed seed nodes + 0x2578a0d5 // replace this with your own networks fixed seed nodes }; class CMainParams : public CChainParams { @@ -30,42 +30,43 @@ class CMainParams : public CChainParams { // 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] = 0xf9; - pchMessageStart[1] = 0xbe; - pchMessageStart[2] = 0xb4; - pchMessageStart[3] = 0xd9; + pchMessageStart[0] = 0xfb; + pchMessageStart[1] = 0xc0; + pchMessageStart[2] = 0xb6; + pchMessageStart[3] = 0xdb; vAlertPubKey = ParseHex("04fc9702847840aaf195de8442ebecedf5b095cdbb9bc716bda9110971b28a49e0ead8564ff0db22209e0374782c093bb899692d524e9d6a6956e7c5ecbcd68284"); nDefaultPort = P2PPORT; nRPCPort = RPCPORT; - bnProofOfWorkLimit = CBigNum(~uint256(0) >> 32); - nSubsidyHalvingInterval = 788000; + bnProofOfWorkLimit = CBigNum(~uint256(0) >> 20); + nSubsidyHalvingInterval = 840000; // Build the genesis block. - const char* pszTimestamp = "NEW PFENNIG GENESIS"; + const char* pszTimestamp = "18.12.2014 gamerscoinv3 born"; CTransaction txNew; txNew.vin.resize(1); txNew.vout.resize(1); txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << vector((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp)); - txNew.vout[0].nValue = 20 * COIN; - txNew.vout[0].scriptPubKey = CScript() << ParseHex("04f88a76429dad346a10ecb5d36fcbf50bc2e009870e20c1a6df8db743e0b994afc1f91e079be8acc380b0ee7765519906e3d781519e9db48259f64160104939d8") << OP_CHECKSIG; + txNew.vout[0].nValue = 50 * COIN; + txNew.vout[0].scriptPubKey = CScript() << ParseHex("040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9") << OP_CHECKSIG; genesis.vtx.push_back(txNew); genesis.hashPrevBlock = 0; genesis.hashMerkleRoot = genesis.BuildMerkleTree(); genesis.nVersion = 1; - genesis.nTime = 1405274442; - genesis.nBits = bnProofOfWorkLimit.GetCompact(); - genesis.nNonce = 0; + genesis.nTime = 1392757140; + genesis.nBits = 0x1e0ffff0; + genesis.nNonce = 2084565393; hashGenesisBlock = genesis.GetHash(); - //assert(hashGenesisBlock == uint256("0xc1fb746e87e89ae75bdec2ef0639a1f6786744639ce3d0ece1dcf979b79137cb")); + // assert(genesis.hashMerkleRoot == uint256("0xd849db99a14164f4b4c8ad6d2d8d7e2b1ba7f89963e9f4bf9fad5ff1a4754429")); + // assert(hashGenesisBlock == uint256("0x91ec5f25ee9a0ffa1af7d4da4db9a552228dd2dc77cdb15b738be4e1f55f30ee")); // todo add more dns seeders - vSeeds.push_back(CDNSSeedData("pfennig.co", "seed.pgennif.co")); + vSeeds.push_back(CDNSSeedData("pfennig.co", "seeds.pfennig.co")); - base58Prefixes[PUBKEY_ADDRESS] = list_of(85); // b + base58Prefixes[PUBKEY_ADDRESS] = list_of(38); // b base58Prefixes[SCRIPT_ADDRESS] = list_of(5); - base58Prefixes[SECRET_KEY] = list_of(73); // B + base58Prefixes[SECRET_KEY] = list_of(166); // B base58Prefixes[EXT_PUBLIC_KEY] = list_of(0x04)(0x88)(0xB2)(0x1E); base58Prefixes[EXT_SECRET_KEY] = list_of(0x04)(0x88)(0xAD)(0xE4); @@ -107,7 +108,7 @@ class CTestNetParams : 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. - + // TODO: PFG TestNet // Testnet Genesis has a lower difficulty pchMessageStart[0] = 0x0b; pchMessageStart[1] = 0x11; @@ -119,9 +120,9 @@ class CTestNetParams : public CMainParams { bnProofOfWorkLimit = CBigNum(~uint256(0) >> 20); strDataDir = "testnet3"; - genesis.nTime = 1405274408; + genesis.nTime = 1392757140; genesis.nBits = bnProofOfWorkLimit.GetCompact(); - genesis.nNonce = 0; + genesis.nNonce = 2084565393; hashGenesisBlock = genesis.GetHash(); //assert(hashGenesisBlock == uint256("0x1d6329aeff3ff6786635afd5d6715b24667329cfda199bd7a1d6626d81a4573c")); @@ -129,9 +130,9 @@ class CTestNetParams : public CMainParams { vSeeds.clear(); vSeeds.push_back(CDNSSeedData("pfennig.co", "test.pfennig.co")); - base58Prefixes[PUBKEY_ADDRESS] = list_of(130); // u + base58Prefixes[PUBKEY_ADDRESS] = list_of(111); base58Prefixes[SCRIPT_ADDRESS] = list_of(196); - base58Prefixes[SECRET_KEY] = list_of(185); // U + 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); } diff --git a/src/chainparams.cpp~ b/src/chainparams.cpp~ new file mode 100644 index 0000000..d9190ba --- /dev/null +++ b/src/chainparams.cpp~ @@ -0,0 +1,211 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "assert.h" +#include "core.h" +#include "protocol.h" +#include "util.h" + +#include + +using namespace boost::assign; + +// +// Main network +// + +unsigned int pnSeed[] = +{ + 0x2578a0d5 // replace this with your own networks fixed seed nodes +}; + +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] = 0xfb; + pchMessageStart[1] = 0xc0; + pchMessageStart[2] = 0xb6; + pchMessageStart[3] = 0xdb; + vAlertPubKey = ParseHex("04fc9702847840aaf195de8442ebecedf5b095cdbb9bc716bda9110971b28a49e0ead8564ff0db22209e0374782c093bb899692d524e9d6a6956e7c5ecbcd68284"); + nDefaultPort = P2PPORT; + nRPCPort = RPCPORT; + bnProofOfWorkLimit = CBigNum(~uint256(0) >> 20); + nSubsidyHalvingInterval = 840000; + + // Build the genesis block. + const char* pszTimestamp = "18.12.2014 gamerscoinv3 born"; + CTransaction txNew; + txNew.vin.resize(1); + txNew.vout.resize(1); + txNew.vin[0].scriptSig = CScript() << 486604799 << CScriptNum(4) << vector((const unsigned char*)pszTimestamp, (const unsigned char*)pszTimestamp + strlen(pszTimestamp)); + txNew.vout[0].nValue = 50 * COIN; + txNew.vout[0].scriptPubKey = CScript() << ParseHex("040184710fa689ad5023690c80f3a49c8f13f8d45b8c857fbcbc8bc4a8e4d3eb4b10f4d4604fa08dce601aaf0f470216fe1b51850b4acf21b179c45070ac7b03a9") << OP_CHECKSIG; + genesis.vtx.push_back(txNew); + genesis.hashPrevBlock = 0; + genesis.hashMerkleRoot = genesis.BuildMerkleTree(); + genesis.nVersion = 1; + genesis.nTime = 1392757140; + genesis.nBits = 0x1e0ffff0; + genesis.nNonce = 2084565393; + + hashGenesisBlock = genesis.GetHash(); + + // assert(genesis.hashMerkleRoot == uint256("0xd849db99a14164f4b4c8ad6d2d8d7e2b1ba7f89963e9f4bf9fad5ff1a4754429")); + // assert(hashGenesisBlock == uint256("0x91ec5f25ee9a0ffa1af7d4da4db9a552228dd2dc77cdb15b738be4e1f55f30ee")); + + // todo add more dns seeders + vSeeds.push_back(CDNSSeedData("pfennig.co", "seeds.pfennig.co")); + + base58Prefixes[PUBKEY_ADDRESS] = list_of(38); // b + base58Prefixes[SCRIPT_ADDRESS] = list_of(5); + base58Prefixes[SECRET_KEY] = list_of(166); // B + 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' 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(nOneWeek) - nOneWeek; + vFixedSeeds.push_back(addr); + } + } + + virtual const CBlock& GenesisBlock() const { return genesis; } + virtual Network NetworkID() const { return CChainParams::MAIN; } + + virtual const vector& FixedSeeds() const { + return vFixedSeeds; + } +protected: + CBlock genesis; + vector vFixedSeeds; +}; +static CMainParams mainParams; + + +// +// Testnet (v3) +// +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. + // TODO: PFG TestNet + // Testnet Genesis has a lower difficulty + pchMessageStart[0] = 0x0b; + pchMessageStart[1] = 0x11; + pchMessageStart[2] = 0x09; + pchMessageStart[3] = 0x07; + vAlertPubKey = ParseHex("04302390343f91cc401d56d68b123028bf52e5fca1939df127f63c6467cdf9c8e2c14b61104cf817d0b780da337893ecc4aaff1309e536162dabbdb45200ca2b0a"); + nDefaultPort = 1P2PPORT; + nRPCPort = 1RPCPORT; + bnProofOfWorkLimit = CBigNum(~uint256(0) >> 20); + strDataDir = "testnet3"; + + genesis.nTime = 1392757140; + genesis.nBits = bnProofOfWorkLimit.GetCompact(); + genesis.nNonce = 2084565393; + hashGenesisBlock = genesis.GetHash(); + //assert(hashGenesisBlock == uint256("0x1d6329aeff3ff6786635afd5d6715b24667329cfda199bd7a1d6626d81a4573c")); + + vFixedSeeds.clear(); + vSeeds.clear(); + vSeeds.push_back(CDNSSeedData("pfennig.co", "test.pfennig.co")); + + base58Prefixes[PUBKEY_ADDRESS] = list_of(111); + base58Prefixes[SCRIPT_ADDRESS] = list_of(196); + 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; } +}; +static CTestNetParams testNetParams; + + +// +// Regression test +// +class CRegTestParams : public CTestNetParams { +public: + CRegTestParams() { + pchMessageStart[0] = 0xfa; + pchMessageStart[1] = 0xbf; + pchMessageStart[2] = 0xb5; + pchMessageStart[3] = 0xda; + nSubsidyHalvingInterval = 150; + bnProofOfWorkLimit = CBigNum(~uint256(0) >> 1); + genesis.nTime = 1405274400; + genesis.nBits = bnProofOfWorkLimit.GetCompact(); + genesis.nNonce = 0; + hashGenesisBlock = genesis.GetHash(); + nDefaultPort = 18444; + strDataDir = "regtest"; + //assert(hashGenesisBlock == uint256("0x0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")); + + vSeeds.clear(); // Regtest mode doesn't have any DNS seeds. + } + + virtual bool RequireRPCPassword() const { return false; } + virtual Network NetworkID() const { return CChainParams::REGTEST; } +}; +static CRegTestParams regTestParams; + +static CChainParams *pCurrentParams = &mainParams; + +const CChainParams &Params() { + return *pCurrentParams; +} + +void SelectParams(CChainParams::Network network) { + switch (network) { + case CChainParams::MAIN: + pCurrentParams = &mainParams; + break; + case CChainParams::TESTNET: + pCurrentParams = &testNetParams; + break; + case CChainParams::REGTEST: + pCurrentParams = ®TestParams; + break; + default: + assert(false && "Unimplemented network"); + return; + } +} + +bool SelectParamsFromCommandLine() { + bool fRegTest = GetBoolArg("-regtest", false); + bool fTestNet = GetBoolArg("-testnet", false); + + if (fTestNet && fRegTest) { + return false; + } + + if (fRegTest) { + SelectParams(CChainParams::REGTEST); + } else if (fTestNet) { + SelectParams(CChainParams::TESTNET); + } else { + SelectParams(CChainParams::MAIN); + } + return true; +} diff --git a/src/chainparams.h b/src/chainparams.h index fb13ce4..53f8393 100644 --- a/src/chainparams.h +++ b/src/chainparams.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/chainparams.h~ b/src/chainparams.h~ new file mode 100644 index 0000000..d1bcd6e --- /dev/null +++ b/src/chainparams.h~ @@ -0,0 +1,111 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_CHAIN_PARAMS_H +#define BITMARK_CHAIN_PARAMS_H + +#include "bignum.h" +#include "uint256.h" + +#include + +using namespace std; + +#define MESSAGE_START_SIZE 4 +typedef unsigned char MessageStartChars[MESSAGE_START_SIZE]; + +class CAddress; +class CBlock; + +struct CDNSSeedData { + string name, host; + CDNSSeedData(const string &strName, const string &strHost) : name(strName), host(strHost) {} +}; + +/** + * CChainParams defines various tweakable parameters of a given instance of the + * Bitmark system. There are three: the main network on which people trade goods + * and services, the public test network which gets reset from time to time and + * a regression test mode which is intended for private networks only. It has + * minimal difficulty to ensure that blocks can be found instantly. + */ +class CChainParams +{ +public: + enum Network { + MAIN, + TESTNET, + REGTEST, + + MAX_NETWORK_TYPES + }; + + enum Base58Type { + PUBKEY_ADDRESS, + SCRIPT_ADDRESS, + SECRET_KEY, + EXT_PUBLIC_KEY, + EXT_SECRET_KEY, + + MAX_BASE58_TYPES + }; + + const uint256& HashGenesisBlock() const { return hashGenesisBlock; } + const MessageStartChars& MessageStart() const { return pchMessageStart; } + const vector& AlertKey() const { return vAlertPubKey; } + int GetDefaultPort() const { return nDefaultPort; } + const CBigNum& ProofOfWorkLimit() const { return bnProofOfWorkLimit; } + int SubsidyHalvingInterval() const { return nSubsidyHalvingInterval; } + int SubsidyInterimInterval() const { return nSubsidyHalvingInterval/2; } + virtual const CBlock& GenesisBlock() const = 0; + virtual bool RequireRPCPassword() const { return true; } + const string& DataDir() const { return strDataDir; } + virtual Network NetworkID() const = 0; + const vector& DNSSeeds() const { return vSeeds; } + const std::vector &Base58Prefix(Base58Type type) const { return base58Prefixes[type]; } + virtual const vector& FixedSeeds() const = 0; + int RPCPort() const { return nRPCPort; } +protected: + CChainParams() {} + + uint256 hashGenesisBlock; + MessageStartChars pchMessageStart; + // Raw pub key bytes for the broadcast alert signing key. + vector vAlertPubKey; + int nDefaultPort; + int nRPCPort; + CBigNum bnProofOfWorkLimit; + int nSubsidyHalvingInterval; + string strDataDir; + vector vSeeds; + std::vector base58Prefixes[MAX_BASE58_TYPES]; +}; + +/** + * Return the currently selected parameters. This won't change after app startup + * outside of the unit tests. + */ +const CChainParams &Params(); + +/** Sets the params returned by Params() to those for the given network. */ +void SelectParams(CChainParams::Network network); + +/** + * Looks for -regtest or -testnet and then calls SelectParams as appropriate. + * Returns false if an invalid combination is given. + */ +bool SelectParamsFromCommandLine(); + +inline bool TestNet() { + // Note: it's deliberate that this returns "false" for regression test mode. + 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 baada2d..956144e 100644 --- a/src/checkpoints.cpp +++ b/src/checkpoints.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -40,14 +40,21 @@ namespace Checkpoints // + Contains no strange transactions static MapCheckpoints mapCheckpoints = boost::assign::map_list_of - ( 0, uint256("d2fb746e87e89ae75bdec2ef0639a1f6786744639ce3d0ece1dcf979b79137cb")) + ( 0, uint256("91ec5f25ee9a0ffa1af7d4da4db9a552228dd2dc77cdb15b738be4e1f55f30ee")) + ( 200000, uint256("de74a3c66dc0787700c0e1fdfc8f9e41e5046fe3845cb2c2d2ac668bd6636942")) + ( 400000, uint256("fef151d04ff68b9c004407d1481d446d9bab2d4d6ef2e0f59fc35b4922359d77")) + ( 600000, uint256("f5e62257c7320aad29804ff540feda6968e0b5ea554ef717c90b891a0620c184")) + ( 800000, uint256("a419226ddf647352adc2b4ff769d98b11eda8438dbb7e8a88fbed4ab763f9908")) + ( 1000000, uint256("b3d2c4dcd5fb752fc552659b69986512836d3b9ea8876e2b412330b27a404c53")) + ( 1050000, uint256("6fc07beba9589eb986584f69f8574bc4bbf27b97570511ff984b639d7de2ce70")) // POST FORK + ( 1096772, uint256("3dd493ea7be808f7fb60af5ea90d6ce4a56c34dc92affefea267d082af8b24d8")) // POST KGW ; static const CCheckpointData data = { &mapCheckpoints, - 1400000000, // * UNIX timestamp of last checkpoint block - 2000, // * total number of transactions between genesis and last checkpoint + 1433172793, // * UNIX timestamp of last checkpoint block + 1348692, // * total number of transactions between genesis and last checkpoint // (the tx=... number in the SetBestChain debug.log lines) - 200.0 // * estimated number of transactions per day after checkpoint + 1000.0 // * estimated number of transactions per day after checkpoint }; static MapCheckpoints mapCheckpointsTestnet = diff --git a/src/checkpoints.cpp~ b/src/checkpoints.cpp~ new file mode 100644 index 0000000..90e2227 --- /dev/null +++ b/src/checkpoints.cpp~ @@ -0,0 +1,161 @@ +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "checkpoints.h" + +#include "main.h" +#include "uint256.h" + +#include + +#include // for 'map_list_of()' +#include + +namespace Checkpoints +{ + typedef std::map MapCheckpoints; + + // How many times we expect transactions after the last checkpoint to + // be slower. This number is a compromise, as it can't be accurate for + // every system. When reindexing from a fast disk with a slow CPU, it + // can be up to 20, while when downloading from a slow network with a + // fast multicore CPU, it won't be much higher than 1. + static const double SIGCHECK_VERIFICATION_FACTOR = 5.0; + + struct CCheckpointData { + const MapCheckpoints *mapCheckpoints; + int64_t nTimeLastCheckpoint; + int64_t nTransactionsLastCheckpoint; + double fTransactionsPerDay; + }; + + bool fEnabled = true; + + // What makes a good checkpoint block? + // + Is surrounded by blocks with reasonable timestamps + // (no blocks before with a timestamp after, none after with + // timestamp before) + // + Contains no strange transactions + static MapCheckpoints mapCheckpoints = + boost::assign::map_list_of + ( 0, uint256("91ec5f25ee9a0ffa1af7d4da4db9a552228dd2dc77cdb15b738be4e1f55f30ee")) + ( 200000, uint256("de74a3c66dc0787700c0e1fdfc8f9e41e5046fe3845cb2c2d2ac668bd6636942")) + ( 400000, uint256("fef151d04ff68b9c004407d1481d446d9bab2d4d6ef2e0f59fc35b4922359d77")) + ( 600000, uint256("f5e62257c7320aad29804ff540feda6968e0b5ea554ef717c90b891a0620c184")) + ( 800000, uint256("a419226ddf647352adc2b4ff769d98b11eda8438dbb7e8a88fbed4ab763f9908")) + ( 1000000, uint256("b3d2c4dcd5fb752fc552659b69986512836d3b9ea8876e2b412330b27a404c53")) + ( 1050000, uint256("6fc07beba9589eb986584f69f8574bc4bbf27b97570511ff984b639d7de2ce70")) // POST FORK + ( 1096772, uint256("3dd493ea7be808f7fb60af5ea90d6ce4a56c34dc92affefea267d082af8b24d8")) // POST KGW + ; + static const CCheckpointData data = { + &mapCheckpoints, + 1433172793, // * UNIX timestamp of last checkpoint block + 1348692, // * total number of transactions between genesis and last checkpoint + // (the tx=... number in the SetBestChain debug.log lines) + 1000.0 // * estimated number of transactions per day after checkpoint + }; + + static MapCheckpoints mapCheckpointsTestnet = + boost::assign::map_list_of + ( 0, uint256("2d6329aeff3ff6786635afd5d6715b24667329cfda199bd7a1d6626d81a4573c")) + ; + static const CCheckpointData dataTestnet = { + &mapCheckpointsTestnet, + 1400000000, + 0, + 300 + }; + + static MapCheckpoints mapCheckpointsRegtest = + boost::assign::map_list_of + ( 0, uint256("0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")) + ; + static const CCheckpointData dataRegtest = { + &mapCheckpointsRegtest, + 0, + 0, + 0 + }; + + const CCheckpointData &Checkpoints() { + if (Params().NetworkID() == CChainParams::TESTNET) + return dataTestnet; + else if (Params().NetworkID() == CChainParams::MAIN) + return data; + else + return dataRegtest; + } + + bool CheckBlock(int nHeight, const uint256& hash) + { + if (!fEnabled) + return true; + + const MapCheckpoints& checkpoints = *Checkpoints().mapCheckpoints; + + MapCheckpoints::const_iterator i = checkpoints.find(nHeight); + if (i == checkpoints.end()) return true; + return hash == i->second; + } + + // Guess how far we are in the verification process at the given block index + double GuessVerificationProgress(CBlockIndex *pindex, bool fSigchecks) { + if (pindex==NULL) + return 0.0; + + 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 checkpoint, and + // fSigcheckVerificationFactor per transaction after. + + const CCheckpointData &data = Checkpoints(); + + if (pindex->nChainTx <= data.nTransactionsLastCheckpoint) { + double nCheapBefore = pindex->nChainTx; + double nCheapAfter = data.nTransactionsLastCheckpoint - pindex->nChainTx; + double nExpensiveAfter = (nNow - data.nTimeLastCheckpoint)/86400.0*data.fTransactionsPerDay; + fWorkBefore = nCheapBefore; + fWorkAfter = nCheapAfter + nExpensiveAfter*fSigcheckVerificationFactor; + } else { + double nCheapBefore = data.nTransactionsLastCheckpoint; + double nExpensiveBefore = pindex->nChainTx - data.nTransactionsLastCheckpoint; + double nExpensiveAfter = (nNow - pindex->nTime)/86400.0*data.fTransactionsPerDay; + fWorkBefore = nCheapBefore + nExpensiveBefore*fSigcheckVerificationFactor; + fWorkAfter = nExpensiveAfter*fSigcheckVerificationFactor; + } + + return fWorkBefore / (fWorkBefore + fWorkAfter); + } + + int GetTotalBlocksEstimate() + { + if (!fEnabled) + return 0; + + const MapCheckpoints& checkpoints = *Checkpoints().mapCheckpoints; + + return checkpoints.rbegin()->first; + } + + CBlockIndex* GetLastCheckpoint(const std::map& mapBlockIndex) + { + if (!fEnabled) + return NULL; + + const MapCheckpoints& checkpoints = *Checkpoints().mapCheckpoints; + + BOOST_REVERSE_FOREACH(const MapCheckpoints::value_type& i, checkpoints) + { + const uint256& hash = i.second; + std::map::const_iterator t = mapBlockIndex.find(hash); + if (t != mapBlockIndex.end()) + return t->second; + } + return NULL; + } +} diff --git a/src/checkpoints.h b/src/checkpoints.h index a6ca74f..6625f95 100644 --- a/src/checkpoints.h +++ b/src/checkpoints.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/checkpoints.h~ b/src/checkpoints.h~ new file mode 100644 index 0000000..6edef88 --- /dev/null +++ b/src/checkpoints.h~ @@ -0,0 +1,33 @@ +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_CHECKPOINT_H +#define BITMARK_CHECKPOINT_H + +#include + +class CBlockIndex; +class uint256; + +/** Block-chain checkpoints are compiled-in sanity checks. + * They are updated every release or three. + */ +namespace Checkpoints +{ + // Returns true if block passes checkpoint checks + bool CheckBlock(int nHeight, const uint256& hash); + + // Return conservative estimate of total number of blocks, 0 if unknown + int GetTotalBlocksEstimate(); + + // Returns last CBlockIndex* in mapBlockIndex that is a checkpoint + CBlockIndex* GetLastCheckpoint(const std::map& mapBlockIndex); + + double GuessVerificationProgress(CBlockIndex *pindex, bool fSigchecks = true); + + extern bool fEnabled; +} + +#endif diff --git a/src/checkqueue.h b/src/checkqueue.h index 1d23019..aaeb462 100644 --- a/src/checkqueue.h +++ b/src/checkqueue.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/checkqueue.h~ b/src/checkqueue.h~ new file mode 100644 index 0000000..22009b7 --- /dev/null +++ b/src/checkqueue.h~ @@ -0,0 +1,195 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +template class CCheckQueueControl; + +/** Queue for verifications that have to be performed. + * The verifications are represented by a type T, which must provide an + * operator(), returning a bool. + * + * One thread (the master) is assumed to push batches of verifications + * onto the queue, where they are processed by N-1 worker threads. When + * the master is done adding work, it temporarily joins the worker pool + * as an N'th worker, until all jobs are done. + */ +template class CCheckQueue { +private: + // Mutex to protect the inner state + boost::mutex mutex; + + // Worker threads block on this when out of work + boost::condition_variable condWorker; + + // Master thread blocks on this when out of work + boost::condition_variable condMaster; + + // The queue of elements to be processed. + // As the order of booleans doesn't matter, it is used as a LIFO (stack) + std::vector queue; + + // The number of workers (including the master) that are idle. + int nIdle; + + // The total number of workers (including the master). + int nTotal; + + // The temporary evaluation result. + bool fAllOk; + + // Number of verifications that haven't completed yet. + // This includes elements that are not anymore in queue, but still in + // worker's own batches. + unsigned int nTodo; + + // Whether we're shutting down. + bool fQuit; + + // The maximum number of elements to be processed in one batch + unsigned int nBatchSize; + + // Internal function that does bulk of the verification work. + bool Loop(bool fMaster = false) { + boost::condition_variable &cond = fMaster ? condMaster : condWorker; + std::vector vChecks; + vChecks.reserve(nBatchSize); + unsigned int nNow = 0; + bool fOk = true; + do { + { + boost::unique_lock lock(mutex); + // first do the clean-up of the previous loop run (allowing us to do it in the same critsect) + if (nNow) { + fAllOk &= fOk; + nTodo -= nNow; + if (nTodo == 0 && !fMaster) + // We processed the last element; inform the master he can exit and return the result + condMaster.notify_one(); + } else { + // first iteration + nTotal++; + } + // logically, the do loop starts here + while (queue.empty()) { + if ((fMaster || fQuit) && nTodo == 0) { + nTotal--; + bool fRet = fAllOk; + // reset the status for new work later + if (fMaster) + fAllOk = true; + // return the current status + return fRet; + } + nIdle++; + cond.wait(lock); // wait + nIdle--; + } + // Decide how many work units to process now. + // * Do not try to do everything at once, but aim for increasingly smaller batches so + // all workers finish approximately simultaneously. + // * Try to account for idle jobs which will instantly start helping. + // * Don't do batches smaller than 1 (duh), or larger than nBatchSize. + nNow = std::max(1U, std::min(nBatchSize, (unsigned int)queue.size() / (nTotal + nIdle + 1))); + vChecks.resize(nNow); + for (unsigned int i = 0; i < nNow; i++) { + // We want the lock on the mutex to be as short as possible, so swap jobs from the global + // queue to the local batch vector instead of copying. + vChecks[i].swap(queue.back()); + queue.pop_back(); + } + // Check whether we need to do work at all + fOk = fAllOk; + } + // execute work + BOOST_FOREACH(T &check, vChecks) + if (fOk) + fOk = check(); + vChecks.clear(); + } while(true); + } + +public: + // Create a new check queue + CCheckQueue(unsigned int nBatchSizeIn) : + nIdle(0), nTotal(0), fAllOk(true), nTodo(0), fQuit(false), nBatchSize(nBatchSizeIn) {} + + // Worker thread + void Thread() { + Loop(); + } + + // Wait until execution finishes, and return whether all evaluations where succesful. + bool Wait() { + return Loop(true); + } + + // Add a batch of checks to the queue + void Add(std::vector &vChecks) { + boost::unique_lock lock(mutex); + BOOST_FOREACH(T &check, vChecks) { + queue.push_back(T()); + check.swap(queue.back()); + } + nTodo += vChecks.size(); + if (vChecks.size() == 1) + condWorker.notify_one(); + else if (vChecks.size() > 1) + condWorker.notify_all(); + } + + ~CCheckQueue() { + } + + friend class CCheckQueueControl; +}; + +/** RAII-style controller object for a CCheckQueue that guarantees the passed + * queue is finished before continuing. + */ +template class CCheckQueueControl { +private: + CCheckQueue *pqueue; + bool fDone; + +public: + CCheckQueueControl(CCheckQueue *pqueueIn) : pqueue(pqueueIn), fDone(false) { + // passed queue is supposed to be unused, or NULL + if (pqueue != NULL) { + assert(pqueue->nTotal == pqueue->nIdle); + assert(pqueue->nTodo == 0); + assert(pqueue->fAllOk == true); + } + } + + bool Wait() { + if (pqueue == NULL) + return true; + bool fRet = pqueue->Wait(); + fDone = true; + return fRet; + } + + void Add(std::vector &vChecks) { + if (pqueue != NULL) + pqueue->Add(vChecks); + } + + ~CCheckQueueControl() { + if (!fDone) + Wait(); + } +}; + +#endif diff --git a/src/clientversion.h b/src/clientversion.h index 519ce88..abde298 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -12,7 +12,7 @@ #define CLIENT_VERSION_MAJOR 0 #define CLIENT_VERSION_MINOR 9 #define CLIENT_VERSION_REVISION 4 -#define CLIENT_VERSION_BUILD 0 +#define CLIENT_VERSION_BUILD 5 // Set to true for release, false for prerelease or test build #define CLIENT_VERSION_IS_RELEASE true diff --git a/src/clientversion.h~ b/src/clientversion.h~ new file mode 100644 index 0000000..4d4b471 --- /dev/null +++ b/src/clientversion.h~ @@ -0,0 +1,31 @@ +#ifndef CLIENTVERSION_H +#define CLIENTVERSION_H + +#if defined(HAVE_CONFIG_H) +#include "bitmark-config.h" +#else +// +// client versioning and copyright year +// + +// These need to be macros, as version.cpp's and gamecredits-qt.rc's voodoo requires it +#define CLIENT_VERSION_MAJOR 0 +#define CLIENT_VERSION_MINOR 9 +#define CLIENT_VERSION_REVISION 4 +#define CLIENT_VERSION_BUILD 5 + +// Set to true for release, false for prerelease or test build +#define CLIENT_VERSION_IS_RELEASE true + +// Copyright year (2009-this) +// Todo: update this when changing our copyright comments in the source +#define COPYRIGHT_YEAR 2015 + +#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) +#define DO_STRINGIZE(X) #X + +#endif // CLIENTVERSION_H diff --git a/src/coincontrol.h b/src/coincontrol.h index 6a8c795..84a00f4 100644 --- a/src/coincontrol.h +++ b/src/coincontrol.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/coincontrol.h~ b/src/coincontrol.h~ new file mode 100644 index 0000000..859dd3f --- /dev/null +++ b/src/coincontrol.h~ @@ -0,0 +1,64 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 index 464e561..8987c51 100644 --- a/src/coins.cpp +++ b/src/coins.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/coins.cpp~ b/src/coins.cpp~ new file mode 100644 index 0000000..a7c80d8 --- /dev/null +++ b/src/coins.cpp~ @@ -0,0 +1,197 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 index ea1cf62..b0b2398 100644 --- a/src/coins.h +++ b/src/coins.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef BITMARK_COINS_H @@ -335,7 +335,7 @@ class CCoinsViewCache : public CCoinsViewBacked // Calculate the size of the cache (in number of transactions) unsigned int GetCacheSize(); - /** Amount of bitmarks coming in to a transaction + /** Amount of pfennigs 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. diff --git a/src/coins.h~ b/src/coins.h~ new file mode 100644 index 0000000..a30a513 --- /dev/null +++ b/src/coins.h~ @@ -0,0 +1,359 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. +#ifndef BITMARK_COINS_H +#define BITMARK_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 PFG) + * * 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 PFG) + * * 00: special txout type pay-to-pubkey-hash + * * 61b01caab50f1b8e9c50a5057eb43c2d9563a4ee: address uint160 + * - vout[16]: bbd123008c988f1a4a4de2161e0f50aac7f17e7f9555caa4 + * * bbd123: compact amount representation for 110397 (0.001 PFG) + * * 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 pfennigs 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 823fb61..68930c9 100644 --- a/src/compat.h +++ b/src/compat.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/compat.h~ b/src/compat.h~ new file mode 100644 index 0000000..3679f1d --- /dev/null +++ b/src/compat.h~ @@ -0,0 +1,78 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef _BITMARK_COMPAT_H +#define _BITMARK_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 // Must be included before mswsock.h and windows.h + +#include +#include +#include +#else +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#endif + +#ifdef WIN32 +#define MSG_DONTWAIT 0 +#else +typedef u_int SOCKET; +#include "errno.h" +#define WSAGetLastError() errno +#define WSAEINVAL EINVAL +#define WSAEALREADY EALREADY +#define WSAEWOULDBLOCK EWOULDBLOCK +#define WSAEMSGSIZE EMSGSIZE +#define WSAEINTR EINTR +#define WSAEINPROGRESS EINPROGRESS +#define WSAEADDRINUSE EADDRINUSE +#define WSAENOTSOCK EBADF +#define INVALID_SOCKET (SOCKET)(~0) +#define SOCKET_ERROR -1 +#endif + +inline int myclosesocket(SOCKET& hSocket) +{ + if (hSocket == INVALID_SOCKET) + return WSAENOTSOCK; +#ifdef WIN32 + int ret = closesocket(hSocket); +#else + int ret = close(hSocket); +#endif + hSocket = INVALID_SOCKET; + return ret; +} +#define closesocket(s) myclosesocket(s) + + +#endif diff --git a/src/core.cpp b/src/core.cpp index 059861c..3de9824 100644 --- a/src/core.cpp +++ b/src/core.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/core.cpp~ b/src/core.cpp~ new file mode 100644 index 0000000..96d9d59 --- /dev/null +++ b/src/core.cpp~ @@ -0,0 +1,290 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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), n); +} + +void COutPoint::print() const +{ + LogPrintf("%s\n", ToString()); +} + +CTxIn::CTxIn(COutPoint prevoutIn, CScript scriptSigIn, unsigned int nSequenceIn) +{ + prevout = prevoutIn; + scriptSig = scriptSigIn; + nSequence = nSequenceIn; +} + +CTxIn::CTxIn(uint256 hashPrevTx, unsigned int nOut, CScript scriptSigIn, unsigned int nSequenceIn) +{ + prevout = COutPoint(hashPrevTx, nOut); + scriptSig = scriptSigIn; + nSequence = nSequenceIn; +} + +std::string CTxIn::ToString() const +{ + std::string str; + str += "CTxIn("; + str += prevout.ToString(); + if (prevout.IsNull()) + str += strprintf(", coinbase %s", HexStr(scriptSig)); + else + str += strprintf(", scriptSig=%s", scriptSig.ToString().substr(0,24)); + if (nSequence != std::numeric_limits::max()) + str += strprintf(", nSequence=%u", nSequence); + str += ")"; + return str; +} + +void CTxIn::print() const +{ + LogPrintf("%s\n", ToString()); +} + +CTxOut::CTxOut(int64_t nValueIn, CScript scriptPubKeyIn) +{ + nValue = nValueIn; + scriptPubKey = scriptPubKeyIn; +} + +uint256 CTxOut::GetHash() const +{ + return SerializeHash(*this); +} + +std::string CTxOut::ToString() const +{ + return strprintf("CTxOut(nValue=%d.%08d, scriptPubKey=%s)", nValue / COIN, nValue % COIN, scriptPubKey.ToString().substr(0,30)); +} + +void CTxOut::print() const +{ + LogPrintf("%s\n", ToString()); +} + +uint256 CTransaction::GetHash() const +{ + return SerializeHash(*this); +} + +bool CTransaction::IsNewerThan(const CTransaction& old) const +{ + if (vin.size() != old.vin.size()) + return false; + for (unsigned int i = 0; i < vin.size(); i++) + if (vin[i].prevout != old.vin[i].prevout) + return false; + + bool fNewer = false; + unsigned int nLowest = std::numeric_limits::max(); + for (unsigned int i = 0; i < vin.size(); i++) + { + if (vin[i].nSequence != old.vin[i].nSequence) + { + if (vin[i].nSequence <= nLowest) + { + fNewer = false; + nLowest = vin[i].nSequence; + } + if (old.vin[i].nSequence < nLowest) + { + fNewer = true; + nLowest = old.vin[i].nSequence; + } + } + } + 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=%u, vout.size=%u, nLockTime=%u)\n", + GetHash().ToString().substr(0,10), + nVersion, + vin.size(), + vout.size(), + nLockTime); + for (unsigned int i = 0; i < vin.size(); i++) + str += " " + vin[i].ToString() + "\n"; + for (unsigned int i = 0; i < vout.size(); i++) + str += " " + vout[i].ToString() + "\n"; + return str; +} + +void CTransaction::print() const +{ + LogPrintf("%s", ToString()); +} + +// Amount compression: +// * If the amount is 0, output 0 +// * first, divide the amount (in base units) by the largest power of 10 possible; call the exponent e (e is max 9) +// * if e<9, the last digit of the resulting number cannot be 0; store it as d, and drop it (divide by 10) +// * call the result n +// * output 1 + 10*(9*n + d - 1) + e +// * 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_t CTxOutCompressor::CompressAmount(uint64_t n) +{ + if (n == 0) + return 0; + int e = 0; + while (((n % 10) == 0) && e < 9) { + n /= 10; + e++; + } + if (e < 9) { + int d = (n % 10); + assert(d >= 1 && d <= 9); + n /= 10; + return 1 + (n*9 + d - 1)*10 + e; + } else { + return 1 + (n - 1)*10 + 9; + } +} + +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) + return 0; + x--; + // x = 10*(9*n + d - 1) + e + int e = x % 10; + x /= 10; + uint64_t n = 0; + if (e < 9) { + // x = 9*n + d - 1 + int d = (x % 9) + 1; + x /= 9; + // x = n + n = x*10 + d; + } else { + n = x+1; + } + while (e) { + n *= 10; + e--; + } + return n; +} + +uint256 CBlockHeader::GetHash() const +{ + return Hash(BEGIN(nVersion), END(nNonce)); +} + +uint256 CBlock::BuildMerkleTree() const +{ + vMerkleTree.clear(); + BOOST_FOREACH(const CTransaction& tx, vtx) + vMerkleTree.push_back(tx.GetHash()); + int j = 0; + for (int nSize = vtx.size(); nSize > 1; nSize = (nSize + 1) / 2) + { + for (int i = 0; i < nSize; i += 2) + { + int i2 = std::min(i+1, nSize-1); + vMerkleTree.push_back(Hash(BEGIN(vMerkleTree[j+i]), END(vMerkleTree[j+i]), + BEGIN(vMerkleTree[j+i2]), END(vMerkleTree[j+i2]))); + } + j += nSize; + } + return (vMerkleTree.empty() ? 0 : vMerkleTree.back()); +} + +std::vector CBlock::GetMerkleBranch(int nIndex) const +{ + if (vMerkleTree.empty()) + BuildMerkleTree(); + std::vector vMerkleBranch; + int j = 0; + for (int nSize = vtx.size(); nSize > 1; nSize = (nSize + 1) / 2) + { + int i = std::min(nIndex^1, nSize-1); + vMerkleBranch.push_back(vMerkleTree[j+i]); + nIndex >>= 1; + j += nSize; + } + return vMerkleBranch; +} + +uint256 CBlock::CheckMerkleBranch(uint256 hash, const std::vector& vMerkleBranch, int nIndex) +{ + if (nIndex == -1) + return 0; + BOOST_FOREACH(const uint256& otherside, vMerkleBranch) + { + if (nIndex & 1) + hash = Hash(BEGIN(otherside), END(otherside), BEGIN(hash), END(hash)); + else + hash = Hash(BEGIN(hash), END(hash), BEGIN(otherside), END(otherside)); + nIndex >>= 1; + } + return hash; +} + +void CBlock::print() const +{ + LogPrintf("CBlock(hash=%s, pow=%s, ver=%d, hashPrevBlock=%s, hashMerkleRoot=%s, nTime=%u, nBits=%08x, nNonce=%u, vtx=%u)\n", + GetHash().ToString(), + GetPoWHash().ToString().c_str(), + nVersion, + hashPrevBlock.ToString(), + hashMerkleRoot.ToString(), + nTime, nBits, nNonce, + vtx.size()); + for (unsigned int i = 0; i < vtx.size(); i++) + { + LogPrintf(" "); + vtx[i].print(); + } + LogPrintf(" vMerkleTree: "); + for (unsigned int i = 0; i < vMerkleTree.size(); i++) + LogPrintf("%s ", vMerkleTree[i].ToString()); + LogPrintf("\n"); +} diff --git a/src/core.h b/src/core.h index 0a2f963..ffaae64 100644 --- a/src/core.h +++ b/src/core.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -16,8 +16,7 @@ class CTransaction; /** No amount larger than this (in satoshi) is valid */ -// todo cap this after taxation is accounted for, block reward dies after 36 changes -static const int64_t MAX_MONEY = 28000000 * COIN; +static const int64_t MAX_MONEY = 84000000 * 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 */ diff --git a/src/core.h~ b/src/core.h~ new file mode 100644 index 0000000..7fc9793 --- /dev/null +++ b/src/core.h~ @@ -0,0 +1,496 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_CORE_H +#define BITMARK_CORE_H + +#include "script.h" +#include "serialize.h" +#include "uint256.h" +#include "scrypt.h" +#include + +class CTransaction; + +/** No amount larger than this (in satoshi) is valid */ +static const int64_t MAX_MONEY = 84000000 * 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 +{ +public: + uint256 hash; + unsigned int n; + + COutPoint() { SetNull(); } + COutPoint(uint256 hashIn, unsigned int nIn) { hash = hashIn; n = nIn; } + IMPLEMENT_SERIALIZE( READWRITE(FLATDATA(*this)); ) + void SetNull() { hash = 0; n = (unsigned int) -1; } + bool IsNull() const { return (hash == 0 && n == (unsigned int) -1); } + + friend bool operator<(const COutPoint& a, const COutPoint& b) + { + return (a.hash < b.hash || (a.hash == b.hash && a.n < b.n)); + } + + friend bool operator==(const COutPoint& a, const COutPoint& b) + { + return (a.hash == b.hash && a.n == b.n); + } + + friend bool operator!=(const COutPoint& a, const COutPoint& b) + { + return !(a == b); + } + + std::string ToString() const; + void print() const; +}; + +/** An inpoint - a combination of a transaction and an index n into its vin */ +class CInPoint +{ +public: + const CTransaction* ptx; + unsigned int n; + + CInPoint() { SetNull(); } + 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); } +}; + +/** An input of a transaction. It contains the location of the previous + * transaction's output that it claims and a signature that matches the + * output's public key. + */ +class CTxIn +{ +public: + COutPoint prevout; + CScript scriptSig; + unsigned int nSequence; + + CTxIn() + { + nSequence = std::numeric_limits::max(); + } + + explicit CTxIn(COutPoint prevoutIn, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=std::numeric_limits::max()); + CTxIn(uint256 hashPrevTx, unsigned int nOut, CScript scriptSigIn=CScript(), unsigned int nSequenceIn=std::numeric_limits::max()); + + IMPLEMENT_SERIALIZE + ( + READWRITE(prevout); + READWRITE(scriptSig); + READWRITE(nSequence); + ) + + bool IsFinal() const + { + return (nSequence == std::numeric_limits::max()); + } + + friend bool operator==(const CTxIn& a, const CTxIn& b) + { + return (a.prevout == b.prevout && + a.scriptSig == b.scriptSig && + a.nSequence == b.nSequence); + } + + friend bool operator!=(const CTxIn& a, const CTxIn& b) + { + return !(a == b); + } + + std::string ToString() const; + void print() const; +}; + + + + +/** An output of a transaction. It contains the public key that the next input + * must be able to sign with to claim it. + */ +class CTxOut +{ +public: + int64_t nValue; + CScript scriptPubKey; + + CTxOut() + { + SetNull(); + } + + CTxOut(int64_t nValueIn, CScript scriptPubKeyIn); + + IMPLEMENT_SERIALIZE + ( + READWRITE(nValue); + READWRITE(scriptPubKey); + ) + + void SetNull() + { + nValue = -1; + scriptPubKey.clear(); + } + + bool IsNull() const + { + return (nValue == -1); + } + + uint256 GetHash() const; + + bool IsDust(int64_t nMinRelayTxFee) const + { + // "Dust" is defined in terms of CTransaction::nMinRelayTxFee, + // which has units satoshis-per-kilobyte. + // If you'd pay more than 1/3 in fees + // 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 546 satoshis + // with default nMinRelayTxFee. + return ((nValue*1000)/(3*((int)GetSerializeSize(SER_DISK,0)+148)) < nMinRelayTxFee); + } + + friend bool operator==(const CTxOut& a, const CTxOut& b) + { + return (a.nValue == b.nValue && + a.scriptPubKey == b.scriptPubKey); + } + + friend bool operator!=(const CTxOut& a, const CTxOut& b) + { + return !(a == b); + } + + std::string ToString() const; + void print() const; +}; + + +/** The basic transaction that is broadcasted on the network and contained in + * blocks. A transaction can contain multiple inputs and outputs. + */ +class CTransaction +{ +public: + static int64_t nMinTxFee; + static int64_t nMinRelayTxFee; + static const int CURRENT_VERSION=1; + int nVersion; + std::vector vin; + std::vector vout; + unsigned int nLockTime; + + CTransaction() + { + SetNull(); + } + + IMPLEMENT_SERIALIZE + ( + READWRITE(this->nVersion); + nVersion = this->nVersion; + READWRITE(vin); + READWRITE(vout); + READWRITE(nLockTime); + ) + + void SetNull() + { + nVersion = CTransaction::CURRENT_VERSION; + vin.clear(); + vout.clear(); + nLockTime = 0; + } + + bool IsNull() const + { + return (vin.empty() && vout.empty()); + } + + 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()); + } + + friend bool operator==(const CTransaction& a, const CTransaction& b) + { + return (a.nVersion == b.nVersion && + a.vin == b.vin && + a.vout == b.vout && + a.nLockTime == b.nLockTime); + } + + friend bool operator!=(const CTransaction& a, const CTransaction& b) + { + return !(a == b); + } + + + std::string ToString() const; + void print() const; +}; + +/** wrapper for CTxOut that provides a more compact serialization */ +class CTxOutCompressor +{ +private: + CTxOut &txout; + +public: + static uint64_t CompressAmount(uint64_t nAmount); + static uint64_t DecompressAmount(uint64_t nAmount); + + CTxOutCompressor(CTxOut &txoutIn) : txout(txoutIn) { } + + IMPLEMENT_SERIALIZE(({ + if (!fRead) { + uint64_t nVal = CompressAmount(txout.nValue); + READWRITE(VARINT(nVal)); + } else { + uint64_t nVal = 0; + READWRITE(VARINT(nVal)); + txout.nValue = DecompressAmount(nVal); + } + CScriptCompressor cscript(REF(txout.scriptPubKey)); + READWRITE(cscript); + });) +}; + +/** Undo information for a CTxIn + * + * Contains the prevout's CTxOut being spent, and if this was the + * last output of the affected transaction, its metadata as well + * (coinbase or not, height, transaction version) + */ +class CTxInUndo +{ +public: + CTxOut txout; // the txout data before being spent + bool fCoinBase; // if the outpoint was the last unspent: whether it belonged to a coinbase + unsigned int nHeight; // if the outpoint was the last unspent: its height + int nVersion; // if the outpoint was the last unspent: its version + + CTxInUndo() : txout(), fCoinBase(false), nHeight(0), nVersion(0) {} + CTxInUndo(const CTxOut &txoutIn, bool fCoinBaseIn = false, unsigned int nHeightIn = 0, int nVersionIn = 0) : txout(txoutIn), fCoinBase(fCoinBaseIn), nHeight(nHeightIn), nVersion(nVersionIn) { } + + unsigned int GetSerializeSize(int nType, int nVersion) const { + return ::GetSerializeSize(VARINT(nHeight*2+(fCoinBase ? 1 : 0)), nType, nVersion) + + (nHeight > 0 ? ::GetSerializeSize(VARINT(this->nVersion), nType, nVersion) : 0) + + ::GetSerializeSize(CTxOutCompressor(REF(txout)), nType, nVersion); + } + + template + void Serialize(Stream &s, int nType, int nVersion) const { + ::Serialize(s, VARINT(nHeight*2+(fCoinBase ? 1 : 0)), nType, nVersion); + if (nHeight > 0) + ::Serialize(s, VARINT(this->nVersion), nType, nVersion); + ::Serialize(s, CTxOutCompressor(REF(txout)), nType, nVersion); + } + + template + void Unserialize(Stream &s, int nType, int nVersion) { + unsigned int nCode = 0; + ::Unserialize(s, VARINT(nCode), nType, nVersion); + nHeight = nCode / 2; + fCoinBase = nCode & 1; + if (nHeight > 0) + ::Unserialize(s, VARINT(this->nVersion), nType, nVersion); + ::Unserialize(s, REF(CTxOutCompressor(REF(txout))), nType, nVersion); + } +}; + +/** Undo information for a CTransaction */ +class CTxUndo +{ +public: + // undo information for all txins + std::vector vprevout; + + IMPLEMENT_SERIALIZE( + READWRITE(vprevout); + ) +}; + + +/** 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 + * to everyone and the block is added to the block chain. The first transaction + * in the block is a special one that creates a new coin owned by the creator + * of the block. + */ +class CBlockHeader +{ +public: + // header + static const int CURRENT_VERSION=2; + int nVersion; + uint256 hashPrevBlock; + uint256 hashMerkleRoot; + unsigned int nTime; + unsigned int nBits; + unsigned int nNonce; + + CBlockHeader() + { + SetNull(); + } + + IMPLEMENT_SERIALIZE + ( + READWRITE(this->nVersion); + nVersion = this->nVersion; + READWRITE(hashPrevBlock); + READWRITE(hashMerkleRoot); + READWRITE(nTime); + READWRITE(nBits); + READWRITE(nNonce); + ) + + void SetNull() + { + nVersion = CBlockHeader::CURRENT_VERSION; + hashPrevBlock = 0; + hashMerkleRoot = 0; + nTime = 0; + nBits = 0; + nNonce = 0; + } + + bool IsNull() const + { + return (nBits == 0); + } + + uint256 GetHash() const; + + int64_t GetBlockTime() const + { + return (int64_t)nTime; + } +}; + + +class CBlock : public CBlockHeader +{ +public: + // network and disk + std::vector vtx; + + // memory only + mutable std::vector vMerkleTree; + + CBlock() + { + SetNull(); + } + + CBlock(const CBlockHeader &header) + { + SetNull(); + *((CBlockHeader*)this) = header; + } + + IMPLEMENT_SERIALIZE + ( + READWRITE(*(CBlockHeader*)this); + READWRITE(vtx); + ) + + void SetNull() + { + CBlockHeader::SetNull(); + vtx.clear(); + vMerkleTree.clear(); + } + + CBlockHeader GetBlockHeader() const + { + CBlockHeader block; + block.nVersion = nVersion; + block.hashPrevBlock = hashPrevBlock; + block.hashMerkleRoot = hashMerkleRoot; + block.nTime = nTime; + block.nBits = nBits; + block.nNonce = nNonce; + return block; + } + + uint256 GetPoWHash() const + { + uint256 thash; + scrypt_1024_1_1_256(BEGIN(nVersion), BEGIN(thash)); + return thash; + } + + uint256 BuildMerkleTree() const; + + const uint256 &GetTxHash(unsigned int nIndex) const { + assert(vMerkleTree.size() > 0); // BuildMerkleTree must have been called first + assert(nIndex < vtx.size()); + return vMerkleTree[nIndex]; + } + + std::vector GetMerkleBranch(int nIndex) const; + static uint256 CheckMerkleBranch(uint256 hash, const std::vector& vMerkleBranch, int nIndex); + 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 19c6404..2aac8c8 100644 --- a/src/crypter.cpp +++ b/src/crypter.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/crypter.cpp~ b/src/crypter.cpp~ new file mode 100644 index 0000000..085b720 --- /dev/null +++ b/src/crypter.cpp~ @@ -0,0 +1,275 @@ +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +bool CCrypter::SetKeyFromPassphrase(const SecureString& strKeyData, const std::vector& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod) +{ + if (nRounds < 1 || chSalt.size() != WALLET_CRYPTO_SALT_SIZE) + return false; + + int i = 0; + if (nDerivationMethod == 0) + i = EVP_BytesToKey(EVP_aes_256_cbc(), EVP_sha512(), &chSalt[0], + (unsigned char *)&strKeyData[0], strKeyData.size(), nRounds, chKey, chIV); + + if (i != (int)WALLET_CRYPTO_KEY_SIZE) + { + OPENSSL_cleanse(chKey, sizeof(chKey)); + OPENSSL_cleanse(chIV, sizeof(chIV)); + return false; + } + + fKeySet = true; + return true; +} + +bool CCrypter::SetKey(const CKeyingMaterial& chNewKey, const std::vector& chNewIV) +{ + if (chNewKey.size() != WALLET_CRYPTO_KEY_SIZE || chNewIV.size() != WALLET_CRYPTO_KEY_SIZE) + return false; + + memcpy(&chKey[0], &chNewKey[0], sizeof chKey); + memcpy(&chIV[0], &chNewIV[0], sizeof chIV); + + fKeySet = true; + return true; +} + +bool CCrypter::Encrypt(const CKeyingMaterial& vchPlaintext, std::vector &vchCiphertext) +{ + if (!fKeySet) + return false; + + // max ciphertext len for a n bytes of plaintext is + // n + AES_BLOCK_SIZE - 1 bytes + int nLen = vchPlaintext.size(); + int nCLen = nLen + AES_BLOCK_SIZE, nFLen = 0; + vchCiphertext = std::vector (nCLen); + + EVP_CIPHER_CTX ctx; + + bool fOk = true; + + EVP_CIPHER_CTX_init(&ctx); + if (fOk) fOk = EVP_EncryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV); + if (fOk) fOk = EVP_EncryptUpdate(&ctx, &vchCiphertext[0], &nCLen, &vchPlaintext[0], nLen); + if (fOk) fOk = EVP_EncryptFinal_ex(&ctx, (&vchCiphertext[0])+nCLen, &nFLen); + EVP_CIPHER_CTX_cleanup(&ctx); + + if (!fOk) return false; + + vchCiphertext.resize(nCLen + nFLen); + return true; +} + +bool CCrypter::Decrypt(const std::vector& vchCiphertext, CKeyingMaterial& vchPlaintext) +{ + if (!fKeySet) + return false; + + // plaintext will always be equal to or lesser than length of ciphertext + int nLen = vchCiphertext.size(); + int nPLen = nLen, nFLen = 0; + + vchPlaintext = CKeyingMaterial(nPLen); + + EVP_CIPHER_CTX ctx; + + bool fOk = true; + + EVP_CIPHER_CTX_init(&ctx); + if (fOk) fOk = EVP_DecryptInit_ex(&ctx, EVP_aes_256_cbc(), NULL, chKey, chIV); + if (fOk) fOk = EVP_DecryptUpdate(&ctx, &vchPlaintext[0], &nPLen, &vchCiphertext[0], nLen); + if (fOk) fOk = EVP_DecryptFinal_ex(&ctx, (&vchPlaintext[0])+nPLen, &nFLen); + EVP_CIPHER_CTX_cleanup(&ctx); + + if (!fOk) return false; + + vchPlaintext.resize(nPLen + nFLen); + return true; +} + + +bool EncryptSecret(const CKeyingMaterial& vMasterKey, const CKeyingMaterial &vchPlaintext, const uint256& nIV, std::vector &vchCiphertext) +{ + CCrypter cKeyCrypter; + std::vector chIV(WALLET_CRYPTO_KEY_SIZE); + memcpy(&chIV[0], &nIV, WALLET_CRYPTO_KEY_SIZE); + if(!cKeyCrypter.SetKey(vMasterKey, chIV)) + return false; + return cKeyCrypter.Encrypt(*((const CKeyingMaterial*)&vchPlaintext), vchCiphertext); +} + +bool DecryptSecret(const CKeyingMaterial& vMasterKey, const std::vector& vchCiphertext, const uint256& nIV, CKeyingMaterial& vchPlaintext) +{ + CCrypter cKeyCrypter; + std::vector chIV(WALLET_CRYPTO_KEY_SIZE); + memcpy(&chIV[0], &nIV, WALLET_CRYPTO_KEY_SIZE); + if(!cKeyCrypter.SetKey(vMasterKey, chIV)) + return false; + return cKeyCrypter.Decrypt(vchCiphertext, *((CKeyingMaterial*)&vchPlaintext)); +} + +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/crypter.h b/src/crypter.h index 91839fc..53371e9 100644 --- a/src/crypter.h +++ b/src/crypter.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/crypter.h~ b/src/crypter.h~ new file mode 100644 index 0000000..a623a9a --- /dev/null +++ b/src/crypter.h~ @@ -0,0 +1,193 @@ +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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" +#include "serialize.h" +#include "keystore.h" + +class uint256; + +const unsigned int WALLET_CRYPTO_KEY_SIZE = 32; +const unsigned int WALLET_CRYPTO_SALT_SIZE = 8; + +/* +Private key encryption is done based on a CMasterKey, +which holds a salt and random encryption key. + +CMasterKeys are encrypted using AES-256-CBC using a key +derived using derivation method nDerivationMethod +(0 == EVP_sha512()) and derivation iterations nDeriveIterations. +vchOtherDerivationParameters is provided for alternative algorithms +which may require more parameters (such as scrypt). + +Wallet Private Keys are then encrypted using AES-256-CBC +with the double-sha256 of the public key as the IV, and the +master key's key as the encryption key (see keystore.[ch]). +*/ + +/** Master key for wallet encryption */ +class CMasterKey +{ +public: + std::vector vchCryptedKey; + std::vector vchSalt; + // 0 = EVP_sha512() + // 1 = scrypt() + unsigned int nDerivationMethod; + unsigned int nDeriveIterations; + // Use this for more parameters to key derivation, + // such as the various parameters to scrypt + std::vector vchOtherDerivationParameters; + + IMPLEMENT_SERIALIZE + ( + READWRITE(vchCryptedKey); + READWRITE(vchSalt); + READWRITE(nDerivationMethod); + READWRITE(nDeriveIterations); + READWRITE(vchOtherDerivationParameters); + ) + CMasterKey() + { + // 25000 rounds is just under 0.1 seconds on a 1.86 GHz Pentium M + // ie slightly lower than the lowest hardware we need bother supporting + nDeriveIterations = 25000; + nDerivationMethod = 0; + vchOtherDerivationParameters = std::vector(0); + } +}; + +typedef std::vector > CKeyingMaterial; + +/** Encryption/decryption context with key information */ +class CCrypter +{ +private: + unsigned char chKey[WALLET_CRYPTO_KEY_SIZE]; + unsigned char chIV[WALLET_CRYPTO_KEY_SIZE]; + bool fKeySet; + +public: + bool SetKeyFromPassphrase(const SecureString &strKeyData, const std::vector& chSalt, const unsigned int nRounds, const unsigned int nDerivationMethod); + bool Encrypt(const CKeyingMaterial& vchPlaintext, std::vector &vchCiphertext); + bool Decrypt(const std::vector& vchCiphertext, CKeyingMaterial& vchPlaintext); + bool SetKey(const CKeyingMaterial& chNewKey, const std::vector& chNewIV); + + void CleanKey() + { + OPENSSL_cleanse(chKey, sizeof(chKey)); + OPENSSL_cleanse(chIV, sizeof(chIV)); + fKeySet = false; + } + + CCrypter() + { + fKeySet = false; + + // 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); + } + + ~CCrypter() + { + CleanKey(); + + 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 af85622..3eafca3 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/db.cpp~ b/src/db.cpp~ new file mode 100644 index 0000000..edf009c --- /dev/null +++ b/src/db.cpp~ @@ -0,0 +1,480 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "db.h" + +#include "addrman.h" +#include "hash.h" +#include "protocol.h" +#include "util.h" + +#include + +#ifndef WIN32 +#include +#endif + +#include +#include +#include + +using namespace std; +using namespace boost; + + +unsigned int nWalletDBUpdated; + + + +// +// CDB +// + +CDBEnv bitdb; + +void CDBEnv::EnvShutdown() +{ + if (!fDbEnvInit) + return; + + fDbEnvInit = false; + int ret = dbenv.close(0); + if (ret != 0) + 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); +} + +CDBEnv::CDBEnv() : dbenv(DB_CXX_NO_EXCEPTIONS) +{ + fDbEnvInit = false; + fMockDb = false; +} + +CDBEnv::~CDBEnv() +{ + EnvShutdown(); +} + +void CDBEnv::Close() +{ + EnvShutdown(); +} + +bool CDBEnv::Open(const boost::filesystem::path& pathIn) +{ + if (fDbEnvInit) + return true; + + boost::this_thread::interruption_point(); + + path = pathIn; + filesystem::path pathLogDir = path / "database"; + TryCreateDirectory(pathLogDir); + filesystem::path pathErrorFile = path / "db.log"; + LogPrintf("CDBEnv::Open : LogDir=%s ErrorFile=%s\n", pathLogDir.string(), pathErrorFile.string()); + + unsigned int nEnvFlags = 0; + if (GetBoolArg("-privdb", true)) + nEnvFlags |= DB_PRIVATE; + + dbenv.set_lg_dir(pathLogDir.string().c_str()); + dbenv.set_cachesize(0, 0x100000, 1); // 1 MiB should be enough for just the wallet + dbenv.set_lg_bsize(0x10000); + dbenv.set_lg_max(1048576); + dbenv.set_lk_max_locks(40000); + dbenv.set_lk_max_objects(40000); + dbenv.set_errfile(fopen(pathErrorFile.string().c_str(), "a")); /// debug + dbenv.set_flags(DB_AUTO_COMMIT, 1); + dbenv.set_flags(DB_TXN_WRITE_NOSYNC, 1); + dbenv.log_set_config(DB_LOG_AUTO_REMOVE, 1); + int ret = dbenv.open(path.string().c_str(), + DB_CREATE | + DB_INIT_LOCK | + DB_INIT_LOG | + DB_INIT_MPOOL | + DB_INIT_TXN | + DB_THREAD | + DB_RECOVER | + nEnvFlags, + S_IRUSR | S_IWUSR); + if (ret != 0) + return error("CDBEnv::Open : Error %d opening database environment: %s\n", ret, DbEnv::strerror(ret)); + + fDbEnvInit = true; + fMockDb = false; + return true; +} + +void CDBEnv::MakeMock() +{ + if (fDbEnvInit) + throw runtime_error("CDBEnv::MakeMock : Already initialized"); + + boost::this_thread::interruption_point(); + + LogPrint("db", "CDBEnv::MakeMock\n"); + + dbenv.set_cachesize(1, 0, 1); + dbenv.set_lg_bsize(10485760*4); + dbenv.set_lg_max(10485760); + dbenv.set_lk_max_locks(10000); + dbenv.set_lk_max_objects(10000); + dbenv.set_flags(DB_AUTO_COMMIT, 1); + dbenv.log_set_config(DB_LOG_IN_MEMORY, 1); + int ret = dbenv.open(NULL, + DB_CREATE | + DB_INIT_LOCK | + DB_INIT_LOG | + DB_INIT_MPOOL | + DB_INIT_TXN | + DB_THREAD | + DB_PRIVATE, + S_IRUSR | S_IWUSR); + if (ret > 0) + throw runtime_error(strprintf("CDBEnv::MakeMock : Error %d opening database environment.", ret)); + + fDbEnvInit = true; + fMockDb = true; +} + +CDBEnv::VerifyResult CDBEnv::Verify(std::string strFile, bool (*recoverFunc)(CDBEnv& dbenv, std::string strFile)) +{ + LOCK(cs_db); + assert(mapFileUseCount.count(strFile) == 0); + + Db db(&dbenv, 0); + int result = db.verify(strFile.c_str(), NULL, NULL, 0); + if (result == 0) + return VERIFY_OK; + else if (recoverFunc == NULL) + return RECOVER_FAIL; + + // Try to recover: + bool fRecovered = (*recoverFunc)(*this, strFile); + return (fRecovered ? RECOVER_OK : RECOVER_FAIL); +} + +bool CDBEnv::Salvage(std::string strFile, bool fAggressive, + std::vector& vResult) +{ + LOCK(cs_db); + assert(mapFileUseCount.count(strFile) == 0); + + u_int32_t flags = DB_SALVAGE; + if (fAggressive) flags |= DB_AGGRESSIVE; + + stringstream strDump; + + Db db(&dbenv, 0); + int result = db.verify(strFile.c_str(), NULL, &strDump, flags); + if (result == DB_VERIFY_BAD) + { + LogPrintf("CDBEnv::Salvage : Database salvage found errors, all data may not be recoverable.\n"); + if (!fAggressive) + { + LogPrintf("CDBEnv::Salvage : Rerun with aggressive mode to ignore errors and continue.\n"); + return false; + } + } + if (result != 0 && result != DB_VERIFY_BAD) + { + LogPrintf("CDBEnv::Salvage : Database salvage failed with result %d.\n", result); + return false; + } + + // Format of bdb dump is ascii lines: + // header lines... + // HEADER=END + // hexadecimal key + // hexadecimal value + // ... repeated + // DATA=END + + string strLine; + while (!strDump.eof() && strLine != "HEADER=END") + getline(strDump, strLine); // Skip past header + + std::string keyHex, valueHex; + while (!strDump.eof() && keyHex != "DATA=END") + { + getline(strDump, keyHex); + if (keyHex != "DATA_END") + { + getline(strDump, valueHex); + vResult.push_back(make_pair(ParseHex(keyHex),ParseHex(valueHex))); + } + } + + return (result == 0); +} + + +void CDBEnv::CheckpointLSN(std::string strFile) +{ + dbenv.txn_checkpoint(0, 0, 0); + if (fMockDb) + return; + dbenv.lsn_reset(strFile.c_str(), 0); +} + + +CDB::CDB(const char *pszFile, const char* pszMode) : + pdb(NULL), activeTxn(NULL) +{ + int ret; + if (pszFile == NULL) + return; + + fReadOnly = (!strchr(pszMode, '+') && !strchr(pszMode, 'w')); + bool fCreate = strchr(pszMode, 'c'); + unsigned int nFlags = DB_THREAD; + if (fCreate) + nFlags |= DB_CREATE; + + { + LOCK(bitdb.cs_db); + if (!bitdb.Open(GetDataDir())) + throw runtime_error("CDB : Failed to open database environment."); + + strFile = pszFile; + ++bitdb.mapFileUseCount[strFile]; + pdb = bitdb.mapDb[strFile]; + if (pdb == NULL) + { + pdb = new Db(&bitdb.dbenv, 0); + + bool fMockDb = bitdb.IsMock(); + if (fMockDb) + { + 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)); + } + + ret = pdb->open(NULL, // Txn pointer + fMockDb ? NULL : pszFile, // Filename + fMockDb ? pszFile : "main", // Logical db name + DB_BTREE, // Database type + nFlags, // Flags + 0); + + if (ret != 0) + { + delete pdb; + pdb = NULL; + --bitdb.mapFileUseCount[strFile]; + strFile = ""; + throw runtime_error(strprintf("CDB : Error %d, can't open database %s", ret, pszFile)); + } + + if (fCreate && !Exists(string("version"))) + { + bool fTmp = fReadOnly; + fReadOnly = false; + WriteVersion(CLIENT_VERSION); + fReadOnly = fTmp; + } + + bitdb.mapDb[strFile] = pdb; + } + } +} + +void CDB::Flush() +{ + if (activeTxn) + return; + + // Flush database activity from memory pool to disk log + unsigned int nMinutes = 0; + if (fReadOnly) + nMinutes = 1; + + bitdb.dbenv.txn_checkpoint(nMinutes ? GetArg("-dblogsize", 100)*1024 : 0, nMinutes, 0); +} + +void CDB::Close() +{ + if (!pdb) + return; + if (activeTxn) + activeTxn->abort(); + activeTxn = NULL; + pdb = NULL; + + Flush(); + + { + LOCK(bitdb.cs_db); + --bitdb.mapFileUseCount[strFile]; + } +} + +void CDBEnv::CloseDb(const string& strFile) +{ + { + LOCK(cs_db); + if (mapDb[strFile] != NULL) + { + // Close the database handle + Db* pdb = mapDb[strFile]; + pdb->close(0); + delete pdb; + mapDb[strFile] = NULL; + } + } +} + +bool CDBEnv::RemoveDb(const string& strFile) +{ + this->CloseDb(strFile); + + LOCK(cs_db); + int rc = dbenv.dbremove(NULL, strFile.c_str(), NULL, DB_AUTO_COMMIT); + return (rc == 0); +} + +bool CDB::Rewrite(const string& strFile, const char* pszSkip) +{ + while (true) + { + { + LOCK(bitdb.cs_db); + if (!bitdb.mapFileUseCount.count(strFile) || bitdb.mapFileUseCount[strFile] == 0) + { + // Flush log data to the dat file + bitdb.CloseDb(strFile); + bitdb.CheckpointLSN(strFile); + bitdb.mapFileUseCount.erase(strFile); + + bool fSuccess = true; + LogPrintf("CDB::Rewrite : Rewriting %s...\n", strFile); + string strFileRes = strFile + ".rewrite"; + { // surround usage of db with extra {} + CDB db(strFile.c_str(), "r"); + Db* pdbCopy = new Db(&bitdb.dbenv, 0); + + int ret = pdbCopy->open(NULL, // Txn pointer + strFileRes.c_str(), // Filename + "main", // Logical db name + DB_BTREE, // Database type + DB_CREATE, // Flags + 0); + if (ret > 0) + { + LogPrintf("CDB::Rewrite : Can't create database file %s\n", strFileRes); + fSuccess = false; + } + + Dbc* pcursor = db.GetCursor(); + if (pcursor) + while (fSuccess) + { + CDataStream ssKey(SER_DISK, CLIENT_VERSION); + CDataStream ssValue(SER_DISK, CLIENT_VERSION); + int ret = db.ReadAtCursor(pcursor, ssKey, ssValue, DB_NEXT); + if (ret == DB_NOTFOUND) + { + pcursor->close(); + break; + } + else if (ret != 0) + { + pcursor->close(); + fSuccess = false; + break; + } + if (pszSkip && + strncmp(&ssKey[0], pszSkip, std::min(ssKey.size(), strlen(pszSkip))) == 0) + continue; + if (strncmp(&ssKey[0], "\x07version", 8) == 0) + { + // Update version: + ssValue.clear(); + ssValue << CLIENT_VERSION; + } + Dbt datKey(&ssKey[0], ssKey.size()); + Dbt datValue(&ssValue[0], ssValue.size()); + int ret2 = pdbCopy->put(NULL, &datKey, &datValue, DB_NOOVERWRITE); + if (ret2 > 0) + fSuccess = false; + } + if (fSuccess) + { + db.Close(); + bitdb.CloseDb(strFile); + if (pdbCopy->close(0)) + fSuccess = false; + delete pdbCopy; + } + } + if (fSuccess) + { + Db dbA(&bitdb.dbenv, 0); + if (dbA.remove(strFile.c_str(), NULL, 0)) + fSuccess = false; + Db dbB(&bitdb.dbenv, 0); + if (dbB.rename(strFileRes.c_str(), NULL, strFile.c_str(), 0)) + fSuccess = false; + } + if (!fSuccess) + LogPrintf("CDB::Rewrite : Failed to rewrite database file %s\n", strFileRes); + return fSuccess; + } + } + MilliSleep(100); + } + return false; +} + + +void CDBEnv::Flush(bool fShutdown) +{ + 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; + { + LOCK(cs_db); + map::iterator mi = mapFileUseCount.begin(); + while (mi != mapFileUseCount.end()) + { + string strFile = (*mi).first; + int nRefCount = (*mi).second; + LogPrint("db", "CDBEnv::Flush : Flushing %s (refcount = %d)...\n", strFile, nRefCount); + if (nRefCount == 0) + { + // Move log data to the dat file + CloseDb(strFile); + LogPrint("db", "CDBEnv::Flush : %s checkpoint\n", strFile); + dbenv.txn_checkpoint(0, 0, 0); + LogPrint("db", "CDBEnv::Flush : %s detach\n", strFile); + if (!fMockDb) + dbenv.lsn_reset(strFile.c_str(), 0); + LogPrint("db", "CDBEnv::Flush : %s closed\n", strFile); + mapFileUseCount.erase(mi++); + } + else + mi++; + } + LogPrint("db", "CDBEnv::Flush : Flush(%s)%s took %15dms\n", fShutdown ? "true" : "false", fDbEnvInit ? "" : " database not started", GetTimeMillis() - nStart); + if (fShutdown) + { + char** listp; + if (mapFileUseCount.empty()) + { + dbenv.log_archive(&listp, DB_ARCH_REMOVE); + Close(); + if (!fMockDb) + boost::filesystem::remove_all(path / "database"); + } + } + } +} + diff --git a/src/db.h b/src/db.h index a2e0b29..07fbd16 100644 --- a/src/db.h +++ b/src/db.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/db.h~ b/src/db.h~ new file mode 100644 index 0000000..25f4698 --- /dev/null +++ b/src/db.h~ @@ -0,0 +1,309 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_DB_H +#define BITMARK_DB_H + +#include "serialize.h" +#include "sync.h" +#include "version.h" + +#include +#include +#include + +#include +#include + +class CAddrMan; +struct CBlockLocator; +class CDiskBlockIndex; +class COutPoint; + +extern unsigned int nWalletDBUpdated; + +void ThreadFlushWalletDB(const std::string& strWalletFile); + + +class CDBEnv +{ +private: + bool fDbEnvInit; + bool fMockDb; + boost::filesystem::path path; + + void EnvShutdown(); + +public: + mutable CCriticalSection cs_db; + DbEnv dbenv; + std::map mapFileUseCount; + std::map mapDb; + + CDBEnv(); + ~CDBEnv(); + void MakeMock(); + bool IsMock() { return fMockDb; } + + /* + * Verify that database file strFile is OK. If it is not, + * call the callback to try to recover. + * This must be called BEFORE strFile is opened. + * Returns true if strFile is OK. + */ + enum VerifyResult { VERIFY_OK, RECOVER_OK, RECOVER_FAIL }; + VerifyResult Verify(std::string strFile, bool (*recoverFunc)(CDBEnv& dbenv, std::string strFile)); + /* + * Salvage data from a file that Verify says is bad. + * fAggressive sets the DB_AGGRESSIVE flag (see berkeley DB->verify() method documentation). + * Appends binary key/value pairs to vResult, returns true if successful. + * NOTE: reads the entire database into memory, so cannot be used + * for huge databases. + */ + typedef std::pair, std::vector > KeyValPair; + bool Salvage(std::string strFile, bool fAggressive, std::vector& vResult); + + bool Open(const boost::filesystem::path &path); + void Close(); + void Flush(bool fShutdown); + void CheckpointLSN(std::string strFile); + + void CloseDb(const std::string& strFile); + bool RemoveDb(const std::string& strFile); + + DbTxn *TxnBegin(int flags=DB_TXN_WRITE_NOSYNC) + { + DbTxn* ptxn = NULL; + int ret = dbenv.txn_begin(NULL, &ptxn, flags); + if (!ptxn || ret != 0) + return NULL; + return ptxn; + } +}; + +extern CDBEnv bitdb; + + +/** RAII class that provides access to a Berkeley database */ +class CDB +{ +protected: + Db* pdb; + std::string strFile; + DbTxn *activeTxn; + bool fReadOnly; + + explicit CDB(const char* pszFile, const char* pszMode="r+"); + ~CDB() { Close(); } +public: + void Flush(); + void Close(); +private: + CDB(const CDB&); + void operator=(const CDB&); + +protected: + template + bool Read(const K& key, T& value) + { + if (!pdb) + return false; + + // Key + CDataStream ssKey(SER_DISK, CLIENT_VERSION); + ssKey.reserve(1000); + ssKey << key; + Dbt datKey(&ssKey[0], ssKey.size()); + + // Read + Dbt datValue; + datValue.set_flags(DB_DBT_MALLOC); + int ret = pdb->get(activeTxn, &datKey, &datValue, 0); + memset(datKey.get_data(), 0, datKey.get_size()); + if (datValue.get_data() == NULL) + return false; + + // Unserialize value + try { + CDataStream ssValue((char*)datValue.get_data(), (char*)datValue.get_data() + datValue.get_size(), SER_DISK, CLIENT_VERSION); + ssValue >> value; + } + catch (std::exception &e) { + return false; + } + + // Clear and free memory + memset(datValue.get_data(), 0, datValue.get_size()); + free(datValue.get_data()); + return (ret == 0); + } + + template + bool Write(const K& key, const T& value, bool fOverwrite=true) + { + if (!pdb) + return false; + if (fReadOnly) + assert(!"Write called on database in read-only mode"); + + // Key + CDataStream ssKey(SER_DISK, CLIENT_VERSION); + ssKey.reserve(1000); + ssKey << key; + Dbt datKey(&ssKey[0], ssKey.size()); + + // Value + CDataStream ssValue(SER_DISK, CLIENT_VERSION); + ssValue.reserve(10000); + ssValue << value; + Dbt datValue(&ssValue[0], ssValue.size()); + + // Write + int ret = pdb->put(activeTxn, &datKey, &datValue, (fOverwrite ? 0 : DB_NOOVERWRITE)); + + // Clear memory in case it was a private key + memset(datKey.get_data(), 0, datKey.get_size()); + memset(datValue.get_data(), 0, datValue.get_size()); + return (ret == 0); + } + + template + bool Erase(const K& key) + { + if (!pdb) + return false; + if (fReadOnly) + assert(!"Erase called on database in read-only mode"); + + // Key + CDataStream ssKey(SER_DISK, CLIENT_VERSION); + ssKey.reserve(1000); + ssKey << key; + Dbt datKey(&ssKey[0], ssKey.size()); + + // Erase + int ret = pdb->del(activeTxn, &datKey, 0); + + // Clear memory + memset(datKey.get_data(), 0, datKey.get_size()); + return (ret == 0 || ret == DB_NOTFOUND); + } + + template + bool Exists(const K& key) + { + if (!pdb) + return false; + + // Key + CDataStream ssKey(SER_DISK, CLIENT_VERSION); + ssKey.reserve(1000); + ssKey << key; + Dbt datKey(&ssKey[0], ssKey.size()); + + // Exists + int ret = pdb->exists(activeTxn, &datKey, 0); + + // Clear memory + memset(datKey.get_data(), 0, datKey.get_size()); + return (ret == 0); + } + + Dbc* GetCursor() + { + if (!pdb) + return NULL; + Dbc* pcursor = NULL; + int ret = pdb->cursor(NULL, &pcursor, 0); + if (ret != 0) + return NULL; + return pcursor; + } + + int ReadAtCursor(Dbc* pcursor, CDataStream& ssKey, CDataStream& ssValue, unsigned int fFlags=DB_NEXT) + { + // Read at cursor + Dbt datKey; + if (fFlags == DB_SET || fFlags == DB_SET_RANGE || fFlags == DB_GET_BOTH || fFlags == DB_GET_BOTH_RANGE) + { + datKey.set_data(&ssKey[0]); + datKey.set_size(ssKey.size()); + } + Dbt datValue; + if (fFlags == DB_GET_BOTH || fFlags == DB_GET_BOTH_RANGE) + { + datValue.set_data(&ssValue[0]); + datValue.set_size(ssValue.size()); + } + datKey.set_flags(DB_DBT_MALLOC); + datValue.set_flags(DB_DBT_MALLOC); + int ret = pcursor->get(&datKey, &datValue, fFlags); + if (ret != 0) + return ret; + else if (datKey.get_data() == NULL || datValue.get_data() == NULL) + return 99999; + + // Convert to streams + ssKey.SetType(SER_DISK); + ssKey.clear(); + ssKey.write((char*)datKey.get_data(), datKey.get_size()); + ssValue.SetType(SER_DISK); + ssValue.clear(); + ssValue.write((char*)datValue.get_data(), datValue.get_size()); + + // Clear and free memory + memset(datKey.get_data(), 0, datKey.get_size()); + memset(datValue.get_data(), 0, datValue.get_size()); + free(datKey.get_data()); + free(datValue.get_data()); + return 0; + } + +public: + bool TxnBegin() + { + if (!pdb || activeTxn) + return false; + DbTxn* ptxn = bitdb.TxnBegin(); + if (!ptxn) + return false; + activeTxn = ptxn; + return true; + } + + bool TxnCommit() + { + if (!pdb || !activeTxn) + return false; + int ret = activeTxn->commit(0); + activeTxn = NULL; + return (ret == 0); + } + + bool TxnAbort() + { + if (!pdb || !activeTxn) + return false; + int ret = activeTxn->abort(); + activeTxn = NULL; + return (ret == 0); + } + + bool ReadVersion(int& nVersion) + { + nVersion = 0; + return Read(std::string("version"), nVersion); + } + + bool WriteVersion(int nVersion) + { + return Write(std::string("version"), nVersion); + } + + bool static Rewrite(const std::string& strFile, const char* pszSkip = NULL); +}; + +#endif // BITMARK_DB_H diff --git a/src/hash.h b/src/hash.h index fa4e346..db6815c 100644 --- a/src/hash.h +++ b/src/hash.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/hash.h~ b/src/hash.h~ new file mode 100644 index 0000000..db5faac --- /dev/null +++ b/src/hash.h~ @@ -0,0 +1,140 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_HASH_H +#define BITMARK_HASH_H + +#include "serialize.h" +#include "uint256.h" +#include "version.h" + +#include + +#include +#include + +template +inline uint256 Hash(const T1 pbegin, const T1 pend) +{ + static unsigned char pblank[1]; + uint256 hash1; + SHA256((pbegin == pend ? pblank : (unsigned char*)&pbegin[0]), (pend - pbegin) * sizeof(pbegin[0]), (unsigned char*)&hash1); + uint256 hash2; + SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2); + return hash2; +} + +class CHashWriter +{ +private: + SHA256_CTX ctx; + +public: + int nType; + int nVersion; + + void Init() { + SHA256_Init(&ctx); + } + + CHashWriter(int nTypeIn, int nVersionIn) : nType(nTypeIn), nVersion(nVersionIn) { + Init(); + } + + CHashWriter& write(const char *pch, size_t size) { + SHA256_Update(&ctx, pch, size); + return (*this); + } + + // invalidates the object + uint256 GetHash() { + uint256 hash1; + SHA256_Final((unsigned char*)&hash1, &ctx); + uint256 hash2; + SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2); + return hash2; + } + + template + CHashWriter& operator<<(const T& obj) { + // Serialize to this stream + ::Serialize(*this, obj, nType, nVersion); + return (*this); + } +}; + + +template +inline uint256 Hash(const T1 p1begin, const T1 p1end, + const T2 p2begin, const T2 p2end) +{ + static unsigned char pblank[1]; + uint256 hash1; + SHA256_CTX ctx; + SHA256_Init(&ctx); + SHA256_Update(&ctx, (p1begin == p1end ? pblank : (unsigned char*)&p1begin[0]), (p1end - p1begin) * sizeof(p1begin[0])); + SHA256_Update(&ctx, (p2begin == p2end ? pblank : (unsigned char*)&p2begin[0]), (p2end - p2begin) * sizeof(p2begin[0])); + SHA256_Final((unsigned char*)&hash1, &ctx); + uint256 hash2; + SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2); + return hash2; +} + +template +inline uint256 Hash(const T1 p1begin, const T1 p1end, + const T2 p2begin, const T2 p2end, + const T3 p3begin, const T3 p3end) +{ + static unsigned char pblank[1]; + uint256 hash1; + SHA256_CTX ctx; + SHA256_Init(&ctx); + SHA256_Update(&ctx, (p1begin == p1end ? pblank : (unsigned char*)&p1begin[0]), (p1end - p1begin) * sizeof(p1begin[0])); + SHA256_Update(&ctx, (p2begin == p2end ? pblank : (unsigned char*)&p2begin[0]), (p2end - p2begin) * sizeof(p2begin[0])); + SHA256_Update(&ctx, (p3begin == p3end ? pblank : (unsigned char*)&p3begin[0]), (p3end - p3begin) * sizeof(p3begin[0])); + SHA256_Final((unsigned char*)&hash1, &ctx); + uint256 hash2; + SHA256((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2); + return hash2; +} + +template +uint256 SerializeHash(const T& obj, int nType=SER_GETHASH, int nVersion=PROTOCOL_VERSION) +{ + CHashWriter ss(nType, nVersion); + ss << obj; + return ss.GetHash(); +} + +template +inline uint160 Hash160(const T1 pbegin, const T1 pend) +{ + static unsigned char pblank[1]; + uint256 hash1; + SHA256((pbegin == pend ? pblank : (unsigned char*)&pbegin[0]), (pend - pbegin) * sizeof(pbegin[0]), (unsigned char*)&hash1); + uint160 hash2; + RIPEMD160((unsigned char*)&hash1, sizeof(hash1), (unsigned char*)&hash2); + return hash2; +} + +inline uint160 Hash160(const std::vector& vch) +{ + return Hash160(vch.begin(), vch.end()); +} + +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 a0060bf..b4d755f 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -113,7 +113,7 @@ void Shutdown() TRY_LOCK(cs_Shutdown, lockShutdown); if (!lockShutdown) return; - RenameThread("bitmark-shutoff"); + RenameThread("pfennig-shutoff"); mempool.AddTransactionsUpdated(1); StopRPCThreads(); ShutdownRPCMining(); @@ -197,7 +197,7 @@ std::string HelpMessage(HelpMessageMode hmm) 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: bitmark.conf)") + "\n"; + strUsage += " -conf= " + _("Specify configuration file (default: pfennig.conf)") + "\n"; if (hmm == HMM_BITMARKD) { #if !defined(WIN32) @@ -231,7 +231,7 @@ std::string HelpMessage(HelpMessageMode hmm) 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: P2PPORT or testnet: 1P2PPORT)") + "\n"; + strUsage += " -port= " + _("Listen for connections on (default: 40002 or testnet: 50001)") + "\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"; @@ -313,11 +313,11 @@ std::string HelpMessage(HelpMessageMode hmm) 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: RPCPORT or testnet: 1RPCPORT)") + "\n"; + strUsage += " -rpcport= " + _("Listen for JSON-RPC connections on (default: 40001 or testnet: 50000)") + "\n"; strUsage += " -rpcallowip= " + _("Allow JSON-RPC connections from specified IP address") + "\n"; strUsage += " -rpcthreads= " + _("Set the number of threads to service RPC calls (default: 4)") + "\n"; - strUsage += "\n" + _("RPC SSL options: (see the Bitmark Wiki for SSL setup instructions)") + "\n"; + strUsage += "\n" + _("RPC SSL options: (see the Pfennig 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"; @@ -341,7 +341,7 @@ struct CImportingNow void ThreadImport(std::vector vImportFiles) { - RenameThread("bitmark-loadblk"); + RenameThread("pfennig-loadblk"); // -reindex if (fReindex) { @@ -392,7 +392,7 @@ void ThreadImport(std::vector vImportFiles) } /** Sanity checks - * Ensure that Bitmark is running in a usable environment with all + * Ensure that Pfennig is running in a usable environment with all * necessary library support. */ bool InitSanityCheck(void) @@ -408,7 +408,7 @@ bool InitSanityCheck(void) return true; } -/** Initialize bitmark. +/** Initialize pfennig. * @pre Parameters should be parsed and config file should be read. */ bool AppInit2(boost::thread_group& threadGroup) @@ -610,7 +610,7 @@ bool AppInit2(boost::thread_group& threadGroup) #endif // ********************************************************* Step 4: application initialization: dir lock, daemonize, pidfile, debug log if (!InitSanityCheck()) - return InitError(_("Initialization sanity check failed. Bitmark Core is shutting down.")); + return InitError(_("Initialization sanity check failed. Pfennig Core is shutting down.")); std::string strDataDir = GetDataDir().string(); #ifdef ENABLE_WALLET diff --git a/src/init.cpp~ b/src/init.cpp~ new file mode 100644 index 0000000..8d4df7c --- /dev/null +++ b/src/init.cpp~ @@ -0,0 +1,1142 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmark-config.h" +#endif + +#include "init.h" + +#include "addrman.h" +#include "checkpoints.h" +#include "key.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; +#endif + +#ifdef WIN32 +// Win32 LevelDB doesn't use filedescriptors, and the ones used for +// accessing block files, don't count towards to fd_set size limit +// anyway. +#define MIN_CORE_FILEDESCRIPTORS 0 +#else +#define MIN_CORE_FILEDESCRIPTORS 150 +#endif + +// Used to pass flags to the Bind() function +enum BindFlags { + BF_NONE = 0, + BF_EXPLICIT = (1U << 0), + BF_REPORT_ERROR = (1U << 1) +}; + + +////////////////////////////////////////////////////////////////////////////// +// +// Shutdown +// + +// +// Thread management and startup/shutdown: +// +// The network-processing threads are all part of a thread group +// created by AppInit() or the Qt main() function. +// +// A clean exit happens when StartShutdown() or the SIGTERM +// signal handler sets fRequestShutdown, which triggers +// the DetectShutdownThread(), which interrupts the main thread group. +// DetectShutdownThread() then exits, which causes AppInit() to +// continue (it .joins the shutdown thread). +// Shutdown() is then +// called to clean up database connections, and stop other +// threads that should only be stopped after the main network-processing +// threads have exited. +// +// Note that if running -daemon the parent process returns from AppInit2 +// before adding any threads to the threadGroup, so .join_all() returns +// immediately and the parent exits from main(). +// +// Shutdown for Qt is very similar, only it uses a QTimer to detect +// fRequestShutdown getting set, and then does the normal Qt +// shutdown thing. +// + +volatile bool fRequestShutdown = false; + +void StartShutdown() +{ + fRequestShutdown = true; +} +bool ShutdownRequested() +{ + return fRequestShutdown; +} + +static CCoinsViewDB *pcoinsdbview; + +void Shutdown() +{ + LogPrintf("Shutdown : In progress...\n"); + static CCriticalSection cs_Shutdown; + TRY_LOCK(cs_Shutdown, lockShutdown); + if (!lockShutdown) return; + + RenameThread("pfennig-shutoff"); + mempool.AddTransactionsUpdated(1); + StopRPCThreads(); + ShutdownRPCMining(); +#ifdef ENABLE_WALLET + if (pwalletMain) + bitdb.Flush(false); + GenerateBitmarks(false, NULL, 0); +#endif + StopNode(); + UnregisterNodeSignals(GetNodeSignals()); + { + LOCK(cs_main); +#ifdef ENABLE_WALLET + if (pwalletMain) + pwalletMain->SetBestChain(chainActive.GetLocator()); +#endif + if (pblocktree) + pblocktree->Flush(); + if (pcoinsTip) + pcoinsTip->Flush(); + delete pcoinsTip; pcoinsTip = NULL; + delete pcoinsdbview; pcoinsdbview = NULL; + delete pblocktree; pblocktree = NULL; + } +#ifdef ENABLE_WALLET + if (pwalletMain) + bitdb.Flush(true); +#endif + boost::filesystem::remove(GetPidFile()); + UnregisterAllWallets(); +#ifdef ENABLE_WALLET + if (pwalletMain) + delete pwalletMain; +#endif + LogPrintf("Shutdown : done\n"); +} + +// +// Signal handlers are very limited in what they are allowed to do, so: +// +void HandleSIGTERM(int) +{ + fRequestShutdown = true; +} + +void HandleSIGHUP(int) +{ + fReopenDebugLog = true; +} + +bool static InitError(const std::string &str) +{ + uiInterface.ThreadSafeMessageBox(str, "", CClientUIInterface::MSG_ERROR | CClientUIInterface::NOSHOWGUI); + return false; +} + +bool static InitWarning(const std::string &str) +{ + uiInterface.ThreadSafeMessageBox(str, "", CClientUIInterface::MSG_WARNING | CClientUIInterface::NOSHOWGUI); + return true; +} + +bool static Bind(const CService &addr, unsigned int flags) { + if (!(flags & BF_EXPLICIT) && IsLimited(addr)) + return false; + std::string strError; + if (!BindListenPort(addr, strError)) { + if (flags & BF_REPORT_ERROR) + return InitError(strError); + return false; + } + return true; +} + +// 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: pfennig.conf)") + "\n"; + if (hmm == HMM_BITMARKD) + { +#if !defined(WIN32) + strUsage += " -daemon " + _("Run in the background as a daemon and accept commands") + "\n"; +#endif + } + strUsage += " -datadir= " + _("Specify data directory") + "\n"; + strUsage += " -dbcache= " + strprintf(_("Set database cache size in megabytes (%d to %d, default: %d)"), nMinDbCache, nMaxDbCache, nDefaultDbCache) + "\n"; + strUsage += " -loadblock= " + _("Imports blocks from external blk000??.dat file") + " " + _("on startup") + "\n"; + strUsage += " -maxorphanblocks= " + strprintf(_("Keep at most unconnectable blocks in memory (default: %u)"), DEFAULT_MAX_ORPHAN_BLOCKS) + "\n"; + strUsage += " -maxorphantx= " + strprintf(_("Keep at most unconnectable transactions in memory (default: %u)"), DEFAULT_MAX_ORPHAN_TRANSACTIONS) + "\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: pfennigd.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 += " -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 " + _("Query for peer addresses via DNS lookup, if low on addresses (default: 1 unless -connect)") + "\n"; + strUsage += " -forcednsseed " + _("Always query for peer addresses via DNS lookup (default: 0)") + "\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: 40002 or testnet: 50001)") + "\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"; +#else + strUsage += " -upnp " + _("Use UPnP to map the listening port (default: 0)") + "\n"; +#endif +#endif + +#ifdef ENABLE_WALLET + strUsage += "\n" + _("Wallet options:") + "\n"; + strUsage += " -disablewallet " + _("Do not load the wallet and disable wallet RPC calls") + "\n"; + strUsage += " -keypool= " + _("Set key pool size to (default: 100)") + "\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 += "\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_BITMARK_QT) + strUsage += ", qt"; + strUsage += ".\n"; +#ifdef ENABLE_WALLET + strUsage += " -gen " + _("Generate coins (default: 0)") + "\n"; + strUsage += " -genproclimit= " + _("Set the processor limit for when generation is on (-1 = unlimited, default: -1)") + "\n"; +#endif + 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"; + 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: 40001 or testnet: 50000)") + "\n"; + strUsage += " -rpcallowip= " + _("Allow JSON-RPC connections from specified IP address") + "\n"; + strUsage += " -rpcthreads= " + _("Set the number of threads to service RPC calls (default: 4)") + "\n"; + + strUsage += "\n" + _("RPC SSL options: (see the Pfennig 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.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH)") + "\n"; + + return strUsage; +} + +struct CImportingNow +{ + CImportingNow() { + assert(fImporting == false); + fImporting = true; + } + + ~CImportingNow() { + assert(fImporting == true); + fImporting = false; + } +}; + +void ThreadImport(std::vector vImportFiles) +{ + RenameThread("pfennig-loadblk"); + + // -reindex + if (fReindex) { + CImportingNow imp; + int nFile = 0; + while (true) { + CDiskBlockPos pos(nFile, 0); + FILE *file = OpenBlockFile(pos, true); + if (!file) + break; + LogPrintf("Reindexing block file blk%05u.dat...\n", (unsigned int)nFile); + LoadExternalBlockFile(file, &pos); + nFile++; + } + pblocktree->WriteReindexing(false); + fReindex = false; + LogPrintf("Reindexing finished\n"); + // To avoid ending up in a situation without genesis block, re-try initializing (no-op if reindexing worked): + InitBlockIndex(); + } + + // hardcoded $DATADIR/bootstrap.dat + filesystem::path pathBootstrap = GetDataDir() / "bootstrap.dat"; + if (filesystem::exists(pathBootstrap)) { + FILE *file = fopen(pathBootstrap.string().c_str(), "rb"); + if (file) { + CImportingNow imp; + filesystem::path pathBootstrapOld = GetDataDir() / "bootstrap.dat.old"; + LogPrintf("Importing bootstrap.dat...\n"); + LoadExternalBlockFile(file); + RenameOver(pathBootstrap, pathBootstrapOld); + } else { + LogPrintf("Warning: Could not open bootstrap file %s\n", pathBootstrap.string()); + } + } + + // -loadblock= + BOOST_FOREACH(boost::filesystem::path &path, vImportFiles) { + FILE *file = fopen(path.string().c_str(), "rb"); + if (file) { + CImportingNow imp; + LogPrintf("Importing blocks file %s...\n", path.string()); + LoadExternalBlockFile(file); + } else { + LogPrintf("Warning: Could not open blocks file %s\n", path.string()); + } + } +} + +/** Sanity checks + * Ensure that Pfennig is running in a usable environment with all + * necessary library support. + */ +bool InitSanityCheck(void) +{ + if(!ECC_InitSanityCheck()) { + InitError("OpenSSL appears to lack support for elliptic curve cryptography. For more " + "information, visit https://en.bitcoin.it/wiki/OpenSSL_and_EC_Libraries"); + return false; + } + + // TODO: remaining sanity checks, see bitcoin:#4081 + + return true; +} + +/** Initialize pfennig. + * @pre Parameters should be parsed and config file should be read. + */ +bool AppInit2(boost::thread_group& threadGroup) +{ + // ********************************************************* Step 1: setup +#ifdef _MSC_VER + // Turn off Microsoft heap dump noise + _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); + _CrtSetReportFile(_CRT_WARN, CreateFileA("NUL", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0)); +#endif +#if _MSC_VER >= 1400 + // Disable confusing "helpful" text message on abort, Ctrl-C + _set_abort_behavior(0, _WRITE_ABORT_MSG | _CALL_REPORTFAULT); +#endif +#ifdef WIN32 + // Enable Data Execution Prevention (DEP) + // 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! +#define PROCESS_DEP_ENABLE 0x00000001 +#endif + typedef BOOL (WINAPI *PSETPROCDEPPOL)(DWORD); + PSETPROCDEPPOL setProcDEPPol = (PSETPROCDEPPOL)GetProcAddress(GetModuleHandleA("Kernel32.dll"), "SetProcessDEPPolicy"); + if (setProcDEPPol != NULL) setProcDEPPol(PROCESS_DEP_ENABLE); + + // Initialize Windows Sockets + WSADATA wsadata; + int ret = WSAStartup(MAKEWORD(2,2), &wsadata); + if (ret != NO_ERROR || LOBYTE(wsadata.wVersion ) != 2 || HIBYTE(wsadata.wVersion) != 2) + { + return InitError(strprintf("Error: Winsock library failed to start (WSAStartup returned error %d)", ret)); + } +#endif +#ifndef WIN32 + umask(077); + + // Clean shutdown on SIGTERM + struct sigaction sa; + sa.sa_handler = HandleSIGTERM; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sigaction(SIGTERM, &sa, NULL); + sigaction(SIGINT, &sa, NULL); + + // Reopen debug.log on SIGHUP + struct sigaction sa_hup; + sa_hup.sa_handler = HandleSIGHUP; + 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 + + if (mapArgs.count("-bind")) { + // when specifying an explicit binding address, you want to listen on it + // even when -connect or -proxy is specified + 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 + 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 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) + 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 + 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 + 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"); + } + + // Make sure enough file descriptors are available + int nBind = std::max((int)mapArgs.count("-bind"), 1); + nMaxConnections = GetArg("-maxconnections", 125); + nMaxConnections = std::max(std::min(nMaxConnections, (int)(FD_SETSIZE - nBind - MIN_CORE_FILEDESCRIPTORS)), 0); + int nFD = RaiseFileDescriptorLimit(nMaxConnections + MIN_CORE_FILEDESCRIPTORS); + if (nFD < MIN_CORE_FILEDESCRIPTORS) + return InitError(_("Not enough file descriptors available.")); + if (nFD - MIN_CORE_FILEDESCRIPTORS < nMaxConnections) + nMaxConnections = nFD - MIN_CORE_FILEDESCRIPTORS; + + // ********************************************************* Step 3: parameter-to-internal-flags + + 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", DEFAULT_SCRIPTCHECK_THREADS); + if (nScriptCheckThreads <= 0) + nScriptCheckThreads += boost::thread::hardware_concurrency(); + if (nScriptCheckThreads <= 1) + nScriptCheckThreads = 0; + else if (nScriptCheckThreads > MAX_SCRIPTCHECK_THREADS) + nScriptCheckThreads = MAX_SCRIPTCHECK_THREADS; + + fServer = GetBoolArg("-server", false); + fPrintToConsole = GetBoolArg("-printtoconsole", false); + fLogTimestamps = GetBoolArg("-logtimestamps", true); + setvbuf(stdout, NULL, _IOLBF, 0); +#ifdef ENABLE_WALLET + bool fDisableWallet = GetBoolArg("-disablewallet", false); +#endif + + if (mapArgs.count("-timeout")) + { + int nNewTimeout = GetArg("-timeout", 5000); + if (nNewTimeout > 0 && nNewTimeout < 600000) + nConnectTimeout = nNewTimeout; + } + + // Continue to put "/P2SH/" in the coinbase to monitor + // BIP16 support. + // This can be removed eventually... + const char* pszP2SH = "/P2SH/"; + COINBASE_FLAGS << std::vector(pszP2SH, pszP2SH+strlen(pszP2SH)); + + // Fee-per-kilobyte amount considered the same as "free" + // If you are mining, be careful setting this: + // if you set it to zero then + // a transaction spammer can cheaply fill blocks using + // 1-satoshi-fee transactions. It should be set above the real + // cost to you of processing a transaction. + if (mapArgs.count("-mintxfee")) + { + 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"])); + } + if (mapArgs.count("-minrelaytxfee")) + { + 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"])); + } + +#ifdef ENABLE_WALLET + if (mapArgs.count("-paytxfee")) + { + if (!ParseMoney(mapArgs["-paytxfee"], nTransactionFee)) + 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 + if (!InitSanityCheck()) + return InitError(_("Initialization sanity check failed. Pfennig Core is shutting down.")); + + 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"), strWalletFile, strDataDir)); +#endif + // Make sure only a single Bitmark 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. Pfennig Core is probably already running."), strDataDir)); + + if (GetBoolArg("-shrinkdebugfile", !fDebug)) + ShrinkDebugFile(); + LogPrintf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); + LogPrintf("Pfennig 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) + 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 (nScriptCheckThreads) { + LogPrintf("Using %u threads for script verification\n", nScriptCheckThreads); + for (int i=0; i nets; + BOOST_FOREACH(std::string snet, mapMultiArgs["-onlynet"]) { + enum Network net = ParseNetwork(snet); + if (net == NET_UNROUTABLE) + return InitError(strprintf(_("Unknown network specified in -onlynet: '%s'"), snet)); + nets.insert(net); + } + for (int n = 0; n < NET_MAX; n++) { + enum Network net = (enum Network)n; + if (!nets.count(net)) + SetLimited(net); + } + } + + CService addrProxy; + bool fProxy = false; + if (mapArgs.count("-proxy")) { + addrProxy = CService(mapArgs["-proxy"], 9050); + if (!addrProxy.IsValid()) + return InitError(strprintf(_("Invalid -proxy address: '%s'"), mapArgs["-proxy"])); + + SetProxy(NET_IPV4, addrProxy, nSocksVersion); + if (nSocksVersion > 4) { + SetProxy(NET_IPV6, addrProxy, nSocksVersion); + SetNameProxy(addrProxy, nSocksVersion); + } + fProxy = true; + } + + // -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("-onion") && !mapArgs.count("-tor")) + addrOnion = addrProxy; + else + addrOnion = mapArgs.count("-onion")?CService(mapArgs["-onion"], 9050):CService(mapArgs["-tor"], 9050); + if (!addrOnion.IsValid()) + return InitError(strprintf(_("Invalid -onion address: '%s'"), mapArgs.count("-onion")?mapArgs["-onion"]:mapArgs["-tor"])); + SetProxy(NET_TOR, addrOnion, 5); + SetReachable(NET_TOR); + } + + // see Step 2: parameter interactions for more information about these + fNoListen = !GetBoolArg("-listen", true); + fDiscover = GetBoolArg("-discover", true); + fNameLookup = GetBoolArg("-dns", true); + + bool fBound = false; + if (!fNoListen) { + if (mapArgs.count("-bind")) { + 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)); + fBound |= Bind(addrBind, (BF_EXPLICIT | BF_REPORT_ERROR)); + } + } + else { + struct in_addr inaddr_any; + inaddr_any.s_addr = INADDR_ANY; + fBound |= Bind(CService(in6addr_any, GetListenPort()), BF_NONE); + fBound |= Bind(CService(inaddr_any, GetListenPort()), !fBound ? BF_REPORT_ERROR : BF_NONE); + } + if (!fBound) + return InitError(_("Failed to listen on any port. Use -listen=0 if you want this.")); + } + + if (mapArgs.count("-externalip")) { + BOOST_FOREACH(string strAddr, mapMultiArgs["-externalip"]) { + CService addrLocal(strAddr, GetListenPort(), fNameLookup); + if (!addrLocal.IsValid()) + return InitError(strprintf(_("Cannot resolve -externalip address: '%s'"), strAddr)); + AddLocal(CService(strAddr, GetListenPort(), fNameLookup), LOCAL_MANUAL); + } + } + + BOOST_FOREACH(string strDest, mapMultiArgs["-seednode"]) + AddOneShot(strDest); + + // ********************************************************* Step 7: load block chain + + fReindex = GetBoolArg("-reindex", false); + + // Upgrading to 0.8; hard-link the old blknnnn.dat files into /blocks/ + filesystem::path blocksDir = GetDataDir() / "blocks"; + if (!filesystem::exists(blocksDir)) + { + filesystem::create_directories(blocksDir); + bool linked = false; + for (unsigned int i = 1; i < 10000; i++) { + filesystem::path source = GetDataDir() / strprintf("blk%04u.dat", i); + if (!filesystem::exists(source)) break; + filesystem::path dest = blocksDir / strprintf("blk%05u.dat", i-1); + try { + filesystem::create_hard_link(source, dest); + 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. + LogPrintf("Error hardlinking blk%04u.dat : %s\n", i, e.what()); + break; + } + } + if (linked) + { + fReindex = true; + } + } + + // cache size calculations + size_t nTotalCache = (GetArg("-dbcache", nDefaultDbCache) << 20); + if (nTotalCache < (nMinDbCache << 20)) + nTotalCache = (nMinDbCache << 20); // total cache cannot be less than nMinDbCache + else if (nTotalCache > (nMaxDbCache << 20)) + nTotalCache = (nMaxDbCache << 20); // total cache cannot be greater than nMaxDbCache + size_t nBlockTreeDBCache = nTotalCache / 8; + if (nBlockTreeDBCache > (1 << 21) && !GetBoolArg("-txindex", false)) + nBlockTreeDBCache = (1 << 21); // block tree db cache shouldn't be larger than 2 MiB + nTotalCache -= nBlockTreeDBCache; + size_t nCoinDBCache = nTotalCache / 2; // use half of the remaining cache for coindb cache + nTotalCache -= nCoinDBCache; + nCoinCacheSize = nTotalCache / 300; // coins in memory require around 300 bytes + + bool fLoaded = false; + while (!fLoaded) { + bool fReset = fReindex; + std::string strLoadError; + + uiInterface.InitMessage(_("Loading block index...")); + + nStart = GetTimeMillis(); + do { + try { + UnloadBlockIndex(); + delete pcoinsTip; + delete pcoinsdbview; + delete pblocktree; + + pblocktree = new CBlockTreeDB(nBlockTreeDBCache, false, fReindex); + pcoinsdbview = new CCoinsViewDB(nCoinDBCache, false, fReindex); + pcoinsTip = new CCoinsViewCache(*pcoinsdbview); + + if (fReindex) + pblocktree->WriteReindexing(true); + + if (!LoadBlockIndex()) { + strLoadError = _("Error loading block database"); + break; + } + + // 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() && 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) + if (!InitBlockIndex()) { + strLoadError = _("Error initializing block database"); + break; + } + + // Check for changed -txindex state + if (fTxIndex != GetBoolArg("-txindex", false)) { + strLoadError = _("You need to rebuild the database using -reindex to change -txindex"); + break; + } + + uiInterface.InitMessage(_("Verifying blocks...")); + if (!VerifyDB(GetArg("-checklevel", 3), + 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; + } + + fLoaded = true; + } while(false); + + if (!fLoaded) { + // first suggest a reindex + if (!fReset) { + bool fRet = uiInterface.ThreadSafeMessageBox( + strLoadError + ".\n\n" + _("Do you want to rebuild the block database now?"), + "", CClientUIInterface::MSG_ERROR | CClientUIInterface::BTN_ABORT); + if (fRet) { + fReindex = true; + fRequestShutdown = false; + } else { + LogPrintf("Aborted block database rebuild. Exiting.\n"); + return false; + } + } else { + return InitError(strLoadError); + } + } + } + + // 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) + { + LogPrintf("Shutdown requested. Exiting.\n"); + return false; + } + LogPrintf(" block index %15dms\n", GetTimeMillis() - nStart); + + if (GetBoolArg("-printblockindex", false) || GetBoolArg("-printblocktree", false)) + { + PrintBlockTree(); + return false; + } + + if (mapArgs.count("-printblock")) + { + string strMatch = mapArgs["-printblock"]; + int nFound = 0; + for (map::iterator mi = mapBlockIndex.begin(); mi != mapBlockIndex.end(); ++mi) + { + uint256 hash = (*mi).first; + if (strncmp(hash.ToString().c_str(), strMatch.c_str(), strMatch.size()) == 0) + { + CBlockIndex* pindex = (*mi).second; + CBlock block; + ReadBlockFromDisk(block, pindex); + block.BuildMerkleTree(); + block.print(); + LogPrintf("\n"); + nFound++; + } + } + if (nFound == 0) + 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...")); + + pwalletMain = new CWallet(strWalletFile); + DBErrors nZapWalletRet = pwalletMain->ZapWalletTx(); + if (nZapWalletRet != DB_LOAD_OK) { + uiInterface.InitMessage(_("Error loading wallet.dat: Wallet corrupted")); + return false; + } + + delete pwalletMain; + pwalletMain = NULL; + } + + uiInterface.InitMessage(_("Loading wallet...")); + + 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 Pfennig") << "\n"; + else if (nLoadWalletRet == DB_NEED_REWRITE) + { + strErrors << _("Wallet needed to be rewritten: restart Pfennig 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 (!ActivateBestChain(state)) + strErrors << "Failed to connect best block"; + + std::vector vImportFiles; + if (mapArgs.count("-loadblock")) + { + BOOST_FOREACH(string strFile, mapMultiArgs["-loadblock"]) + vImportFiles.push_back(strFile); + } + threadGroup.create_thread(boost::bind(&ThreadImport, vImportFiles)); + + // ********************************************************* Step 10: load peers + + uiInterface.InitMessage(_("Loading addresses...")); + + nStart = GetTimeMillis(); + + { + CAddrDB adb; + if (!adb.Read(addrman)) + LogPrintf("Invalid or missing peers.dat; recreating\n"); + } + + LogPrintf("Loaded %i addresses from peers.dat %dms\n", + addrman.size(), GetTimeMillis() - nStart); + + // ********************************************************* Step 11: start node + + if (!CheckDiskSpace()) + return false; + + if (!strErrors.str().empty()) + return InitError(strErrors.str()); + + RandAddSeedPerfmon(); + + //// debug print + 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 + if (pwalletMain) + GenerateBitmarks(GetBoolArg("-gen", false), pwalletMain, GetArg("-genproclimit", -1)); +#endif + + // ********************************************************* Step 12: finished + + uiInterface.InitMessage(_("Done loading")); + +#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))); + } +#endif + + return !fRequestShutdown; +} diff --git a/src/init.h b/src/init.h index a2ebe8d..8b6c0b2 100644 --- a/src/init.h +++ b/src/init.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/init.h~ b/src/init.h~ new file mode 100644 index 0000000..5dca4d4 --- /dev/null +++ b/src/init.h~ @@ -0,0 +1,35 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_INIT_H +#define BITMARK_INIT_H + +#include + +class CWallet; + +namespace boost { + class thread_group; +}; + +extern std::string strWalletFile; +extern CWallet* pwalletMain; + +void StartShutdown(); +bool ShutdownRequested(); +void Shutdown(); +bool AppInit2(boost::thread_group& threadGroup); + +/* The help message mode determines what help message to show */ +enum HelpMessageMode +{ + HMM_BITMARKD, + HMM_BITMARK_QT +}; + +std::string HelpMessage(HelpMessageMode mode); + +#endif diff --git a/src/key.cpp b/src/key.cpp index b5b3b12..ccce1e5 100644 --- a/src/key.cpp +++ b/src/key.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/key.cpp~ b/src/key.cpp~ new file mode 100644 index 0000000..0109404 --- /dev/null +++ b/src/key.cpp~ @@ -0,0 +1,652 @@ +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 +#include +#include +#include + +// anonymous namespace with local implementation code (OpenSSL interaction) +namespace { + +// Generate a private key from just the secret parameter +int EC_KEY_regenerate_key(EC_KEY *eckey, BIGNUM *priv_key) +{ + int ok = 0; + BN_CTX *ctx = NULL; + EC_POINT *pub_key = NULL; + + if (!eckey) return 0; + + const EC_GROUP *group = EC_KEY_get0_group(eckey); + + if ((ctx = BN_CTX_new()) == NULL) + goto err; + + pub_key = EC_POINT_new(group); + + if (pub_key == NULL) + goto err; + + if (!EC_POINT_mul(group, pub_key, priv_key, NULL, NULL, ctx)) + goto err; + + EC_KEY_set_private_key(eckey,priv_key); + EC_KEY_set_public_key(eckey,pub_key); + + ok = 1; + +err: + + if (pub_key) + EC_POINT_free(pub_key); + if (ctx != NULL) + BN_CTX_free(ctx); + + return(ok); +} + +// Perform ECDSA key recovery (see SEC1 4.1.6) for curves over (mod p)-fields +// recid selects which key is recovered +// if check is non-zero, additional checks are performed +int ECDSA_SIG_recover_key_GFp(EC_KEY *eckey, ECDSA_SIG *ecsig, const unsigned char *msg, int msglen, int recid, int check) +{ + if (!eckey) return 0; + + int ret = 0; + BN_CTX *ctx = NULL; + + BIGNUM *x = NULL; + BIGNUM *e = NULL; + BIGNUM *order = NULL; + BIGNUM *sor = NULL; + BIGNUM *eor = NULL; + BIGNUM *field = NULL; + EC_POINT *R = NULL; + EC_POINT *O = NULL; + EC_POINT *Q = NULL; + BIGNUM *rr = NULL; + BIGNUM *zero = NULL; + int n = 0; + int i = recid / 2; + + const EC_GROUP *group = EC_KEY_get0_group(eckey); + if ((ctx = BN_CTX_new()) == NULL) { ret = -1; goto err; } + BN_CTX_start(ctx); + order = BN_CTX_get(ctx); + if (!EC_GROUP_get_order(group, order, ctx)) { ret = -2; goto err; } + x = BN_CTX_get(ctx); + if (!BN_copy(x, order)) { ret=-1; goto err; } + if (!BN_mul_word(x, i)) { ret=-1; goto err; } + if (!BN_add(x, x, ecsig->r)) { ret=-1; goto err; } + field = BN_CTX_get(ctx); + if (!EC_GROUP_get_curve_GFp(group, field, NULL, NULL, ctx)) { ret=-2; goto err; } + if (BN_cmp(x, field) >= 0) { ret=0; goto err; } + if ((R = EC_POINT_new(group)) == NULL) { ret = -2; goto err; } + if (!EC_POINT_set_compressed_coordinates_GFp(group, R, x, recid % 2, ctx)) { ret=0; goto err; } + if (check) + { + if ((O = EC_POINT_new(group)) == NULL) { ret = -2; goto err; } + if (!EC_POINT_mul(group, O, NULL, R, order, ctx)) { ret=-2; goto err; } + if (!EC_POINT_is_at_infinity(group, O)) { ret = 0; goto err; } + } + if ((Q = EC_POINT_new(group)) == NULL) { ret = -2; goto err; } + n = EC_GROUP_get_degree(group); + e = BN_CTX_get(ctx); + if (!BN_bin2bn(msg, msglen, e)) { ret=-1; goto err; } + if (8*msglen > n) BN_rshift(e, e, 8-(n & 7)); + zero = BN_CTX_get(ctx); + if (!BN_zero(zero)) { ret=-1; goto err; } + if (!BN_mod_sub(e, zero, e, order, ctx)) { ret=-1; goto err; } + rr = BN_CTX_get(ctx); + if (!BN_mod_inverse(rr, ecsig->r, order, ctx)) { ret=-1; goto err; } + sor = BN_CTX_get(ctx); + if (!BN_mod_mul(sor, ecsig->s, rr, order, ctx)) { ret=-1; goto err; } + eor = BN_CTX_get(ctx); + if (!BN_mod_mul(eor, e, rr, order, ctx)) { ret=-1; goto err; } + if (!EC_POINT_mul(group, Q, eor, R, sor, ctx)) { ret=-2; goto err; } + if (!EC_KEY_set_public_key(eckey, Q)) { ret=-2; goto err; } + + ret = 1; + +err: + if (ctx) { + BN_CTX_end(ctx); + BN_CTX_free(ctx); + } + if (R != NULL) EC_POINT_free(R); + if (O != NULL) EC_POINT_free(O); + if (Q != NULL) EC_POINT_free(Q); + return ret; +} + +// RAII Wrapper around OpenSSL's EC_KEY +class CECKey { +private: + EC_KEY *pkey; + +public: + CECKey() { + pkey = EC_KEY_new_by_curve_name(NID_secp256k1); + assert(pkey != NULL); + } + + ~CECKey() { + EC_KEY_free(pkey); + } + + void GetSecretBytes(unsigned char vch[32]) const { + const BIGNUM *bn = EC_KEY_get0_private_key(pkey); + assert(bn); + int nBytes = BN_num_bytes(bn); + int n=BN_bn2bin(bn,&vch[32 - nBytes]); + assert(n == nBytes); + memset(vch, 0, 32 - nBytes); + } + + void SetSecretBytes(const unsigned char vch[32]) { + bool ret; + BIGNUM bn; + BN_init(&bn); + ret = BN_bin2bn(vch, 32, &bn); + assert(ret); + ret = EC_KEY_regenerate_key(pkey, &bn); + assert(ret); + BN_clear_free(&bn); + } + + void GetPrivKey(CPrivKey &privkey, bool fCompressed) { + EC_KEY_set_conv_form(pkey, fCompressed ? POINT_CONVERSION_COMPRESSED : POINT_CONVERSION_UNCOMPRESSED); + int nSize = i2d_ECPrivateKey(pkey, NULL); + assert(nSize); + privkey.resize(nSize); + unsigned char* pbegin = &privkey[0]; + int nSize2 = i2d_ECPrivateKey(pkey, &pbegin); + assert(nSize == nSize2); + } + + 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)) + return true; + } + return false; + } + + void GetPubKey(CPubKey &pubkey, bool fCompressed) { + EC_KEY_set_conv_form(pkey, fCompressed ? POINT_CONVERSION_COMPRESSED : POINT_CONVERSION_UNCOMPRESSED); + int nSize = i2o_ECPublicKey(pkey, NULL); + assert(nSize); + assert(nSize <= 65); + unsigned char c[65]; + unsigned char *pbegin = c; + int nSize2 = i2o_ECPublicKey(pkey, &pbegin); + assert(nSize == nSize2); + pubkey.Set(&c[0], &c[nSize]); + } + + bool SetPubKey(const CPubKey &pubkey) { + const unsigned char* pbegin = pubkey.begin(); + return o2i_ECPublicKey(&pkey, &pbegin, pubkey.size()); + } + + 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 + 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; + } + + bool Verify(const uint256 &hash, const std::vector& vchSig) { + if (vchSig.empty()) + return false; + // New versions of OpenSSL will reject non-canonical DER signatures. de/re-serialize first. + unsigned char *norm_der = NULL; + ECDSA_SIG *norm_sig = ECDSA_SIG_new(); + const unsigned char* sigptr = &vchSig[0]; + assert(norm_sig); + if (d2i_ECDSA_SIG(&norm_sig, &sigptr, vchSig.size()) == NULL) + { + /* As of OpenSSL 1.0.0p d2i_ECDSA_SIG frees and nulls the pointer on + * error. But OpenSSL's own use of this function redundantly frees the + * result. As ECDSA_SIG_free(NULL) is a no-op, and in the absence of a + * clear contract for the function behaving the same way is more + * conservative. + */ + ECDSA_SIG_free(norm_sig); + return false; + } + int derlen = i2d_ECDSA_SIG(norm_sig, &norm_der); + ECDSA_SIG_free(norm_sig); + if (derlen <= 0) + return false; + return true; + + // -1 = error, 0 = bad sig, 1 = good + bool ret = ECDSA_verify(0, (unsigned char*)&hash, sizeof(hash), norm_der, derlen, pkey) == 1; + OPENSSL_free(norm_der); + return ret; + } + + bool SignCompact(const uint256 &hash, unsigned char *p64, int &rec) { + bool fOk = false; + ECDSA_SIG *sig = ECDSA_do_sign((unsigned char*)&hash, sizeof(hash), pkey); + if (sig==NULL) + return false; + memset(p64, 0, 64); + int nBitsR = BN_num_bits(sig->r); + int nBitsS = BN_num_bits(sig->s); + if (nBitsR <= 256 && nBitsS <= 256) { + CPubKey pubkey; + GetPubKey(pubkey, true); + for (int i=0; i<4; i++) { + CECKey keyRec; + if (ECDSA_SIG_recover_key_GFp(keyRec.pkey, sig, (unsigned char*)&hash, sizeof(hash), i, 1) == 1) { + CPubKey pubkeyRec; + keyRec.GetPubKey(pubkeyRec, true); + if (pubkeyRec == pubkey) { + rec = i; + fOk = true; + break; + } + } + } + assert(fOk); + BN_bn2bin(sig->r,&p64[32-(nBitsR+7)/8]); + BN_bn2bin(sig->s,&p64[64-(nBitsS+7)/8]); + } + ECDSA_SIG_free(sig); + return fOk; + } + + // reconstruct public key from a compact signature + // This is only slightly more CPU intensive than just verifying it. + // If this function succeeds, the recovered public key is guaranteed to be valid + // (the signature is a valid signature of the given data for that key) + bool Recover(const uint256 &hash, const unsigned char *p64, int rec) + { + if (rec<0 || rec>=3) + return false; + ECDSA_SIG *sig = ECDSA_SIG_new(); + BN_bin2bn(&p64[0], 32, sig->r); + BN_bin2bn(&p64[32], 32, sig->s); + bool ret = ECDSA_SIG_recover_key_GFp(pkey, sig, (unsigned char*)&hash, sizeof(hash), rec, 0) == 1; + 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 + +bool CKey::Check(const unsigned char *vch) { + // Do not convert to OpenSSL's data structures for range-checking keys, + // it's easy enough to do directly. + static const unsigned char vchMax[32] = { + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE, + 0xBA,0xAE,0xDC,0xE6,0xAF,0x48,0xA0,0x3B, + 0xBF,0xD2,0x5E,0x8C,0xD0,0x36,0x41,0x40 + }; + bool fIsZero = true; + for (int i=0; i<32 && fIsZero; i++) + if (vch[i] != 0) + fIsZero = false; + if (fIsZero) + return false; + for (int i=0; i<32; i++) { + if (vch[i] < vchMax[i]) + return true; + if (vch[i] > vchMax[i]) + return false; + } + return true; +} + +void CKey::MakeNewKey(bool fCompressedIn) { + do { + RAND_bytes(vch, sizeof(vch)); + } while (!Check(vch)); + fValid = true; + fCompressed = fCompressedIn; +} + +bool CKey::SetPrivKey(const CPrivKey &privkey, bool fCompressedIn) { + CECKey key; + if (!key.SetPrivKey(privkey)) + return false; + key.GetSecretBytes(vch); + fCompressed = fCompressedIn; + fValid = true; + return true; +} + +CPrivKey CKey::GetPrivKey() const { + assert(fValid); + CECKey key; + key.SetSecretBytes(vch); + CPrivKey privkey; + key.GetPrivKey(privkey, fCompressed); + return privkey; +} + +CPubKey CKey::GetPubKey() const { + assert(fValid); + CECKey key; + key.SetSecretBytes(vch); + CPubKey pubkey; + key.GetPubKey(pubkey, fCompressed); + return pubkey; +} + +bool CKey::Sign(const uint256 &hash, std::vector& vchSig) const { + if (!fValid) + return false; + CECKey key; + key.SetSecretBytes(vch); + return key.Sign(hash, vchSig); +} + +bool CKey::SignCompact(const uint256 &hash, std::vector& vchSig) const { + if (!fValid) + return false; + CECKey key; + key.SetSecretBytes(vch); + vchSig.resize(65); + int rec = -1; + if (!key.SignCompact(hash, &vchSig[1], rec)) + return false; + assert(rec != -1); + vchSig[0] = 27 + rec + (fCompressed ? 4 : 0); + 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; + CECKey key; + if (!key.SetPubKey(*this)) + return false; + if (!key.Verify(hash, vchSig)) + return false; + return true; +} + +bool CPubKey::RecoverCompact(const uint256 &hash, const std::vector& vchSig) { + if (vchSig.size() != 65) + return false; + CECKey key; + if (!key.Recover(hash, &vchSig[1], (vchSig[0] - 27) & ~4)) + return false; + key.GetPubKey(*this, (vchSig[0] - 27) & 4); + return true; +} + +bool CPubKey::VerifyCompact(const uint256 &hash, const std::vector& vchSig) const { + if (!IsValid()) + return false; + if (vchSig.size() != 65) + return false; + CECKey key; + if (!key.Recover(hash, &vchSig[1], (vchSig[0] - 27) & ~4)) + return false; + CPubKey pubkeyRec; + key.GetPubKey(pubkeyRec, IsCompressed()); + if (*this != pubkeyRec) + return false; + return true; +} + +bool CPubKey::IsFullyValid() const { + if (!IsValid()) + return false; + CECKey key; + if (!key.SetPubKey(*this)) + return false; + return true; +} + +bool CPubKey::Decompress() { + if (!IsValid()) + return false; + CECKey key; + if (!key.SetPubKey(*this)) + return false; + 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); +} + +bool ECC_InitSanityCheck() { + EC_KEY *pkey = EC_KEY_new_by_curve_name(NID_secp256k1); + if(pkey == NULL) + return false; + EC_KEY_free(pkey); + + return true; +} diff --git a/src/key.h b/src/key.h index 921b1e2..bcfc6a4 100644 --- a/src/key.h +++ b/src/key.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/key.h~ b/src/key.h~ new file mode 100644 index 0000000..edade8c --- /dev/null +++ b/src/key.h~ @@ -0,0 +1,314 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_KEY_H +#define BITMARK_KEY_H + +#include "allocators.h" +#include "hash.h" +#include "serialize.h" +#include "uint256.h" + +#include +#include + +// secp256k1: +// const unsigned int PRIVATE_KEY_SIZE = 279; +// const unsigned int PUBLIC_KEY_SIZE = 65; +// const unsigned int SIGNATURE_SIZE = 72; +// +// see www.keylength.com +// script supports up to 75 for single byte push + +/** A reference to a CKey: the Hash160 of its serialized public key */ +class CKeyID : public uint160 +{ +public: + CKeyID() : uint160(0) { } + CKeyID(const uint160 &in) : uint160(in) { } +}; + +/** A reference to a CScript: the Hash160 of its serialization (see script.h) */ +class CScriptID : public uint160 +{ +public: + CScriptID() : uint160(0) { } + CScriptID(const uint160 &in) : uint160(in) { } +}; + +/** An encapsulated public key. */ +class CPubKey { +private: + // Just store the serialized data. + // Its length can very cheaply be computed from the first byte. + unsigned char vch[65]; + + // Compute the length of a pubkey with a given first byte. + unsigned int static GetLen(unsigned char chHeader) { + if (chHeader == 2 || chHeader == 3) + return 33; + if (chHeader == 4 || chHeader == 6 || chHeader == 7) + return 65; + return 0; + } + + // Set this key data to be invalid + void Invalidate() { + vch[0] = 0xFF; + } + +public: + // Construct an invalid public key. + CPubKey() { + Invalidate(); + } + + // Initialize a public key using begin/end iterators to byte data. + template + void Set(const T pbegin, const T pend) { + int len = pend == pbegin ? 0 : GetLen(pbegin[0]); + if (len && len == (pend-pbegin)) + memcpy(vch, (unsigned char*)&pbegin[0], len); + else + Invalidate(); + } + + // Construct a public key using begin/end iterators to byte data. + template + CPubKey(const T pbegin, const T pend) { + Set(pbegin, pend); + } + + // Construct a public key from a byte vector. + CPubKey(const std::vector &vch) { + Set(vch.begin(), vch.end()); + } + + // Simple read-only vector-like interface to the pubkey data. + unsigned int size() const { return GetLen(vch[0]); } + const unsigned char *begin() const { return vch; } + const unsigned char *end() const { return vch+size(); } + const unsigned char &operator[](unsigned int pos) const { return vch[pos]; } + + // Comparator implementation. + friend bool operator==(const CPubKey &a, const CPubKey &b) { + return a.vch[0] == b.vch[0] && + memcmp(a.vch, b.vch, a.size()) == 0; + } + friend bool operator!=(const CPubKey &a, const CPubKey &b) { + return !(a == b); + } + friend bool operator<(const CPubKey &a, const CPubKey &b) { + return a.vch[0] < b.vch[0] || + (a.vch[0] == b.vch[0] && memcmp(a.vch, b.vch, a.size()) < 0); + } + + // Implement serialization, as if this was a byte vector. + unsigned int GetSerializeSize(int nType, int nVersion) const { + return size() + 1; + } + template void Serialize(Stream &s, int nType, int nVersion) const { + unsigned int len = size(); + ::WriteCompactSize(s, len); + s.write((char*)vch, len); + } + template void Unserialize(Stream &s, int nType, int nVersion) { + unsigned int len = ::ReadCompactSize(s); + if (len <= 65) { + s.read((char*)vch, len); + } else { + // invalid pubkey, skip available data + char dummy; + while (len--) + s.read(&dummy, 1); + Invalidate(); + } + } + + // Get the KeyID of this public key (hash of its serialization) + CKeyID GetID() const { + return CKeyID(Hash160(vch, vch+size())); + } + + // Get the 256-bit hash of this public key. + uint256 GetHash() const { + return Hash(vch, vch+size()); + } + + // Check syntactic correctness. + // + // Note that this is consensus critical as CheckSig() calls it! + bool IsValid() const { + return size() > 0; + } + + // fully validate whether this is a valid public key (more expensive than IsValid()) + bool IsFullyValid() const; + + // Check whether this is a compressed public key. + bool IsCompressed() const { + return size() == 33; + } + + // Verify a DER signature (~72 bytes). + // If this public key is not fully valid, the return value will be false. + bool Verify(const uint256 &hash, const std::vector& vchSig) const; + + // Verify a compact signature (~65 bytes). + // See CKey::SignCompact. + bool VerifyCompact(const uint256 &hash, const std::vector& vchSig) const; + + // Recover a public key from a compact signature. + bool RecoverCompact(const uint256 &hash, const std::vector& vchSig); + + // 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; +}; + + +// secure_allocator is defined in allocators.h +// CPrivKey is a serialized private key, with all parameters included (279 bytes) +typedef std::vector > CPrivKey; + +/** An encapsulated private key. */ +class CKey { +private: + // Whether this private key is valid. We check for correctness when modifying the key + // data, so fValid should always correspond to the actual state. + bool fValid; + + // Whether the public key corresponding to this private key is (to be) compressed. + bool fCompressed; + + // The actual byte data + unsigned char vch[32]; + + // Check whether the 32-byte array pointed to be vch is valid keydata. + bool static Check(const unsigned char *vch); +public: + + // Construct an invalid private key. + CKey() : fValid(false) { + LockObject(vch); + } + + // Copy constructor. This is necessary because of memlocking. + CKey(const CKey &secret) : fValid(secret.fValid), fCompressed(secret.fCompressed) { + LockObject(vch); + memcpy(vch, secret.vch, sizeof(vch)); + } + + // Destructor (again necessary because of memlocking). + ~CKey() { + 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) { + if (pend - pbegin != 32) { + fValid = false; + return; + } + if (Check(&pbegin[0])) { + memcpy(vch, (unsigned char*)&pbegin[0], 32); + fValid = true; + fCompressed = fCompressedIn; + } else { + fValid = false; + } + } + + // Simple read-only vector-like interface. + unsigned int size() const { return (fValid ? 32 : 0); } + const unsigned char *begin() const { return vch; } + const unsigned char *end() const { return vch + size(); } + + // Check whether this private key is valid. + bool IsValid() const { return fValid; } + + // Check whether the public key corresponding to this private key is (to be) compressed. + bool IsCompressed() const { return fCompressed; } + + // Initialize from a CPrivKey (serialized OpenSSL private key data). + bool SetPrivKey(const CPrivKey &vchPrivKey, bool fCompressed); + + // Generate a new private key using a cryptographic PRNG. + void MakeNewKey(bool fCompressed); + + // Convert the private key to a CPrivKey (serialized OpenSSL private key data). + // This is expensive. + CPrivKey GetPrivKey() const; + + // Compute the public key from a private key. + // This is expensive. + CPubKey GetPubKey() const; + + // Create a DER-serialized signature. + bool Sign(const uint256 &hash, std::vector& vchSig) const; + + // Create a compact signature (65 bytes), which allows reconstructing the used public key. + // The format is one header byte, followed by two times 32 bytes for the serialized r and s values. + // The header byte: 0x1B = first key with even y, 0x1C = first key with odd y, + // 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); +}; + +/** Check that required EC support is available at runtime */ +bool ECC_InitSanityCheck(void); + +#endif diff --git a/src/keystore.cpp b/src/keystore.cpp index 2387fe5..9743701 100644 --- a/src/keystore.cpp +++ b/src/keystore.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/keystore.cpp~ b/src/keystore.cpp~ new file mode 100644 index 0000000..1a54c38 --- /dev/null +++ b/src/keystore.cpp~ @@ -0,0 +1,62 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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; + if (!GetKey(address, key)) + return false; + vchPubKeyOut = key.GetPubKey(); + return true; +} + +bool CKeyStore::AddKey(const CKey &key) { + return AddKeyPubKey(key, key.GetPubKey()); +} + +bool CBasicKeyStore::AddKeyPubKey(const CKey& key, const CPubKey &pubkey) +{ + LOCK(cs_KeyStore); + mapKeys[pubkey.GetID()] = key; + return true; +} + +bool CBasicKeyStore::AddCScript(const CScript& redeemScript) +{ + if (redeemScript.size() > MAX_SCRIPT_ELEMENT_SIZE) + return error("CBasicKeyStore::AddCScript() : redeemScripts > %i bytes are invalid", MAX_SCRIPT_ELEMENT_SIZE); + + LOCK(cs_KeyStore); + mapScripts[redeemScript.GetID()] = redeemScript; + return true; +} + +bool CBasicKeyStore::HaveCScript(const CScriptID& hash) const +{ + LOCK(cs_KeyStore); + return mapScripts.count(hash) > 0; +} + +bool CBasicKeyStore::GetCScript(const CScriptID &hash, CScript& redeemScriptOut) const +{ + LOCK(cs_KeyStore); + ScriptMap::const_iterator mi = mapScripts.find(hash); + if (mi != mapScripts.end()) + { + redeemScriptOut = (*mi).second; + return true; + } + return false; +} + diff --git a/src/keystore.h b/src/keystore.h index 7743b9b..b15c6ab 100644 --- a/src/keystore.h +++ b/src/keystore.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/keystore.h~ b/src/keystore.h~ new file mode 100644 index 0000000..642419b --- /dev/null +++ b/src/keystore.h~ @@ -0,0 +1,97 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_KEYSTORE_H +#define BITMARK_KEYSTORE_H + +#include "key.h" +#include "sync.h" + +#include + +class CScript; + +/** A virtual base class for key stores */ +class CKeyStore +{ +protected: + mutable CCriticalSection cs_KeyStore; + +public: + virtual ~CKeyStore() {} + + // Add a key to the store. + virtual bool AddKeyPubKey(const CKey &key, const CPubKey &pubkey) =0; + virtual bool AddKey(const CKey &key); + + // Check whether a key corresponding to a given address is present in the store. + virtual bool HaveKey(const CKeyID &address) const =0; + virtual bool GetKey(const CKeyID &address, CKey& keyOut) const =0; + virtual void GetKeys(std::set &setAddress) const =0; + virtual bool GetPubKey(const CKeyID &address, CPubKey& vchPubKeyOut) const; + + // 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; +}; + +typedef std::map KeyMap; +typedef std::map ScriptMap; + +/** Basic key store, that keeps keys in an address->secret map */ +class CBasicKeyStore : public CKeyStore +{ +protected: + KeyMap mapKeys; + ScriptMap mapScripts; + +public: + bool AddKeyPubKey(const CKey& key, const CPubKey &pubkey); + bool HaveKey(const CKeyID &address) const + { + bool result; + { + LOCK(cs_KeyStore); + result = (mapKeys.count(address) > 0); + } + return result; + } + void GetKeys(std::set &setAddress) const + { + setAddress.clear(); + { + LOCK(cs_KeyStore); + KeyMap::const_iterator mi = mapKeys.begin(); + while (mi != mapKeys.end()) + { + setAddress.insert((*mi).first); + mi++; + } + } + } + bool GetKey(const CKeyID &address, CKey &keyOut) const + { + { + LOCK(cs_KeyStore); + KeyMap::const_iterator mi = mapKeys.find(address); + if (mi != mapKeys.end()) + { + keyOut = mi->second; + return true; + } + } + return false; + } + virtual bool AddCScript(const CScript& redeemScript); + virtual bool HaveCScript(const CScriptID &hash) const; + virtual bool GetCScript(const CScriptID &hash, CScript& redeemScriptOut) const; +}; + +typedef std::vector > CKeyingMaterial; +typedef std::map > > CryptedKeyMap; + +#endif diff --git a/src/leveldbwrapper.cpp b/src/leveldbwrapper.cpp index 760b988..9972a74 100644 --- a/src/leveldbwrapper.cpp +++ b/src/leveldbwrapper.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/leveldbwrapper.cpp~ b/src/leveldbwrapper.cpp~ new file mode 100644 index 0000000..c5846e3 --- /dev/null +++ b/src/leveldbwrapper.cpp~ @@ -0,0 +1,78 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "leveldbwrapper.h" + +#include "util.h" + +#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()) + throw leveldb_error("Database I/O error"); + if (status.IsNotFound()) + throw leveldb_error("Database entry missing"); + throw leveldb_error("Unknown database error"); +} + +static leveldb::Options GetOptions(size_t nCacheSize) { + leveldb::Options options; + options.block_cache = leveldb::NewLRUCache(nCacheSize / 2); + options.write_buffer_size = nCacheSize / 4; // up to two write buffers may be held in memory simultaneously + options.filter_policy = leveldb::NewBloomFilterPolicy(10); + options.compression = leveldb::kNoCompression; + options.max_open_files = 64; + return options; +} + +CLevelDBWrapper::CLevelDBWrapper(const boost::filesystem::path &path, size_t nCacheSize, bool fMemory, bool fWipe) { + penv = NULL; + readoptions.verify_checksums = true; + iteroptions.verify_checksums = true; + iteroptions.fill_cache = false; + syncoptions.sync = true; + options = GetOptions(nCacheSize); + options.create_if_missing = true; + if (fMemory) { + penv = leveldb::NewMemEnv(leveldb::Env::Default()); + options.env = penv; + } else { + if (fWipe) { + LogPrintf("Wiping LevelDB in %s\n", path.string()); + leveldb::DestroyDB(path.string(), options); + } + TryCreateDirectory(path); + LogPrintf("Opening LevelDB in %s\n", path.string()); + } + leveldb::Status status = leveldb::DB::Open(options, path.string(), &pdb); + HandleError(status); + LogPrintf("Opened LevelDB successfully\n"); +} + +CLevelDBWrapper::~CLevelDBWrapper() { + delete pdb; + pdb = NULL; + delete options.filter_policy; + options.filter_policy = NULL; + delete options.block_cache; + options.block_cache = NULL; + delete penv; + options.env = NULL; +} + +bool CLevelDBWrapper::WriteBatch(CLevelDBBatch &batch, bool fSync) throw(leveldb_error) { + leveldb::Status status = pdb->Write(fSync ? syncoptions : writeoptions, &batch.batch); + HandleError(status); + return true; +} diff --git a/src/leveldbwrapper.h b/src/leveldbwrapper.h index a7935bd..8cd15d8 100644 --- a/src/leveldbwrapper.h +++ b/src/leveldbwrapper.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/leveldbwrapper.h~ b/src/leveldbwrapper.h~ new file mode 100644 index 0000000..6d322b7 --- /dev/null +++ b/src/leveldbwrapper.h~ @@ -0,0 +1,156 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_LEVELDBWRAPPER_H +#define BITMARK_LEVELDBWRAPPER_H + +#include "serialize.h" +#include "util.h" +#include "version.h" + +#include +#include +#include + +class leveldb_error : public std::runtime_error +{ +public: + leveldb_error(const std::string &msg) : std::runtime_error(msg) {} +}; + +void HandleError(const leveldb::Status &status) throw(leveldb_error); + +// Batch of changes queued to be written to a CLevelDBWrapper +class CLevelDBBatch +{ + friend class CLevelDBWrapper; + +private: + leveldb::WriteBatch batch; + +public: + template void Write(const K& key, const V& value) { + CDataStream ssKey(SER_DISK, CLIENT_VERSION); + ssKey.reserve(ssKey.GetSerializeSize(key)); + ssKey << key; + leveldb::Slice slKey(&ssKey[0], ssKey.size()); + + CDataStream ssValue(SER_DISK, CLIENT_VERSION); + ssValue.reserve(ssValue.GetSerializeSize(value)); + ssValue << value; + leveldb::Slice slValue(&ssValue[0], ssValue.size()); + + batch.Put(slKey, slValue); + } + + template void Erase(const K& key) { + CDataStream ssKey(SER_DISK, CLIENT_VERSION); + ssKey.reserve(ssKey.GetSerializeSize(key)); + ssKey << key; + leveldb::Slice slKey(&ssKey[0], ssKey.size()); + + batch.Delete(slKey); + } +}; + +class CLevelDBWrapper +{ +private: + // custom environment this database is using (may be NULL in case of default environment) + leveldb::Env *penv; + + // database options used + leveldb::Options options; + + // options used when reading from the database + leveldb::ReadOptions readoptions; + + // options used when iterating over values of the database + leveldb::ReadOptions iteroptions; + + // options used when writing to the database + leveldb::WriteOptions writeoptions; + + // options used when sync writing to the database + leveldb::WriteOptions syncoptions; + + // the database itself + leveldb::DB *pdb; + +public: + 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); + ssKey.reserve(ssKey.GetSerializeSize(key)); + ssKey << key; + leveldb::Slice slKey(&ssKey[0], ssKey.size()); + + std::string strValue; + leveldb::Status status = pdb->Get(readoptions, slKey, &strValue); + if (!status.ok()) { + if (status.IsNotFound()) + return false; + LogPrintf("LevelDB read failure: %s\n", status.ToString().c_str()); + HandleError(status); + } + try { + CDataStream ssValue(strValue.data(), strValue.data() + strValue.size(), SER_DISK, CLIENT_VERSION); + ssValue >> value; + } catch(std::exception &e) { + return false; + } + return true; + } + + template bool Write(const K& key, const V& value, bool fSync = false) throw(leveldb_error) { + CLevelDBBatch batch; + batch.Write(key, value); + return WriteBatch(batch, fSync); + } + + template bool Exists(const K& key) throw(leveldb_error) { + CDataStream ssKey(SER_DISK, CLIENT_VERSION); + ssKey.reserve(ssKey.GetSerializeSize(key)); + ssKey << key; + leveldb::Slice slKey(&ssKey[0], ssKey.size()); + + std::string strValue; + leveldb::Status status = pdb->Get(readoptions, slKey, &strValue); + if (!status.ok()) { + if (status.IsNotFound()) + return false; + LogPrintf("LevelDB read failure: %s\n", status.ToString().c_str()); + HandleError(status); + } + return true; + } + + template bool Erase(const K& key, bool fSync = false) throw(leveldb_error) { + CLevelDBBatch batch; + batch.Erase(key); + return WriteBatch(batch, fSync); + } + + bool WriteBatch(CLevelDBBatch &batch, bool fSync = false) throw(leveldb_error); + + // not available for LevelDB; provide for compatibility with BDB + bool Flush() { + return true; + } + + bool Sync() throw(leveldb_error) { + CLevelDBBatch batch; + return WriteBatch(batch, true); + } + + // not exactly clean encapsulation, but it's easiest for now + leveldb::Iterator *NewIterator() { + return pdb->NewIterator(iteroptions); + } +}; + +#endif // BITMARK_LEVELDBWRAPPER_H diff --git a/src/limitedmap.h b/src/limitedmap.h index c10b0ac..d423720 100644 --- a/src/limitedmap.h +++ b/src/limitedmap.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/limitedmap.h~ b/src/limitedmap.h~ new file mode 100644 index 0000000..9451739 --- /dev/null +++ b/src/limitedmap.h~ @@ -0,0 +1,102 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_LIMITEDMAP_H +#define BITMARK_LIMITEDMAP_H + +#include // TODO: remove +#include + +/** STL-like map container that only keeps the N elements with the highest value. */ +template class limitedmap +{ +public: + typedef K key_type; + typedef V mapped_type; + typedef std::pair value_type; + typedef typename std::map::const_iterator const_iterator; + typedef typename std::map::size_type size_type; + +protected: + std::map map; + typedef typename std::map::iterator iterator; + std::multimap rmap; + typedef typename std::multimap::iterator rmap_iterator; + size_type nMaxSize; + +public: + limitedmap(size_type nMaxSizeIn = 0) { nMaxSize = nMaxSizeIn; } + const_iterator begin() const { return map.begin(); } + const_iterator end() const { return map.end(); } + size_type size() const { return map.size(); } + bool empty() const { return map.empty(); } + const_iterator find(const key_type& k) const { return map.find(k); } + size_type count(const key_type& k) const { return map.count(k); } + void insert(const value_type& x) + { + std::pair ret = map.insert(x); + if (ret.second) + { + if (nMaxSize && map.size() == nMaxSize) + { + map.erase(rmap.begin()->second); + rmap.erase(rmap.begin()); + } + rmap.insert(make_pair(x.second, ret.first)); + } + return; + } + void erase(const key_type& k) + { + iterator itTarget = map.find(k); + if (itTarget == map.end()) + return; + std::pair itPair = rmap.equal_range(itTarget->second); + for (rmap_iterator it = itPair.first; it != itPair.second; ++it) + if (it->second == itTarget) + { + rmap.erase(it); + map.erase(itTarget); + return; + } + // Shouldn't ever get here + assert(0); //TODO remove me + map.erase(itTarget); + } + void update(const_iterator itIn, const mapped_type& v) + { + //TODO: When we switch to C++11, use map.erase(itIn, itIn) to get the non-const iterator + iterator itTarget = map.find(itIn->first); + if (itTarget == map.end()) + return; + std::pair itPair = rmap.equal_range(itTarget->second); + for (rmap_iterator it = itPair.first; it != itPair.second; ++it) + if (it->second == itTarget) + { + rmap.erase(it); + itTarget->second = v; + rmap.insert(make_pair(v, itTarget)); + return; + } + // Shouldn't ever get here + assert(0); //TODO remove me + itTarget->second = v; + rmap.insert(make_pair(v, itTarget)); + } + size_type max_size() const { return nMaxSize; } + size_type max_size(size_type s) + { + if (s) + while (map.size() > s) + { + map.erase(rmap.begin()->second); + rmap.erase(rmap.begin()); + } + nMaxSize = s; + return nMaxSize; + } +}; + +#endif diff --git a/src/m4/bitmark_qt.m4 b/src/m4/bitmark_qt.m4 index 94f2b52..50b4983 100644 --- a/src/m4/bitmark_qt.m4 +++ b/src/m4/bitmark_qt.m4 @@ -117,7 +117,7 @@ AC_DEFUN([BITMARK_QT_CONFIGURE],[ dnl enable qt support - AC_MSG_CHECKING(whether to build Pfennig Core GUI) + AC_MSG_CHECKING(whether to build pfennig Core GUI) BITMARK_QT_CHECK([ bitmark_enable_qt=yes bitmark_enable_qt_test=yes diff --git a/src/m4/bitmark_qt.m4~ b/src/m4/bitmark_qt.m4~ new file mode 100644 index 0000000..ec88200 --- /dev/null +++ b/src/m4/bitmark_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 bitmark_enable_qt to false. Else, exit. +AC_DEFUN([BITMARK_QT_FAIL],[ + if test "x$bitmark_qt_want_version" = "xauto" && test x$bitmark_qt_force != xyes; then + if test x$bitmark_enable_qt != xno; then + AC_MSG_WARN([$1; gamecredits-qt frontend will not be built]) + fi + bitmark_enable_qt=no + else + AC_MSG_ERROR([$1]) + fi +]) + +AC_DEFUN([BITMARK_QT_CHECK],[ + if test "x$bitmark_enable_qt" != "xno" && test x$bitmark_qt_want_version != xno; then + true + $1 + else + true + $2 + fi +]) + +dnl BITMARK_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([BITMARK_QT_PATH_PROGS],[ + BITMARK_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 + BITMARK_QT_FAIL([$1 not found]) + fi + ]) +]) + +dnl Initialize qt input. +dnl This must be called before any other BITMARK_QT* macros to ensure that +dnl input variables are set correctly. +dnl CAUTION: Do not use this inside of a conditional. +AC_DEFUN([BITMARK_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.)])], + [ + bitmark_qt_want_version=$withval + if test x$bitmark_qt_want_version = xyes; then + bitmark_qt_force=yes + bitmark_qt_want_version=auto + fi + ], + [bitmark_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 _BITMARK_QT_FIND_LIBS_* +dnl Outputs: Sets variables for all qt-related tools. +dnl Outputs: bitmark_enable_qt, bitmark_enable_qt_dbus, bitmark_enable_qt_test +AC_DEFUN([BITMARK_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 + BITMARK_QT_CHECK([_BITMARK_QT_FIND_LIBS_WITH_PKGCONFIG([$2])]) + else + BITMARK_QT_CHECK([_BITMARK_QT_FIND_LIBS_WITHOUT_PKGCONFIG]) + fi + + BITMARK_QT_PATH_PROGS([MOC], [moc-qt${bitmark_qt_got_major_vers} moc${bitmark_qt_got_major_vers} moc], $qt_bin_path) + BITMARK_QT_PATH_PROGS([UIC], [uic-qt${bitmark_qt_got_major_vers} uic${bitmark_qt_got_major_vers} uic], $qt_bin_path) + BITMARK_QT_PATH_PROGS([RCC], [rcc-qt${bitmark_qt_got_major_vers} rcc${bitmark_qt_got_major_vers} rcc], $qt_bin_path) + BITMARK_QT_PATH_PROGS([LRELEASE], [lrelease-qt${bitmark_qt_got_major_vers} lrelease${bitmark_qt_got_major_vers} lrelease], $qt_bin_path) + BITMARK_QT_PATH_PROGS([LUPDATE], [lupdate-qt${bitmark_qt_got_major_vers} lupdate${bitmark_qt_got_major_vers} lupdate],$qt_bin_path, yes) + + MOC_DEFS='-DHAVE_CONFIG_H -I$(top_srcdir)/src' + case $host in + *darwin*) + BITMARK_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*) + BITMARK_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 GameCredits Core GUI) + BITMARK_QT_CHECK([ + bitmark_enable_qt=yes + bitmark_enable_qt_test=yes + if test x$have_qt_test = xno; then + bitmark_enable_qt_test=no + fi + bitmark_enable_qt_dbus=no + if test x$use_dbus != xno && test x$have_qt_dbus = xyes; then + bitmark_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 + ],[ + bitmark_enable_qt=no + ]) + AC_MSG_RESULT([$bitmark_enable_qt (Qt${bitmark_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${bitmark_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: bitmark_cv_qt5=yes|no +AC_DEFUN([_BITMARK_QT_CHECK_QT5],[ + AC_CACHE_CHECK(for Qt 5, bitmark_cv_qt5,[ + AC_TRY_COMPILE( + [#include ], + [ + #if QT_VERSION < 0x050000 + choke me + #else + return 0; + #endif + ], + bitmark_cv_qt5=yes, + bitmark_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: bitmark_cv_static_qt=yes|no +dnl Output: Defines QT_STATICPLUGIN if plugins are static. +AC_DEFUN([_BITMARK_QT_IS_STATIC],[ + AC_CACHE_CHECK(for static Qt, bitmark_cv_static_qt,[ + AC_TRY_COMPILE( + [#include ], + [ + #if defined(QT_STATIC) + return 0; + #else + choke me + #endif + ], + [bitmark_cv_static_qt=yes], + [bitmark_cv_static_qt=no]) + ]) + if test xbitmark_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([_BITMARK_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)]; BITMARK_QT_FAIL(Could not resolve: $2)) + LIBS="$CHECK_STATIC_PLUGINS_TEMP_LIBS" +]) + +dnl Internal. Find Qt libraries using pkg-config. +dnl Inputs: bitmark_qt_want_version (from --with-gui=). The version to check +dnl first. +dnl Inputs: $1: If bitmark_qt_want_version is "auto", check for this version +dnl first. +dnl Outputs: All necessary QT_* variables are set. +dnl Outputs: bitmark_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([_BITMARK_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$bitmark_qt_want_version == xqt5 || ( test x$bitmark_qt_want_version == xauto && test x$auto_priority_version == xqt5 ); then + QT_LIB_PREFIX=Qt5 + bitmark_qt_got_major_vers=5 + else + QT_LIB_PREFIX=Qt + bitmark_qt_got_major_vers=4 + fi + qt5_modules="Qt5Core Qt5Gui Qt5Network Qt5Widgets" + qt4_modules="QtCore QtGui QtNetwork" + BITMARK_QT_CHECK([ + if test x$bitmark_qt_want_version == xqt5 || ( test x$bitmark_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$bitmark_qt_want_version == xqt4 || ( test x$bitmark_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$bitmark_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; bitmark_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; bitmark_qt_got_major_vers=5], [have_qt=no]) + fi + fi + if test x$have_qt != xyes; then + have_qt=no + BITMARK_QT_FAIL([Qt dependencies not found]) + fi + ]) + BITMARK_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: bitmark_qt_want_version (from --with-gui=). The version to use. +dnl If "auto", the version will be discovered by _BITMARK_QT_CHECK_QT5. +dnl Outputs: All necessary QT_* variables are set. +dnl Outputs: bitmark_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([_BITMARK_QT_FIND_LIBS_WITHOUT_PKGCONFIG],[ + TEMP_CPPFLAGS="$CPPFLAGS" + TEMP_LIBS="$LIBS" + BITMARK_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 + ]) + + BITMARK_QT_CHECK([AC_CHECK_HEADER([QtPlugin],,BITMARK_QT_FAIL(QtCore headers missing))]) + BITMARK_QT_CHECK([AC_CHECK_HEADER([QApplication],, BITMARK_QT_FAIL(QtGui headers missing))]) + BITMARK_QT_CHECK([AC_CHECK_HEADER([QLocalSocket],, BITMARK_QT_FAIL(QtNetwork headers missing))]) + + BITMARK_QT_CHECK([ + if test x$bitmark_qt_want_version = xauto; then + _BITMARK_QT_CHECK_QT5 + fi + if test x$bitmark_cv_qt5 == xyes || test x$bitmark_qt_want_version = xqt5; then + QT_LIB_PREFIX=Qt5 + bitmark_qt_got_major_vers=5 + else + QT_LIB_PREFIX=Qt + bitmark_qt_got_major_vers=4 + fi + ]) + + BITMARK_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$bitmark_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],, BITMARK_QT_FAIL(libimm32 not found)) + fi + ]) + + BITMARK_QT_CHECK(AC_CHECK_LIB([z] ,[main],,BITMARK_QT_FAIL(zlib not found))) + BITMARK_QT_CHECK(AC_CHECK_LIB([png] ,[main],,BITMARK_QT_FAIL(png not found))) + BITMARK_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Core] ,[main],,BITMARK_QT_FAIL(lib$QT_LIB_PREFIXCore not found))) + BITMARK_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Gui] ,[main],,BITMARK_QT_FAIL(lib$QT_LIB_PREFIXGui not found))) + BITMARK_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Network],[main],,BITMARK_QT_FAIL(lib$QT_LIB_PREFIXNetwork not found))) + if test x$bitmark_qt_got_major_vers == x5; then + BITMARK_QT_CHECK(AC_CHECK_LIB([${QT_LIB_PREFIX}Widgets],[main],,BITMARK_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 _BITMARK_QT_CHECK_STATIC_PLUGINS does a quick link-check and appends the + dnl results to QT_LIBS. + BITMARK_QT_CHECK([ + if test x$bitmark_qt_got_major_vers == x5; then + _BITMARK_QT_IS_STATIC + if test x$bitmark_cv_static_qt == xyes; then + AC_DEFINE(QT_STATICPLUGIN, 1, [Define this symbol if qt plugins are static]) + _BITMARK_QT_CHECK_STATIC_PLUGINS([Q_IMPORT_PLUGIN(AccessibleFactory)], [-lqtaccessiblewidgets]) + if test x$TARGET_OS == xwindows; then + _BITMARK_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]) + _BITMARK_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 + ]) + + BITMARK_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/main.cpp b/src/main.cpp index 006204e..00c8c6f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -28,7 +28,7 @@ using namespace std; using namespace boost; #if defined(NDEBUG) -# error "Bitmark cannot be compiled without assertions." +# error "Pfennig cannot be compiled without assertions." #endif // @@ -440,7 +440,7 @@ bool AddOrphanTx(const CTransaction& tx, NodeId peer) mapOrphanTransactionsByPrev[txin.prevout.hash].insert(hash); LogPrint("mempool", "stored orphan tx %s (mapsz %u prevsz %u)\n", hash.ToString(), - mapOrphanTransactions.size(), mapOrphanTransactionsByPrev.size()); + mapOrphanTransactions.size(), mapOrphanTransactionsByPrev.size()); return true; } @@ -1188,7 +1188,7 @@ uint256 static GetOrphanRoot(const uint256& hash) // Remove a random orphan block (which does not have any dependent orphans). void static PruneOrphanBlocks() { - if (mapOrphanBlocksByPrev.size() <= (size_t)std::max((int64_t)0, GetArg("-maxorphanblocks", DEFAULT_MAX_ORPHAN_BLOCKS))) + if (mapOrphanBlocksByPrev.size() <= (size_t)std::max((int64_t)0, GetArg("-maxorphanblocks", DEFAULT_MAX_ORPHAN_BLOCKS))) return; // Pick a random orphan block. @@ -1212,90 +1212,130 @@ void static PruneOrphanBlocks() int64_t GetBlockValue(int nHeight, int64_t nFees) { - int64_t nHalfReward = 10 * COIN; - int64_t nSubsidy = 0; - int halvings = nHeight / Params().SubsidyHalvingInterval(); - - // Force block reward to zero after reward would drop below 0.1 marks. - if (halvings >= 18) - return nFees; - - // Subsidy is cut in half every 788,000 blocks which will occur approximately every 3 years. - // Subsidy has an interim reduction every 394,000 blocks (18 months) - nSubsidy = (nHalfReward>>halvings) + (nHalfReward>>((nHeight+Params().SubsidyInterimInterval())/Params().SubsidyHalvingInterval())); - + int64_t nSubsidy = 50 * COIN; + nSubsidy >>= (nHeight / 840000); return nSubsidy + nFees; } -static const int64_t nTargetTimespan = 24*60*60; // one day -static const int64_t nTargetSpacing = 2*60; // two minutes +// Traditional Targets only used for KGW v1 blocks +static const int64_t nTargetTimespan = 3.5 * 24 * 60 * 60; +static const int64_t nTargetSpacing = 2.5 * 60; static const int64_t nInterval = nTargetTimespan / nTargetSpacing; -// -// minimum amount of work that could possibly be required nTime after -// minimum work required was nBase -// -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: - if (TestNet() && nTime > nTargetSpacing*2) - return bnLimit.GetCompact(); +// V3 Targets +static const int64_t nTargetTimespannew = 30 * 60; // every 30 minutes +static const int64_t nTargetSpacingnew = 1.5 * 60; // 90 sec +static const int64_t nIntervalnew = nTargetTimespannew / nTargetSpacingnew; + + +unsigned int static KimotoGravityWell(const CBlockIndex* pindexLast, const CBlockHeader *pblock, uint64_t TargetBlocksSpacingSeconds, uint64_t PastBlocksMin, uint64_t PastBlocksMax) { + /* current difficulty formula, megacoin - kimoto gravity well */ + const CBlockIndex *BlockLastSolved = pindexLast; + const CBlockIndex *BlockReading = pindexLast; + const CBigNum &bnProofOfWorkLimit = Params().ProofOfWorkLimit(); + + uint64_t PastBlocksMass = 0; + int64_t PastRateActualSeconds = 0; + int64_t PastRateTargetSeconds = 0; + double PastRateAdjustmentRatio = double(1); + CBigNum PastDifficultyAverage; + CBigNum PastDifficultyAveragePrev; + double EventHorizonDeviation; + double EventHorizonDeviationFast; + double EventHorizonDeviationSlow; + + if (BlockLastSolved == NULL || BlockLastSolved->nHeight == 0 || (uint64_t)BlockLastSolved->nHeight < PastBlocksMin) { + return bnProofOfWorkLimit.GetCompact(); + } + int64_t LatestBlockTime = BlockLastSolved->GetBlockTime(); + for (unsigned int i = 1; BlockReading && BlockReading->nHeight > 0; i++) { + if (PastBlocksMax > 0 && i > PastBlocksMax) { break; } + PastBlocksMass++; - CBigNum bnResult; - bnResult.SetCompact(nBase); - while (nTime > 0 && bnResult < bnLimit) - { - // 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(); + if (i == 1) { PastDifficultyAverage.SetCompact(BlockReading->nBits); } + else { PastDifficultyAverage = ((CBigNum().SetCompact(BlockReading->nBits) - PastDifficultyAveragePrev) / i) + PastDifficultyAveragePrev; } + PastDifficultyAveragePrev = PastDifficultyAverage; + + if (LatestBlockTime < BlockReading->GetBlockTime()) { + if (BlockReading->nHeight > 100000) LatestBlockTime = BlockReading->GetBlockTime(); + } + + PastRateActualSeconds = LatestBlockTime - BlockReading->GetBlockTime(); + + if (BlockReading->nHeight > 100000) { + if (PastRateActualSeconds < 1) { PastRateActualSeconds = 1; } + } else { + if (PastRateActualSeconds < 0) { PastRateActualSeconds = 0; } + } + + PastRateTargetSeconds = TargetBlocksSpacingSeconds * PastBlocksMass; + PastRateAdjustmentRatio = double(1); + + if (PastRateActualSeconds != 0 && PastRateTargetSeconds != 0) { + PastRateAdjustmentRatio = double(PastRateTargetSeconds) / double(PastRateActualSeconds); + } + EventHorizonDeviation = 1 + (0.7084 * pow((double(PastBlocksMass)/double(28.2)), -1.228)); + EventHorizonDeviationFast = EventHorizonDeviation; + EventHorizonDeviationSlow = 1 / EventHorizonDeviation; + + if (PastBlocksMass >= PastBlocksMin) { + if ((PastRateAdjustmentRatio <= EventHorizonDeviationSlow) || (PastRateAdjustmentRatio >= EventHorizonDeviationFast)) { + assert(BlockReading); + break; + } + } + if (BlockReading->pprev == NULL) { + assert(BlockReading); + break; + } + BlockReading = BlockReading->pprev; + } + + CBigNum bnNew(PastDifficultyAverage); + if (PastRateActualSeconds != 0 && PastRateTargetSeconds != 0) { + bnNew *= PastRateActualSeconds; + bnNew /= PastRateTargetSeconds; + } + if (bnNew > bnProofOfWorkLimit) { bnNew = bnProofOfWorkLimit; } + + /* + printf("Difficulty Retarget - Kimoto Gravity Well\n"); + printf("PastRateAdjustmentRatio = %g\n", PastRateAdjustmentRatio); + printf("Before: %08x %s\n", BlockLastSolved->nBits, CBigNum().SetCompact(BlockLastSolved->nBits).getuint256().ToString().c_str()); + printf("After: %08x %s\n", bnNew.GetCompact(), bnNew.getuint256().ToString().c_str()); + */ + return bnNew.GetCompact(); } -unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock) +unsigned int static GetNextWorkRequired_OLD(const CBlockIndex* pindexLast, const CBlockHeader *pblock) { - unsigned int nProofOfWorkLimit = Params().ProofOfWorkLimit().GetCompact(); + const CBigNum &bnProofOfWorkLimit = Params().ProofOfWorkLimit(); + unsigned int nProofOfWorkLimit = bnProofOfWorkLimit.GetCompact(); // Genesis block if (pindexLast == NULL) return nProofOfWorkLimit; // Only change once per interval - if ((pindexLast->nHeight+1) % nInterval != 0) - { - if (TestNet()) - { - // Special difficulty rule for testnet: - // If the new block's timestamp is more than 2* 2 minutes - // then allow mining of a min-difficulty block. - if (pblock->nTime > pindexLast->nTime + nTargetSpacing*2) - return nProofOfWorkLimit; - else - { - // Return the last non-special-min-difficulty-rules-block - const CBlockIndex* pindex = pindexLast; - while (pindex->pprev && pindex->nHeight % nInterval != 0 && pindex->nBits == nProofOfWorkLimit) - pindex = pindex->pprev; - return pindex->nBits; - } - } + if ((pindexLast->nHeight+1) % nInterval != 0) { return pindexLast->nBits; } - // Go back by what we want to be a days worth of blocks + // Pfennig: This fixes an issue where a 51% attack can change difficulty at will. + // Go back the full period unless it's the first retarget after genesis. Code courtesy of Art Forz + int blockstogoback = nInterval-1; + if ((pindexLast->nHeight+1) != nInterval) + blockstogoback = nInterval; + + // Go back by what we want to be 14 days worth of blocks const CBlockIndex* pindexFirst = pindexLast; - for (int i = 0; pindexFirst && i < nInterval-1; i++) + for (int i = 0; pindexFirst && i < blockstogoback; i++) pindexFirst = pindexFirst->pprev; assert(pindexFirst); // Limit adjustment step int64_t nActualTimespan = pindexLast->GetBlockTime() - pindexFirst->GetBlockTime(); - LogPrintf(" nActualTimespan = %d before bounds\n", nActualTimespan); + if (nActualTimespan < nTargetTimespan/4) nActualTimespan = nTargetTimespan/4; if (nActualTimespan > nTargetTimespan*4) @@ -1307,18 +1347,108 @@ unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHead bnNew *= nActualTimespan; bnNew /= nTargetTimespan; - if (bnNew > Params().ProofOfWorkLimit()) - bnNew = Params().ProofOfWorkLimit(); + if (bnNew > bnProofOfWorkLimit) + bnNew = bnProofOfWorkLimit; /// debug print - 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()); + printf("GetNextWorkRequired RETARGET\n"); + printf("Before: %08x %s\n", pindexLast->nBits, CBigNum().SetCompact(pindexLast->nBits).getuint256().ToString().c_str()); + printf("After: %08x %s\n", bnNew.GetCompact(), bnNew.getuint256().ToString().c_str()); return bnNew.GetCompact(); } +unsigned int static GetNextWorkRequired_V3(const CBlockIndex* pindexLast, const CBlockHeader *pblock) +{ + const CBigNum &bnProofOfWorkLimit = Params().ProofOfWorkLimit(); + unsigned int nProofOfWorkLimit = bnProofOfWorkLimit.GetCompact(); + + // Genesis block + if (pindexLast == NULL) + return nProofOfWorkLimit; + + const CBlockIndex* pindexFirst = pindexLast->pprev; + int64_t nActualSpacing = pindexLast->GetBlockTime() - pindexFirst->GetBlockTime(); + + // limit the adjustment + if (nActualSpacing < nTargetSpacingnew/16) + nActualSpacing = nTargetSpacingnew/16; + if (nActualSpacing > nTargetSpacingnew*16) + nActualSpacing = nTargetSpacingnew*16; + + // Retarget + CBigNum bnNew; + bnNew.SetCompact(pindexLast->nBits); + bnNew *= ((nIntervalnew - 1) * nTargetSpacingnew + 2 * nActualSpacing); + bnNew /= ((nIntervalnew + 1) * nTargetSpacingnew); + + if (bnNew > bnProofOfWorkLimit) + bnNew = bnProofOfWorkLimit; + + + return bnNew.GetCompact(); +} + +unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock) +{ + unsigned int nHeight = pindexLast->nHeight + 1; + + // Settings for PFG KGW + unsigned int TimeDaySeconds = 60 * 60 * 24; + int64_t PastSecondsMin = TimeDaySeconds * 0.01; + int64_t PastSecondsMax = TimeDaySeconds * 0.14; + int64_t BlocksTargetSpacing = 0; + + if(nHeight < 15332) { + // KGW v1 + return GetNextWorkRequired_OLD(pindexLast, pblock); + } + else if(nHeight < 1036320) { + // Former 30 Second Block Target, KGW 2 Prefork + BlocksTargetSpacing = 30; + uint64_t PastBlocksMin = PastSecondsMin / BlocksTargetSpacing; + uint64_t PastBlocksMax = PastSecondsMax / BlocksTargetSpacing; + return KimotoGravityWell(pindexLast, pblock, BlocksTargetSpacing, PastBlocksMin, PastBlocksMax); + } + else if(nHeight < 1096772) { + // New 90 Second Block Target, KGW 2 Postfork + BlocksTargetSpacing = 90; + uint64_t PastBlocksMin = PastSecondsMin / BlocksTargetSpacing; + uint64_t PastBlocksMax = PastSecondsMax / BlocksTargetSpacing; + return KimotoGravityWell(pindexLast, pblock, BlocksTargetSpacing, PastBlocksMin, PastBlocksMax); + } + else { + return GetNextWorkRequired_V3(pindexLast, pblock); + } +} + +// +// minimum amount of work that could possibly be required nTime after +// minimum work required was nBase +// + +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: + if (TestNet() && nTime > nTargetSpacing*2) + return bnLimit.GetCompact(); + + CBigNum bnResult; + bnResult.SetCompact(nBase); + while (nTime > 0 && bnResult < bnLimit) + { + // 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(); +} + bool CheckProofOfWork(uint256 hash, unsigned int nBits) { CBigNum bnTarget; @@ -1374,9 +1504,9 @@ void CheckForkWarningConditions() { if (!fLargeWorkForkFound) { - std::string warning = std::string("'Warning: Large-work fork detected, forking after block ") + - pindexBestForkBase->phashBlock->ToString() + std::string("'"); - CAlert::Notify(warning, true); + std::string warning = std::string("'Warning: Large-work fork detected, forking after block ") + + pindexBestForkBase->phashBlock->ToString() + std::string("'"); + CAlert::Notify(warning, true); } if (pindexBestForkTip) { @@ -1782,12 +1912,12 @@ bool ConnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex, C // 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"), - REJECT_INVALID, "bad-txns-BIP30"); - } + 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 unsigned int flags = SCRIPT_VERIFY_NOCACHE | SCRIPT_VERIFY_P2SH; @@ -1819,13 +1949,13 @@ bool ConnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex, C return state.DoS(100, error("ConnectBlock() : inputs missing/spent"), REJECT_INVALID, "bad-txns-inputs-missingorspent"); - // Add in sigops done by pay-to-script-hash inputs; - // this is to prevent a "rogue miner" from creating - // an incredibly-expensive-to-validate block. - nSigOps += GetP2SHSigOpCount(tx, view); - if (nSigOps > MAX_BLOCK_SIGOPS) - return state.DoS(100, error("ConnectBlock() : too many sigops"), - REJECT_INVALID, "bad-blk-sigops"); + // Add in sigops done by pay-to-script-hash inputs; + // this is to prevent a "rogue miner" from creating + // an incredibly-expensive-to-validate block. + nSigOps += GetP2SHSigOpCount(tx, view); + if (nSigOps > MAX_BLOCK_SIGOPS) + return state.DoS(100, error("ConnectBlock() : too many sigops"), + REJECT_INVALID, "bad-blk-sigops"); nFees += view.GetValueIn(tx)-tx.GetValueOut(); @@ -2414,18 +2544,18 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp) // Reject block.nVersion=1 blocks if (block.nVersion < 2) { - return state.Invalid(error("AcceptBlock() : rejected nVersion=1 block"), - REJECT_OBSOLETE, "bad-version"); + 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 if (block.nVersion >= 2) { - CScript expect = CScript() << nHeight; - 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"); + CScript expect = CScript() << nHeight; + 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"); } } @@ -2969,39 +3099,39 @@ bool LoadBlockIndex() void static BitmarkGenesisMiner(CBlock block, int start, int threads) { - LogPrintf("BitmarkMiner started\n"); + LogPrintf("PfennigMiner started\n"); SetThreadPriority(THREAD_PRIORITY_LOWEST); RenameThread("bitmark-miner"); block.nTime += start; try { while (true) { - printf("Searching for genesis block...\n"); - uint256 hashTarget = Params().ProofOfWorkLimit().getuint256(); - uint256 thash; - char scratchpad[SCRYPT_SCRATCHPAD_SIZE]; - - while(true) - { - scrypt_1024_1_1_256_sp(BEGIN(block.nVersion), BEGIN(thash), scratchpad); - if (thash <= hashTarget) - break; - if ((block.nNonce & 0xFFF) == 0) - { - printf("nonce %08X: hash = %s (target = %s)\n", block.nNonce, thash.ToString().c_str(), hashTarget.ToString().c_str()); - } - ++block.nNonce; - if (block.nNonce == 0) - { - printf("NONCE WRAPPED, incrementing time\n"); - block.nTime+=threads; - } - } - printf("block.nTime = %u \n", block.nTime); - printf("block.nNonce = %u \n", block.nNonce); - printf("block.GetHash = %s\n", block.GetHash().ToString().c_str()); + printf("Searching for genesis block...\n"); + uint256 hashTarget = Params().ProofOfWorkLimit().getuint256(); + uint256 thash; + char scratchpad[SCRYPT_SCRATCHPAD_SIZE]; + + while(true) + { + scrypt_1024_1_1_256_sp(BEGIN(block.nVersion), BEGIN(thash), scratchpad); + if (thash <= hashTarget) + break; + if ((block.nNonce & 0xFFF) == 0) + { + printf("nonce %08X: hash = %s (target = %s)\n", block.nNonce, thash.ToString().c_str(), hashTarget.ToString().c_str()); + } + ++block.nNonce; + if (block.nNonce == 0) + { + printf("NONCE WRAPPED, incrementing time\n"); + block.nTime+=threads; + } + } + printf("block.nTime = %u \n", block.nTime); + printf("block.nNonce = %u \n", block.nNonce); + printf("block.GetHash = %s\n", block.GetHash().ToString().c_str()); } } catch (boost::thread_interrupted) { - LogPrintf("BitmarkMiner terminated\n"); + LogPrintf("PfennigMiner terminated\n"); throw; } } @@ -3041,13 +3171,13 @@ bool InitBlockIndex() { // Only add the genesis block if not reindexing (in which case we reuse the one already on disk) if (!fReindex) { // Generate a new Genesis block - if (true) - { - CBlock &block = const_cast(Params().GenesisBlock()); - GenesisBitmark(block); - block.print(); - while(true) {} - } + if (true) + { + CBlock &block = const_cast(Params().GenesisBlock()); + GenesisBitmark(block); + block.print(); + while(true) {} + } try { CBlock &block = const_cast(Params().GenesisBlock()); // Start new block file @@ -3833,8 +3963,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) CValidationState stateDummy; vEraseQueue.push_back(orphanHash); - if (setMisbehaving.count(fromPeer)) - continue; + if (setMisbehaving.count(fromPeer)) + continue; if (AcceptToMemoryPool(mempool, stateDummy, orphanTx, true, &fMissingInputs2)) { @@ -3845,15 +3975,15 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) } else if (!fMissingInputs2) { - int nDos = 0; - if (stateDummy.IsInvalid(nDos) && nDos > 0) - { - // Punish peer that gave us an invalid orphan tx - Misbehaving(fromPeer, nDos); - setMisbehaving.insert(fromPeer); - LogPrint("mempool", " invalid orphan tx %s\n", orphanHash.ToString()); - } - // too-little-fee orphan + int nDos = 0; + if (stateDummy.IsInvalid(nDos) && nDos > 0) + { + // Punish peer that gave us an invalid orphan tx + Misbehaving(fromPeer, nDos); + setMisbehaving.insert(fromPeer); + LogPrint("mempool", " invalid orphan tx %s\n", orphanHash.ToString()); + } + // too-little-fee orphan LogPrint("mempool", " removed orphan tx %s\n", orphanHash.ToString()); } mempool.check(pcoinsTip); @@ -3865,11 +3995,11 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) } else if (fMissingInputs) { - AddOrphanTx(tx, pfrom->GetId()); + AddOrphanTx(tx, pfrom->GetId()); // DoS prevention: do not allow mapOrphanTransactions to grow unbounded unsigned int nMaxOrphanTx = (unsigned int)std::max((int64_t)0, GetArg("-maxorphantx", DEFAULT_MAX_ORPHAN_TRANSACTIONS)); - unsigned int nEvicted = LimitOrphanTxSize(nMaxOrphanTx); + unsigned int nEvicted = LimitOrphanTxSize(nMaxOrphanTx); if (nEvicted > 0) LogPrint("mempool", "mapOrphan overflow, removed %u tx\n", nEvicted); } @@ -3944,21 +4074,21 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) else if (strCommand == "ping") { - // BIP0031 - uint64_t nonce = 0; - vRecv >> nonce; - // Echo the message back with the nonce. This allows for two useful features: - // - // 1) A remote node can quickly check if the connection is operational - // 2) Remote nodes can measure the latency of the network thread. If this node - // is overloaded it won't respond to pings quickly and the remote node can - // avoid sending us more work, like chain download requests. - // - // The nonce stops the remote getting confused between different pings: without - // it, if the remote node sends a ping once per second and this node takes 5 - // seconds to respond to each, the 5th ping the remote sends would appear to - // return very quickly. - pfrom->PushMessage("pong", nonce); + // BIP0031 + uint64_t nonce = 0; + vRecv >> nonce; + // Echo the message back with the nonce. This allows for two useful features: + // + // 1) A remote node can quickly check if the connection is operational + // 2) Remote nodes can measure the latency of the network thread. If this node + // is overloaded it won't respond to pings quickly and the remote node can + // avoid sending us more work, like chain download requests. + // + // The nonce stops the remote getting confused between different pings: without + // it, if the remote node sends a ping once per second and this node takes 5 + // seconds to respond to each, the 5th ping the remote sends would appear to + // return very quickly. + pfrom->PushMessage("pong", nonce); } @@ -4281,9 +4411,9 @@ bool SendMessages(CNode* pto, bool fSendTrickle) } pto->nPingNonceSent = nonce; pto->fPingQueued = false; - // Take timestamp as close as possible before transmitting ping - pto->nPingUsecStart = GetTimeMicros(); - pto->PushMessage("ping", nonce); + // Take timestamp as close as possible before transmitting ping + pto->nPingUsecStart = GetTimeMicros(); + pto->PushMessage("ping", nonce); } TRY_LOCK(cs_main, lockMain); // Acquire cs_main for IsInitialBlockDownload() and CNodeState() diff --git a/src/main.cpp~ b/src/main.cpp~ new file mode 100644 index 0000000..fb3f753 --- /dev/null +++ b/src/main.cpp~ @@ -0,0 +1,4631 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "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 + +using namespace std; +using namespace boost; + +#if defined(NDEBUG) +# error "Pfennig cannot be compiled without assertions." +#endif + +// +// Global state +// + +CCriticalSection cs_main; + +CTxMemPool mempool; + +map mapBlockIndex; +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; + +/** The term "satoshi" is kept in homage to entity who gave the block chain to the world */ +/** Fees smaller than this (in satoshi) are considered zero fee (for transaction creation) */ +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; + +struct COrphanBlock { + uint256 hashBlock; + uint256 hashPrev; + vector vchBlock; +}; +map mapOrphanBlocks; +multimap mapOrphanBlocksByPrev; + +struct COrphanTx { + CTransaction tx; + NodeId fromPeer; +}; +map mapOrphanTransactions; +map > mapOrphanTransactionsByPrev; +void EraseOrphansFor(NodeId peer); + +// Constant stuff for coinbase transactions we create: +CScript COINBASE_FLAGS; + +const string strMessageMagic = "Pfennig Signed Message:\n"; + +// 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; +} + +////////////////////////////////////////////////////////////////////////////// +// +// dispatching functions +// + +// These functions dispatch to one or all registered wallets + +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 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 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)); +} + +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(); +} + +void SyncWithWallets(const uint256 &hash, const CTransaction &tx, const CBlock *pblock) { + g_signals.SyncTransaction(hash, tx, pblock); +} + +////////////////////////////////////////////////////////////////////////////// +// +// 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); + + EraseOrphansFor(nodeid); + 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); +} + +////////////////////////////////////////////////////////////////////////////// +// +// CChain implementation +// + +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; +} + +CBlockLocator CChain::GetLocator(const CBlockIndex *pindex) const { + int nStep = 1; + std::vector vHave; + vHave.reserve(32); + + 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; + } + + return CBlockLocator(vHave); +} + +CBlockIndex *CChain::FindFork(const CBlockLocator &locator) const { + // Find the first block the caller has in the main chain + BOOST_FOREACH(const uint256& hash, locator.vHave) { + std::map::iterator mi = mapBlockIndex.find(hash); + if (mi != mapBlockIndex.end()) + { + CBlockIndex* pindex = (*mi).second; + if (Contains(pindex)) + return pindex; + } + } + return Genesis(); +} + +CCoinsViewCache *pcoinsTip = NULL; +CBlockTreeDB *pblocktree = NULL; + +////////////////////////////////////////////////////////////////////////////// +// +// mapOrphanTransactions +// + +bool AddOrphanTx(const CTransaction& tx, NodeId peer) +{ + uint256 hash = tx.GetHash(); + if (mapOrphanTransactions.count(hash)) + return false; + + // 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 + // it will rebroadcast it later, after the parent transaction(s) + // 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: + unsigned int sz = tx.GetSerializeSize(SER_NETWORK, CTransaction::CURRENT_VERSION); + if (sz > 5000) + { + LogPrint("mempool", "ignoring large orphan tx (size: %u, hash: %s)\n", sz, hash.ToString()); + return false; + } + + mapOrphanTransactions[hash].tx = tx; + mapOrphanTransactions[hash].fromPeer = peer; + BOOST_FOREACH(const CTxIn& txin, tx.vin) + mapOrphanTransactionsByPrev[txin.prevout.hash].insert(hash); + + LogPrint("mempool", "stored orphan tx %s (mapsz %u prevsz %u)\n", hash.ToString(), + mapOrphanTransactions.size(), mapOrphanTransactionsByPrev.size()); + return true; +} + +void static EraseOrphanTx(uint256 hash) +{ + map::iterator it = mapOrphanTransactions.find(hash); + if (it == mapOrphanTransactions.end()) + return; + BOOST_FOREACH(const CTxIn& txin, it->second.tx.vin) + { + map >::iterator itPrev = mapOrphanTransactionsByPrev.find(txin.prevout.hash); + if (itPrev == mapOrphanTransactionsByPrev.end()) + continue; + itPrev->second.erase(hash); + if (itPrev->second.empty()) + mapOrphanTransactionsByPrev.erase(itPrev); + } + mapOrphanTransactions.erase(it); +} + +void EraseOrphansFor(NodeId peer) +{ + int nErased = 0; + map::iterator iter = mapOrphanTransactions.begin(); + while (iter != mapOrphanTransactions.end()) + { + map::iterator maybeErase = iter++; // increment to avoid iterator becoming invalid + if (maybeErase->second.fromPeer == peer) + { + EraseOrphanTx(maybeErase->second.tx.GetHash()); + ++nErased; + } + } + if (nErased > 0) LogPrint("mempool", "Erased %d orphan tx from peer %d\n", nErased, peer); +} + +unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans) +{ + unsigned int nEvicted = 0; + while (mapOrphanTransactions.size() > nMaxOrphans) + { + // Evict a random orphan: + uint256 randomhash = GetRandHash(); + map::iterator it = mapOrphanTransactions.lower_bound(randomhash); + if (it == mapOrphanTransactions.end()) + it = mapOrphanTransactions.begin(); + EraseOrphanTx(it->first); + ++nEvicted; + } + return nEvicted; +} + + + + + + + +bool IsStandardTx(const CTransaction& tx, string& reason) +{ + AssertLockHeld(cs_main); + if (tx.nVersion > CTransaction::CURRENT_VERSION || tx.nVersion < 1) { + reason = "version"; + return false; + } + + // 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; + } + + // Extremely large transactions with lots of inputs can cost the network + // almost as much to process as they cost the sender in fees, because + // computing signature hashes is O(ninputs*txsize). Limiting transactions + // to MAX_STANDARD_TX_SIZE mitigates CPU exhaustion attacks. + unsigned int sz = tx.GetSerializeSize(SER_NETWORK, CTransaction::CURRENT_VERSION); + if (sz >= MAX_STANDARD_TX_SIZE) { + reason = "tx-size"; + return false; + } + + BOOST_FOREACH(const CTxIn& txin, tx.vin) + { + // Biggest 'standard' txin is a 15-of-15 P2SH multisig with compressed + // keys. (remember the 520 byte limit on redeemScript size) That works + // out to a (15*(33+1))+3=513 byte redeemScript, 513+1+15*(73+1)=1624 + // bytes of scriptSig, which we round off to 1650 bytes for some minor + // future-proofing. That's also enough to spend a 20-of-20 + // CHECKMULTISIG scriptPubKey, though such a scriptPubKey is not + // considered standard) + if (txin.scriptSig.size() > 1650) { + reason = "scriptsig-size"; + return false; + } + if (!txin.scriptSig.IsPushOnly()) { + 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, whichType)) { + reason = "scriptpubkey"; + return false; + } + 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_t nBlockTime) +{ + AssertLockHeld(cs_main); + // Time based nLockTime implemented in 0.1.6 + if (tx.nLockTime == 0) + return true; + if (nBlockHeight == 0) + nBlockHeight = chainActive.Height(); + if (nBlockTime == 0) + nBlockTime = GetAdjustedTime(); + 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()) + return false; + return true; +} + +// +// Check transaction inputs, and make sure any +// pay-to-script-hash transactions are evaluating IsStandard scripts +// +// Why bother? To avoid denial-of-service attacks; an attacker +// can submit a standard HASH... OP_EQUAL transaction, +// which will get accepted into blocks. The redemption +// script can be anything; an attacker could use a very +// expensive-to-check-upon-redemption script like: +// DUP CHECKSIG DROP ... repeated 100 times... OP_1 +// +bool AreInputsStandard(const CTransaction& tx, CCoinsViewCache& mapInputs) +{ + if (tx.IsCoinBase()) + return true; // Coinbases don't use vin normally + + for (unsigned int i = 0; i < tx.vin.size(); i++) + { + const CTxOut& prev = mapInputs.GetOutputFor(tx.vin[i]); + + vector > vSolutions; + txnouttype whichType; + // get the scriptPubKey corresponding to this input: + const CScript& prevScript = prev.scriptPubKey; + if (!Solver(prevScript, whichType, vSolutions)) + return false; + int nArgsExpected = ScriptSigArgsExpected(whichType, vSolutions); + if (nArgsExpected < 0) + return false; + + // Transactions with extra stuff in their scriptSigs are + // non-standard. Note that this EvalScript() call will + // be quick, because if there are any operations + // beside "push data" in the scriptSig the + // IsStandard() call returns false + vector > stack; + if (!EvalScript(stack, tx.vin[i].scriptSig, tx, i, false, 0)) + return false; + + if (whichType == TX_SCRIPTHASH) + { + if (stack.empty()) + return false; + CScript subscript(stack.back().begin(), stack.back().end()); + vector > vSolutions2; + txnouttype whichType2; + if (!Solver(subscript, whichType2, vSolutions2)) + return false; + if (whichType2 == TX_SCRIPTHASH) + return false; + + int tmpExpected; + tmpExpected = ScriptSigArgsExpected(whichType2, vSolutions2); + if (tmpExpected < 0) + return false; + nArgsExpected += tmpExpected; + } + + if (stack.size() != (unsigned int)nArgsExpected) + return false; + } + + return true; +} + +unsigned int GetLegacySigOpCount(const CTransaction& tx) +{ + unsigned int nSigOps = 0; + BOOST_FOREACH(const CTxIn& txin, tx.vin) + { + nSigOps += txin.scriptSig.GetSigOpCount(false); + } + BOOST_FOREACH(const CTxOut& txout, tx.vout) + { + nSigOps += txout.scriptPubKey.GetSigOpCount(false); + } + return nSigOps; +} + +unsigned int GetP2SHSigOpCount(const CTransaction& tx, CCoinsViewCache& inputs) +{ + if (tx.IsCoinBase()) + return 0; + + unsigned int nSigOps = 0; + for (unsigned int i = 0; i < tx.vin.size(); i++) + { + const CTxOut &prevout = inputs.GetOutputFor(tx.vin[i]); + if (prevout.scriptPubKey.IsPayToScriptHash()) + nSigOps += prevout.scriptPubKey.GetSigOpCount(tx.vin[i].scriptSig); + } + return nSigOps; +} + +int CMerkleTx::SetMerkleBranch(const CBlock* pblock) +{ + AssertLockHeld(cs_main); + CBlock blockTmp; + + if (pblock == NULL) { + CCoins coins; + if (pcoinsTip->GetCoins(GetHash(), coins)) { + CBlockIndex *pindex = chainActive[coins.nHeight]; + if (pindex) { + if (!ReadBlockFromDisk(blockTmp, pindex)) + return 0; + pblock = &blockTmp; + } + } + } + + if (pblock) { + // Update the tx's hashBlock + hashBlock = pblock->GetHash(); + + // Locate the transaction + for (nIndex = 0; nIndex < (int)pblock->vtx.size(); nIndex++) + if (pblock->vtx[nIndex] == *(CTransaction*)this) + break; + if (nIndex == (int)pblock->vtx.size()) + { + vMerkleBranch.clear(); + nIndex = -1; + LogPrintf("ERROR: SetMerkleBranch() : couldn't find tx in block\n"); + return 0; + } + + // Fill in merkle branch + vMerkleBranch = pblock->GetMerkleBranch(nIndex); + } + + // Is the tx in a block that's in the main chain + map::iterator mi = mapBlockIndex.find(hashBlock); + if (mi == mapBlockIndex.end()) + return 0; + CBlockIndex* pindex = (*mi).second; + if (!pindex || !chainActive.Contains(pindex)) + return 0; + + return chainActive.Height() - pindex->nHeight + 1; +} + + + + + + + +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"), + REJECT_INVALID, "bad-txns-vin-empty"); + if (tx.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("CheckTransaction() : size limits failed"), + REJECT_INVALID, "bad-txns-oversize"); + + // Check for negative or overflow output values + int64_t nValueOut = 0; + BOOST_FOREACH(const CTxOut& txout, tx.vout) + { + if (txout.nValue < 0) + 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"), + REJECT_INVALID, "bad-txns-vout-toolarge"); + nValueOut += txout.nValue; + if (!MoneyRange(nValueOut)) + return state.DoS(100, error("CheckTransaction() : txout total out of range"), + REJECT_INVALID, "bad-txns-txouttotal-toolarge"); + } + + // Check for duplicate inputs + set vInOutPoints; + BOOST_FOREACH(const CTxIn& txin, tx.vin) + { + if (vInOutPoints.count(txin.prevout)) + 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"), + 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"), + REJECT_INVALID, "bad-txns-prevout-null"); + } + + return true; +} + +int64_t GetMinFee(const CTransaction& tx, unsigned int nBytes, bool fAllowFree, enum GetMinFee_mode mode) +{ + // Base fee is either nMinTxFee or nMinRelayTxFee + int64_t nBaseFee = (mode == GMF_RELAY) ? tx.nMinRelayTxFee : tx.nMinTxFee; + + 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. 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; + } + + // 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) + nMinFee = nBaseFee; + } + + if (!MoneyRange(nMinFee)) + nMinFee = MAX_MONEY; + return nMinFee; +} + + +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("AcceptToMemoryPool: : CheckTransaction failed"); + + // Coinbase is only valid in a block, not as a loose transaction + if (tx.IsCoinBase()) + return state.DoS(100, error("AcceptToMemoryPool: : coinbase as individual tx"), + REJECT_INVALID, "coinbase"); + + // Rather not work on nonstandard transactions (unless -testnet/-regtest) + string reason; + 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(); + if (pool.exists(hash)) + return false; + + // Check for conflicts with in-memory transactions + { + LOCK(pool.cs); // protect pool.mapNextTx + for (unsigned int i = 0; i < tx.vin.size(); i++) + { + COutPoint outpoint = tx.vin[i].prevout; + if (pool.mapNextTx.count(outpoint)) + { + // Disable replacement feature for now + return false; + } + } + } + + { + CCoinsView dummy; + CCoinsViewCache view(dummy); + + { + LOCK(pool.cs); + CCoinsViewMemPool viewMemPool(*pcoinsTip, pool); + view.SetBackend(viewMemPool); + + // do we already have it? + if (view.HaveCoins(hash)) + return false; + + // do all inputs exist? + // Note that this does not check for the presence of actual outputs (see the next check for that), + // only helps filling in pfMissingInputs (to determine missing vs spent). + BOOST_FOREACH(const CTxIn txin, tx.vin) { + if (!view.HaveCoins(txin.prevout.hash)) { + if (pfMissingInputs) + *pfMissingInputs = true; + return false; + } + } + + // are the actual inputs available? + if (!view.HaveInputs(tx)) + return state.Invalid(error("AcceptToMemoryPool : inputs already spent"), + REJECT_DUPLICATE, "bad-txns-inputs-spent"); + + // Bring the best block into scope + view.GetBestBlock(); + + // we have all inputs cached now, so switch back to dummy, so we don't need to keep lock on mempool + view.SetBackend(dummy); + } + + // Check for non-standard pay-to-script-hash in inputs + 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_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_t txMinFee = GetMinFee(tx, nSize, true, GMF_RELAY); + if (fLimitFree && 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_t nLastTime; + int64_t nNow = GetTime(); + + LOCK(csFreeLimiter); + + // Use an exponentially decaying ~10-minute window: + dFreeCount *= pow(1.0 - 1.0/600.0, (double)(nNow - nLastTime)); + nLastTime = nNow; + // -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 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("AcceptToMemoryPool: : ConnectInputs failed %s", hash.ToString()); + } + // Store transaction in memory + pool.addUnchecked(hash, entry); + } + + g_signals.SyncTransaction(hash, tx, NULL); + + return true; +} + + +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 || !chainActive.Contains(pindex)) + return 0; + + // Make sure the merkle branch connects to this block + if (!fMerkleVerified) + { + if (CBlock::CheckMerkleBranch(GetHash(), vMerkleBranch, nIndex) != pindex->hashMerkleRoot) + return 0; + fMerkleVerified = true; + } + + pindexRet = pindex; + 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+1) - GetDepthInMainChain()); +} + + +bool CMerkleTx::AcceptToMemoryPool(bool fLimitFree) +{ + CValidationState state; + return ::AcceptToMemoryPool(mempool, state, *this, fLimitFree, NULL); +} + + +// Return transaction in tx, and if it was found inside a block, its hash is placed in hashBlock +bool GetTransaction(const uint256 &hash, CTransaction &txOut, uint256 &hashBlock, bool fAllowSlow) +{ + CBlockIndex *pindexSlow = NULL; + { + LOCK(cs_main); + { + if (mempool.lookup(hash, txOut)) + { + return true; + } + } + + if (fTxIndex) { + CDiskTxPos postx; + if (pblocktree->ReadTxIndex(hash, postx)) { + CAutoFile file(OpenBlockFile(postx, true), SER_DISK, CLIENT_VERSION); + CBlockHeader header; + try { + file >> header; + fseek(file, postx.nTxOffset, SEEK_CUR); + file >> txOut; + } catch (std::exception &e) { + return error("%s : Deserialize or I/O error - %s", __func__, e.what()); + } + hashBlock = header.GetHash(); + if (txOut.GetHash() != hash) + return error("%s : txid mismatch", __func__); + return true; + } + } + + if (fAllowSlow) { // use coin database to locate block that contains transaction, and scan it + int nHeight = -1; + { + CCoinsViewCache &view = *pcoinsTip; + CCoins coins; + if (view.GetCoins(hash, coins)) + nHeight = coins.nHeight; + } + if (nHeight > 0) + pindexSlow = chainActive[nHeight]; + } + } + + if (pindexSlow) { + CBlock block; + if (ReadBlockFromDisk(block, pindexSlow)) { + BOOST_FOREACH(const CTransaction &tx, block.vtx) { + if (tx.GetHash() == hash) { + txOut = tx; + hashBlock = pindexSlow->GetBlockHash(); + return true; + } + } + } + } + + return false; +} + + + + + + +////////////////////////////////////////////////////////////////////////////// +// +// CBlock and CBlockIndex +// + +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"); + + // Write index header + unsigned int nSize = fileout.GetSerializeSize(block); + fileout << FLATDATA(Params().MessageStart()) << nSize; + + // Write block + long fileOutPos = ftell(fileout); + if (fileOutPos < 0) + return error("WriteBlockToDisk : ftell failed"); + pos.nPos = (unsigned int)fileOutPos; + fileout << block; + + // Flush stdio buffers and commit to disk before returning + fflush(fileout); + if (!IsInitialBlockDownload()) + FileCommit(fileout); + + return true; +} + +bool ReadBlockFromDisk(CBlock& block, const CDiskBlockPos& pos) +{ + block.SetNull(); + + // Open history file to read + CAutoFile filein = CAutoFile(OpenBlockFile(pos, true), SER_DISK, CLIENT_VERSION); + if (!filein) + return error("ReadBlockFromDisk : OpenBlockFile failed"); + + // Read block + try { + filein >> block; + } + catch (std::exception &e) { + return error("%s : Deserialize or I/O error - %s", __func__, e.what()); + } + + // Check the header + if (!CheckProofOfWork(block.GetPoWHash(), block.nBits)) + return error("ReadBlockFromDisk : Errors in block header"); + + return true; +} + +bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex) +{ + if (!ReadBlockFromDisk(block, pindex->GetBlockPos())) + return false; + if (block.GetHash() != pindex->GetBlockHash()) + return error("ReadBlockFromDisk(CBlock&, CBlockIndex*) : GetHash() doesn't match index"); + return true; +} + +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 + 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() <= (size_t)std::max((int64_t)0, GetArg("-maxorphanblocks", DEFAULT_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); +} + +int64_t GetBlockValue(int nHeight, int64_t nFees) +{ + int64_t nSubsidy = 50 * COIN; + nSubsidy >>= (nHeight / 840000); + return nSubsidy + nFees; +} + +// Traditional Targets only used for KGW v1 blocks +static const int64_t nTargetTimespan = 3.5 * 24 * 60 * 60; +static const int64_t nTargetSpacing = 2.5 * 60; +static const int64_t nInterval = nTargetTimespan / nTargetSpacing; + +// V3 Targets +static const int64_t nTargetTimespannew = 30 * 60; // every 30 minutes +static const int64_t nTargetSpacingnew = 1.5 * 60; // 90 sec +static const int64_t nIntervalnew = nTargetTimespannew / nTargetSpacingnew; + + +unsigned int static KimotoGravityWell(const CBlockIndex* pindexLast, const CBlockHeader *pblock, uint64_t TargetBlocksSpacingSeconds, uint64_t PastBlocksMin, uint64_t PastBlocksMax) { + /* current difficulty formula, megacoin - kimoto gravity well */ + const CBlockIndex *BlockLastSolved = pindexLast; + const CBlockIndex *BlockReading = pindexLast; + const CBigNum &bnProofOfWorkLimit = Params().ProofOfWorkLimit(); + + uint64_t PastBlocksMass = 0; + int64_t PastRateActualSeconds = 0; + int64_t PastRateTargetSeconds = 0; + double PastRateAdjustmentRatio = double(1); + CBigNum PastDifficultyAverage; + CBigNum PastDifficultyAveragePrev; + double EventHorizonDeviation; + double EventHorizonDeviationFast; + double EventHorizonDeviationSlow; + + if (BlockLastSolved == NULL || BlockLastSolved->nHeight == 0 || (uint64_t)BlockLastSolved->nHeight < PastBlocksMin) { + return bnProofOfWorkLimit.GetCompact(); + } + int64_t LatestBlockTime = BlockLastSolved->GetBlockTime(); + for (unsigned int i = 1; BlockReading && BlockReading->nHeight > 0; i++) { + if (PastBlocksMax > 0 && i > PastBlocksMax) { break; } + PastBlocksMass++; + + if (i == 1) { PastDifficultyAverage.SetCompact(BlockReading->nBits); } + else { PastDifficultyAverage = ((CBigNum().SetCompact(BlockReading->nBits) - PastDifficultyAveragePrev) / i) + PastDifficultyAveragePrev; } + PastDifficultyAveragePrev = PastDifficultyAverage; + + if (LatestBlockTime < BlockReading->GetBlockTime()) { + if (BlockReading->nHeight > 100000) LatestBlockTime = BlockReading->GetBlockTime(); + } + + PastRateActualSeconds = LatestBlockTime - BlockReading->GetBlockTime(); + + if (BlockReading->nHeight > 100000) { + if (PastRateActualSeconds < 1) { PastRateActualSeconds = 1; } + } else { + if (PastRateActualSeconds < 0) { PastRateActualSeconds = 0; } + } + + PastRateTargetSeconds = TargetBlocksSpacingSeconds * PastBlocksMass; + PastRateAdjustmentRatio = double(1); + + if (PastRateActualSeconds != 0 && PastRateTargetSeconds != 0) { + PastRateAdjustmentRatio = double(PastRateTargetSeconds) / double(PastRateActualSeconds); + } + EventHorizonDeviation = 1 + (0.7084 * pow((double(PastBlocksMass)/double(28.2)), -1.228)); + EventHorizonDeviationFast = EventHorizonDeviation; + EventHorizonDeviationSlow = 1 / EventHorizonDeviation; + + if (PastBlocksMass >= PastBlocksMin) { + if ((PastRateAdjustmentRatio <= EventHorizonDeviationSlow) || (PastRateAdjustmentRatio >= EventHorizonDeviationFast)) { + assert(BlockReading); + break; + } + } + if (BlockReading->pprev == NULL) { + assert(BlockReading); + break; + } + BlockReading = BlockReading->pprev; + } + + CBigNum bnNew(PastDifficultyAverage); + if (PastRateActualSeconds != 0 && PastRateTargetSeconds != 0) { + bnNew *= PastRateActualSeconds; + bnNew /= PastRateTargetSeconds; + } + if (bnNew > bnProofOfWorkLimit) { bnNew = bnProofOfWorkLimit; } + + /* + printf("Difficulty Retarget - Kimoto Gravity Well\n"); + printf("PastRateAdjustmentRatio = %g\n", PastRateAdjustmentRatio); + printf("Before: %08x %s\n", BlockLastSolved->nBits, CBigNum().SetCompact(BlockLastSolved->nBits).getuint256().ToString().c_str()); + printf("After: %08x %s\n", bnNew.GetCompact(), bnNew.getuint256().ToString().c_str()); + */ + return bnNew.GetCompact(); +} + +unsigned int static GetNextWorkRequired_OLD(const CBlockIndex* pindexLast, const CBlockHeader *pblock) +{ + const CBigNum &bnProofOfWorkLimit = Params().ProofOfWorkLimit(); + unsigned int nProofOfWorkLimit = bnProofOfWorkLimit.GetCompact(); + + // Genesis block + if (pindexLast == NULL) + return nProofOfWorkLimit; + + // Only change once per interval + if ((pindexLast->nHeight+1) % nInterval != 0) { + return pindexLast->nBits; + } + + // Pfennig: This fixes an issue where a 51% attack can change difficulty at will. + // Go back the full period unless it's the first retarget after genesis. Code courtesy of Art Forz + int blockstogoback = nInterval-1; + if ((pindexLast->nHeight+1) != nInterval) + blockstogoback = nInterval; + + // Go back by what we want to be 14 days worth of blocks + const CBlockIndex* pindexFirst = pindexLast; + for (int i = 0; pindexFirst && i < blockstogoback; i++) + pindexFirst = pindexFirst->pprev; + assert(pindexFirst); + + // Limit adjustment step + int64_t nActualTimespan = pindexLast->GetBlockTime() - pindexFirst->GetBlockTime(); + + if (nActualTimespan < nTargetTimespan/4) + nActualTimespan = nTargetTimespan/4; + if (nActualTimespan > nTargetTimespan*4) + nActualTimespan = nTargetTimespan*4; + + // Retarget + CBigNum bnNew; + bnNew.SetCompact(pindexLast->nBits); + bnNew *= nActualTimespan; + bnNew /= nTargetTimespan; + + if (bnNew > bnProofOfWorkLimit) + bnNew = bnProofOfWorkLimit; + + /// debug print + printf("GetNextWorkRequired RETARGET\n"); + printf("Before: %08x %s\n", pindexLast->nBits, CBigNum().SetCompact(pindexLast->nBits).getuint256().ToString().c_str()); + printf("After: %08x %s\n", bnNew.GetCompact(), bnNew.getuint256().ToString().c_str()); + + return bnNew.GetCompact(); +} + +unsigned int static GetNextWorkRequired_V3(const CBlockIndex* pindexLast, const CBlockHeader *pblock) +{ + const CBigNum &bnProofOfWorkLimit = Params().ProofOfWorkLimit(); + unsigned int nProofOfWorkLimit = bnProofOfWorkLimit.GetCompact(); + + // Genesis block + if (pindexLast == NULL) + return nProofOfWorkLimit; + + const CBlockIndex* pindexFirst = pindexLast->pprev; + int64_t nActualSpacing = pindexLast->GetBlockTime() - pindexFirst->GetBlockTime(); + + // limit the adjustment + if (nActualSpacing < nTargetSpacingnew/16) + nActualSpacing = nTargetSpacingnew/16; + if (nActualSpacing > nTargetSpacingnew*16) + nActualSpacing = nTargetSpacingnew*16; + + // Retarget + CBigNum bnNew; + bnNew.SetCompact(pindexLast->nBits); + bnNew *= ((nIntervalnew - 1) * nTargetSpacingnew + 2 * nActualSpacing); + bnNew /= ((nIntervalnew + 1) * nTargetSpacingnew); + + if (bnNew > bnProofOfWorkLimit) + bnNew = bnProofOfWorkLimit; + + + return bnNew.GetCompact(); +} + +unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock) +{ + unsigned int nHeight = pindexLast->nHeight + 1; + + // Settings for PFG KGW + unsigned int TimeDaySeconds = 60 * 60 * 24; + int64_t PastSecondsMin = TimeDaySeconds * 0.01; + int64_t PastSecondsMax = TimeDaySeconds * 0.14; + int64_t BlocksTargetSpacing = 0; + + if(nHeight < 15332) { + // KGW v1 + return GetNextWorkRequired_OLD(pindexLast, pblock); + } + else if(nHeight < 1036320) { + // Former 30 Second Block Target, KGW 2 Prefork + BlocksTargetSpacing = 30; + uint64_t PastBlocksMin = PastSecondsMin / BlocksTargetSpacing; + uint64_t PastBlocksMax = PastSecondsMax / BlocksTargetSpacing; + return KimotoGravityWell(pindexLast, pblock, BlocksTargetSpacing, PastBlocksMin, PastBlocksMax); + } + else if(nHeight < 1096772) { + // New 90 Second Block Target, KGW 2 Postfork + BlocksTargetSpacing = 90; + uint64_t PastBlocksMin = PastSecondsMin / BlocksTargetSpacing; + uint64_t PastBlocksMax = PastSecondsMax / BlocksTargetSpacing; + return KimotoGravityWell(pindexLast, pblock, BlocksTargetSpacing, PastBlocksMin, PastBlocksMax); + } + else { + return GetNextWorkRequired_V3(pindexLast, pblock); + } +} + +// +// minimum amount of work that could possibly be required nTime after +// minimum work required was nBase +// + +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: + if (TestNet() && nTime > nTargetSpacing*2) + return bnLimit.GetCompact(); + + CBigNum bnResult; + bnResult.SetCompact(nBase); + while (nTime > 0 && bnResult < bnLimit) + { + // 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(); +} + +bool CheckProofOfWork(uint256 hash, unsigned int nBits) +{ + CBigNum bnTarget; + bnTarget.SetCompact(nBits); + + // Check range + if (bnTarget <= 0 || bnTarget > Params().ProofOfWorkLimit()) + return error("CheckProofOfWork() : nBits below minimum work"); + + // Check proof of work matches claimed amount + if (hash > bnTarget.getuint256()) + return error("CheckProofOfWork() : hash doesn't match nBits"); + + return true; +} + +bool IsInitialBlockDownload() +{ + LOCK(cs_main); + if (fImporting || fReindex || chainActive.Height() < Checkpoints::GetTotalBlocksEstimate()) + return true; + static int64_t nLastUpdate; + static CBlockIndex* pindexLastBest; + if (chainActive.Tip() != pindexLastBest) + { + pindexLastBest = chainActive.Tip(); + nLastUpdate = GetTime(); + } + + // todo check this + return (GetTime() - nLastUpdate < 10 && + 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 180 blocks (+/- 6 hours if no one mines it) + // of our head, drop it + if (pindexBestForkTip && chainActive.Height() - pindexBestForkTip->nHeight >= 180) + pindexBestForkTip = NULL; + + if (pindexBestForkTip || (pindexBestInvalid && pindexBestInvalid->nChainWork > chainActive.Tip()->nChainWork + (chainActive.Tip()->GetBlockWork() * 6).getuint256())) + { + if (!fLargeWorkForkFound) + { + std::string warning = std::string("'Warning: Large-work fork detected, forking after block ") + + pindexBestForkBase->phashBlock->ToString() + std::string("'"); + CAlert::Notify(warning, true); + } + 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 180 blocks (+/- 6 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->GetBlockWork() * 7).getuint256() && + chainActive.Height() - pindexNewForkTip->nHeight < 180) + { + 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 (!pindexBestInvalid || pindexNew->nChainWork > pindexBestInvalid->nChainWork) + { + 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(); + } + 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())); + 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, 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 (!state.CorruptionPossible()) { + pindex->nStatus |= BLOCK_FAILED_VALID; + pblocktree->WriteBlockIndex(CDiskBlockIndex(pindex)); + setBlockIndexValid.erase(pindex); + InvalidChainFound(pindex); + } +} + +void UpdateTime(CBlockHeader& block, const CBlockIndex* pindexPrev) +{ + block.nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime()); + + // Updating time can change work required on testnet: + if (TestNet()) + block.nBits = GetNextWorkRequired(pindexPrev, &block); +} + + + + + + + + + + + +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; + ret = coins.Spend(txin.prevout, undo); + assert(ret); + txundo.vprevout.push_back(undo); + } + } + + // add outputs + 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()); + return true; +} + +bool VerifySignature(const CCoins& txFrom, const CTransaction& txTo, unsigned int nIn, unsigned int flags, int nHashType) +{ + return CScriptCheck(txFrom, txTo, nIn, flags, nHashType)(); +} + +bool CheckInputs(const CTransaction& tx, CValidationState &state, CCoinsViewCache &inputs, bool fScriptChecks, unsigned int flags, std::vector *pvChecks) +{ + if (!tx.IsCoinBase()) + { + if (pvChecks) + pvChecks->reserve(tx.vin.size()); + + // 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())); + + // While checking, GetBestBlock() refers to the parent block. + // This is also true for mempool checks. + 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; + const CCoins &coins = inputs.GetCoins(prevout.hash); + + // 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), + 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"), + REJECT_INVALID, "bad-txns-inputvalues-outofrange"); + + } + + 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_t nTxFee = nValueIn - tx.GetValueOut(); + if (nTxFee < 0) + 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"), + 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. + // Helps prevent CPU exhaustion attacks. + + // Skip ECDSA signature verification when connecting blocks + // before the last block chain checkpoint. This is safe because block merkle hashes are + // still computed and checked, and any change will be caught at the next checkpoint. + if (fScriptChecks) { + for (unsigned int i = 0; i < tx.vin.size(); i++) { + const COutPoint &prevout = tx.vin[i].prevout; + const CCoins &coins = inputs.GetCoins(prevout.hash); + + // Verify signature + CScriptCheck check(coins, tx, i, flags, 0); + if (pvChecks) { + pvChecks->push_back(CScriptCheck()); + check.swap(pvChecks->back()); + } else if (!check()) { + if (flags & SCRIPT_VERIFY_STRICTENC) { + // For now, check whether the failure was caused by non-canonical + // 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(false, REJECT_NONSTANDARD, "non-canonical"); + } + return state.DoS(100,false, REJECT_NONSTANDARD, "non-canonical"); + } + } + } + } + + return true; +} + + + +bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex, CCoinsViewCache& view, bool* pfClean) +{ + assert(pindex->GetBlockHash() == view.GetBestBlock()); + + if (pfClean) + *pfClean = false; + + bool fClean = true; + + CBlockUndo blockUndo; + CDiskBlockPos pos = pindex->GetUndoPos(); + if (pos.IsNull()) + return error("DisconnectBlock() : no undo data available"); + if (!blockUndo.ReadFromDisk(pos, pindex->pprev->GetBlockHash())) + return error("DisconnectBlock() : failure reading undo data"); + + if (blockUndo.vtxundo.size() + 1 != block.vtx.size()) + return error("DisconnectBlock() : block and undo data inconsistent"); + + // undo transactions in reverse order + for (int i = block.vtx.size() - 1; i >= 0; i--) { + const CTransaction &tx = block.vtx[i]; + uint256 hash = tx.GetHash(); + + // 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"); + + // remove outputs + outs = CCoins(); + + // restore inputs + if (i > 0) { // not coinbases + const CTxUndo &txundo = blockUndo.vtxundo[i-1]; + if (txundo.vprevout.size() != tx.vin.size()) + return error("DisconnectBlock() : transaction and undo data inconsistent"); + for (unsigned int j = tx.vin.size(); j-- > 0;) { + const COutPoint &out = tx.vin[j].prevout; + const CTxInUndo &undo = txundo.vprevout[j]; + CCoins coins; + view.GetCoins(out.hash, coins); // this can fail if the prevout was already entirely spent + if (undo.nHeight != 0) { + // undo data contains height: this is the last output of the prevout tx being spent + if (!coins.IsPruned()) + fClean = fClean && error("DisconnectBlock() : undo data overwriting existing transaction"); + coins = CCoins(); + coins.fCoinBase = undo.fCoinBase; + coins.nHeight = undo.nHeight; + coins.nVersion = undo.nVersion; + } else { + if (coins.IsPruned()) + fClean = fClean && error("DisconnectBlock() : undo data adding output to missing transaction"); + } + if (coins.IsAvailable(out.n)) + fClean = fClean && error("DisconnectBlock() : undo data overwriting existing output"); + if (coins.vout.size() < out.n+1) + coins.vout.resize(out.n+1); + coins.vout[out.n] = undo.txout; + if (!view.SetCoins(out.hash, coins)) + return error("DisconnectBlock() : cannot restore coin inputs"); + } + } + } + + // move best block pointer to prevout block + view.SetBestBlock(pindex->pprev->GetBlockHash()); + + if (pfClean) { + *pfClean = fClean; + return true; + } else { + return fClean; + } +} + +void static FlushBlockFile(bool fFinalize = false) +{ + LOCK(cs_LastBlockFile); + + CDiskBlockPos posOld(nLastBlockFile, 0); + + FILE *fileOld = OpenBlockFile(posOld); + if (fileOld) { + if (fFinalize) + TruncateFile(fileOld, infoLastBlockFile.nSize); + FileCommit(fileOld); + fclose(fileOld); + } + + fileOld = OpenUndoFile(posOld); + if (fileOld) { + if (fFinalize) + TruncateFile(fileOld, infoLastBlockFile.nUndoSize); + FileCommit(fileOld); + fclose(fileOld); + } +} + +bool FindUndoPos(CValidationState &state, int nFile, CDiskBlockPos &pos, unsigned int nAddSize); + +static CCheckQueue scriptcheckqueue(128); + +void ThreadScriptCheck() { + RenameThread("bitmark-scriptch"); + scriptcheckqueue.Thread(); +} + +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 + 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->GetBlockHash()); + return true; + } + + bool fScriptChecks = pindex->nHeight >= Checkpoints::GetTotalBlocksEstimate(); + + // Do not allow blocks that contain transactions which 'overwrite' older transactions, + // unless those are already completely spent. + // If such overwrites are allowed, coinbases and transactions depending upon those + // can be duplicated to remove the ability to spend the first instance -- even after + // being sent to another address. + // See BIP30 and http://r6.ca/blog/20120206T005236Z.html for more information. + // This logic is not necessary for memory pool transactions, as AcceptToMemoryPool + // already refuses previously-known transaction ids entirely. + // This rule was originally applied all blocks whose timestamp was after March 15, 2012, 0:00 UTC. + // 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"), + REJECT_INVALID, "bad-txns-BIP30"); + } + + // BIP16 + unsigned int flags = SCRIPT_VERIFY_NOCACHE | SCRIPT_VERIFY_P2SH; + + CBlockUndo blockundo; + + CCheckQueueControl control(fScriptChecks && nScriptCheckThreads ? &scriptcheckqueue : NULL); + + int64_t nStart = GetTimeMicros(); + int64_t nFees = 0; + int nInputs = 0; + unsigned int nSigOps = 0; + CDiskTxPos pos(pindex->GetBlockPos(), GetSizeOfCompactSize(block.vtx.size())); + std::vector > vPos; + vPos.reserve(block.vtx.size()); + for (unsigned int i = 0; i < block.vtx.size(); i++) + { + const CTransaction &tx = block.vtx[i]; + + nInputs += tx.vin.size(); + nSigOps += GetLegacySigOpCount(tx); + if (nSigOps > MAX_BLOCK_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"), + REJECT_INVALID, "bad-txns-inputs-missingorspent"); + + // Add in sigops done by pay-to-script-hash inputs; + // this is to prevent a "rogue miner" from creating + // an incredibly-expensive-to-validate block. + nSigOps += GetP2SHSigOpCount(tx, view); + if (nSigOps > MAX_BLOCK_SIGOPS) + return state.DoS(100, error("ConnectBlock() : too many sigops"), + REJECT_INVALID, "bad-blk-sigops"); + + nFees += view.GetValueIn(tx)-tx.GetValueOut(); + + std::vector vChecks; + if (!CheckInputs(tx, state, view, fScriptChecks, flags, nScriptCheckThreads ? &vChecks : NULL)) + return false; + control.Add(vChecks); + } + + CTxUndo txundo; + UpdateCoins(tx, state, view, txundo, pindex->nHeight, block.GetTxHash(i)); + if (!tx.IsCoinBase()) + blockundo.vtxundo.push_back(txundo); + + vPos.push_back(std::make_pair(block.GetTxHash(i), pos)); + pos.nTxOffset += ::GetSerializeSize(tx, SER_DISK, CLIENT_VERSION); + } + int64_t nTime = GetTimeMicros() - nStart; + if (fBenchmark) + 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 (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_t nTime2 = GetTimeMicros() - nStart; + if (fBenchmark) + 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; + + // Write undo information to disk + if (pindex->GetUndoPos().IsNull() || (pindex->nStatus & BLOCK_VALID_MASK) < BLOCK_VALID_SCRIPTS) + { + if (pindex->GetUndoPos().IsNull()) { + CDiskBlockPos pos; + if (!FindUndoPos(state, pindex->nFile, pos, ::GetSerializeSize(blockundo, SER_DISK, CLIENT_VERSION) + 40)) + return error("ConnectBlock() : FindUndoPos failed"); + if (!blockundo.WriteToDisk(pos, pindex->pprev->GetBlockHash())) + return state.Abort(_("Failed to write undo data")); + + // update nUndoPos in block index + pindex->nUndoPos = pos.nPos; + pindex->nStatus |= BLOCK_HAVE_UNDO; + } + + pindex->nStatus = (pindex->nStatus & ~BLOCK_VALID_MASK) | BLOCK_VALID_SCRIPTS; + + CDiskBlockIndex blockindex(pindex); + if (!pblocktree->WriteBlockIndex(blockindex)) + return state.Abort(_("Failed to write block index")); + } + + if (fTxIndex) + if (!pblocktree->WriteTxIndex(vPos)) + return state.Abort(_("Failed to write transaction index")); + + // add this block to the view's block chain + 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++) + g_signals.SyncTransaction(block.GetTxHash(i), block.vtx[i], &block); + + return true; +} + +// 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("out of disk space"); + FlushBlockFile(); + pblocktree->Sync(); + if (!pcoinsTip->Flush()) + return state.Abort(_("Failed to write to coin database")); + nLastWrite = GetTimeMicros(); + } + return true; +} + +// 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) + bool fIsInitialDownload = IsInitialBlockDownload(); + if ((chainActive.Height() % 20160) == 0 || (!fIsInitialDownload && (chainActive.Height() % 144) == 0)) + g_signals.SetBestChain(chainActive.GetLocator()); + + // New best block + nTimeBestReceived = GetTime(); + 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 = chainActive.Tip(); + for (int i = 0; i < 100 && pindex != NULL; i++) + { + if (pindex->nVersion > CBlock::CURRENT_VERSION) + ++nUpgraded; + pindex = pindex->pprev; + } + if (nUpgraded > 0) + 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!"); + } +} + +// 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(); + { + 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()), 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); + if (miPrev != mapBlockIndex.end()) + { + pindexNew->pprev = (*miPrev).second; + pindexNew->nHeight = pindexNew->pprev->nHeight + 1; + } + pindexNew->nTx = block.vtx.size(); + pindexNew->nChainWork = (pindexNew->pprev ? pindexNew->pprev->nChainWork : 0) + pindexNew->GetBlockWork().getuint256(); + pindexNew->nChainTx = (pindexNew->pprev ? pindexNew->pprev->nChainTx : 0) + pindexNew->nTx; + pindexNew->nFile = pos.nFile; + pindexNew->nDataPos = pos.nPos; + pindexNew->nUndoPos = 0; + pindexNew->nStatus = BLOCK_VALID_TRANSACTIONS | BLOCK_HAVE_DATA; + setBlockIndexValid.insert(pindexNew); + + if (!pblocktree->WriteBlockIndex(CDiskBlockIndex(pindexNew))) + return state.Abort(_("Failed to write block index")); + + // New best? + if (!ActivateBestChain(state)) + return false; + + 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; + g_signals.UpdatedTransaction(hashPrevBestCoinBase); + hashPrevBestCoinBase = block.GetTxHash(0); + } else + CheckForkWarningConditionsOnNewFork(pindexNew); + + if (!pblocktree->Flush()) + return state.Abort(_("Failed to sync block index")); + + uiInterface.NotifyBlocksChanged(); + return true; +} + + +bool FindBlockPos(CValidationState &state, CDiskBlockPos &pos, unsigned int nAddSize, unsigned int nHeight, uint64_t nTime, bool fKnown = false) +{ + bool fUpdatedLast = false; + + LOCK(cs_LastBlockFile); + + if (fKnown) { + if (nLastBlockFile != pos.nFile) { + nLastBlockFile = pos.nFile; + infoLastBlockFile.SetNull(); + pblocktree->ReadBlockFileInfo(nLastBlockFile, infoLastBlockFile); + fUpdatedLast = true; + } + } else { + while (infoLastBlockFile.nSize + nAddSize >= MAX_BLOCKFILE_SIZE) { + LogPrintf("Leaving block file %i: %s\n", nLastBlockFile, infoLastBlockFile.ToString()); + FlushBlockFile(true); + nLastBlockFile++; + infoLastBlockFile.SetNull(); + pblocktree->ReadBlockFileInfo(nLastBlockFile, infoLastBlockFile); // check whether data for the new file somehow already exist; can fail just fine + fUpdatedLast = true; + } + pos.nFile = nLastBlockFile; + pos.nPos = infoLastBlockFile.nSize; + } + + infoLastBlockFile.nSize += nAddSize; + infoLastBlockFile.AddBlock(nHeight, nTime); + + if (!fKnown) { + unsigned int nOldChunks = (pos.nPos + BLOCKFILE_CHUNK_SIZE - 1) / BLOCKFILE_CHUNK_SIZE; + unsigned int nNewChunks = (infoLastBlockFile.nSize + BLOCKFILE_CHUNK_SIZE - 1) / BLOCKFILE_CHUNK_SIZE; + if (nNewChunks > nOldChunks) { + if (CheckDiskSpace(nNewChunks * BLOCKFILE_CHUNK_SIZE - pos.nPos)) { + FILE *file = OpenBlockFile(pos); + if (file) { + 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("out of disk space"); + } + } + + if (!pblocktree->WriteBlockFileInfo(nLastBlockFile, infoLastBlockFile)) + return state.Abort(_("Failed to write file info")); + if (fUpdatedLast) + pblocktree->WriteLastBlockFile(nLastBlockFile); + + return true; +} + +bool FindUndoPos(CValidationState &state, int nFile, CDiskBlockPos &pos, unsigned int nAddSize) +{ + pos.nFile = nFile; + + LOCK(cs_LastBlockFile); + + unsigned int nNewSize; + if (nFile == nLastBlockFile) { + pos.nPos = infoLastBlockFile.nUndoSize; + nNewSize = (infoLastBlockFile.nUndoSize += nAddSize); + if (!pblocktree->WriteBlockFileInfo(nLastBlockFile, infoLastBlockFile)) + return state.Abort(_("Failed to write block info")); + } else { + CBlockFileInfo info; + if (!pblocktree->ReadBlockFileInfo(nFile, info)) + return state.Abort(_("Failed to read block info")); + pos.nPos = info.nUndoSize; + nNewSize = (info.nUndoSize += nAddSize); + if (!pblocktree->WriteBlockFileInfo(nFile, info)) + return state.Abort(_("Failed to write block info")); + } + + unsigned int nOldChunks = (pos.nPos + UNDOFILE_CHUNK_SIZE - 1) / UNDOFILE_CHUNK_SIZE; + unsigned int nNewChunks = (nNewSize + UNDOFILE_CHUNK_SIZE - 1) / UNDOFILE_CHUNK_SIZE; + if (nNewChunks > nOldChunks) { + if (CheckDiskSpace(nNewChunks * UNDOFILE_CHUNK_SIZE - pos.nPos)) { + FILE *file = OpenUndoFile(pos); + if (file) { + 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("out of disk space"); + } + + return true; +} + + +bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bool fCheckMerkleRoot) +{ + // These are checks that are independent of context + // that can be verified before saving an orphan block. + + // 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"), + REJECT_INVALID, "bad-blk-length"); + + // Check proof of work matches claimed amount + if (fCheckPOW && !CheckProofOfWork(block.GetPoWHash(), block.nBits)) + 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"), + 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"), + 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"), + REJECT_INVALID, "bad-cb-multiple"); + + // Check transactions + BOOST_FOREACH(const CTransaction& tx, block.vtx) + if (!CheckTransaction(tx, state)) + return error("CheckBlock() : CheckTransaction failed"); + + // Build the merkle tree already. We need it anyway later, and it makes the + // block cache the transaction hashes, which means they don't need to be + // recalculated many times during this block's validation. + block.BuildMerkleTree(); + + // Check for duplicate txids. This is caught by ConnectInputs(), + // but catching it earlier avoids a potential DoS attack: + set uniqueTx; + for (unsigned int i = 0; i < block.vtx.size(); i++) { + uniqueTx.insert(block.GetTxHash(i)); + } + if (uniqueTx.size() != block.vtx.size()) + 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) + { + nSigOps += GetLegacySigOpCount(tx); + } + if (nSigOps > MAX_BLOCK_SIGOPS) + return state.DoS(100, error("CheckBlock() : out-of-bounds SigOpCount"), + REJECT_INVALID, "bad-blk-sigops", true); + + // Check merkle root + 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"), 0, "duplicate"); + + // Get prev block index + CBlockIndex* pindexPrev = NULL; + int nHeight = 0; + 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"), 0, "bad-prevblk"); + pindexPrev = (*mi).second; + nHeight = pindexPrev->nHeight+1; + + // Check proof of work + if (block.nBits != GetNextWorkRequired(pindexPrev, &block)) + 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"), + 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"), + 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), + 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 + if (block.nVersion < 2) + { + 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 + if (block.nVersion >= 2) + { + CScript expect = CScript() << nHeight; + 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 + try { + unsigned int nBlockSize = ::GetSerializeSize(block, SER_DISK, CLIENT_VERSION); + CDiskBlockPos blockPos; + if (dbp != NULL) + blockPos = *dbp; + if (!FindBlockPos(state, blockPos, nBlockSize+8, nHeight, block.nTime, dbp != NULL)) + return error("AcceptBlock() : FindBlockPos failed"); + if (dbp == NULL) + if (!WriteBlockToDisk(block, blockPos)) + return state.Abort(_("Failed to write block")); + if (!AddToBlockIndex(block, state, blockPos)) + return error("AcceptBlock() : AddToBlockIndex failed"); + } catch(std::runtime_error &e) { + return state.Abort(_("System error: ") + e.what()); + } + + // Relay inventory, but don't relay old inventory during initial block download + int nBlockEstimate = Checkpoints::GetTotalBlocksEstimate(); + if (chainActive.Tip()->GetBlockHash() == hash) + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + 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; + for (unsigned int i = 0; i < nToCheck && nFound < nRequired && pstart != NULL; i++) + { + if (pstart->nVersion >= minVersion) + ++nFound; + pstart = pstart->pprev; + } + 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", 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()), 0, "duplicate"); + if (mapOrphanBlocks.count(hash)) + 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 != (chainActive.Tip() ? chainActive.Tip()->GetBlockHash() : uint256(0))) + { + // Extra checks to prevent "fill up memory by spamming with bogus blocks" + int64_t deltaTime = pblock->GetBlockTime() - pcheckpoint->nTime; + if (deltaTime < 0) + { + return state.DoS(100, error("ProcessBlock() : block with timestamp before last checkpoint"), + REJECT_CHECKPOINT, "time-too-old"); + } + CBigNum bnNewBlock; + bnNewBlock.SetCompact(pblock->nBits); + CBigNum bnRequired; + bnRequired.SetCompact(ComputeMinWork(pcheckpoint->nBits, deltaTime)); + if (bnNewBlock > bnRequired) + { + return state.DoS(100, error("ProcessBlock() : block with too little proof-of-work"), + REJECT_INVALID, "bad-diffbits"); + } + } + + + // 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)) + { + 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) { + 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->hashPrev, pblock2)); + + // Ask this guy to fill in what we're missing + PushGetBlocks(pfrom, chainActive.Tip(), GetOrphanRoot(hash)); + } + return true; + } + + // Store to disk + if (!AcceptBlock(*pblock, state, dbp)) + return error("ProcessBlock() : AcceptBlock FAILED"); + + // Recursively process any orphan blocks that depended on this one + vector vWorkQueue; + vWorkQueue.push_back(hash); + for (unsigned int i = 0; i < vWorkQueue.size(); i++) + { + uint256 hashPrev = vWorkQueue[i]; + for (multimap::iterator mi = mapOrphanBlocksByPrev.lower_bound(hashPrev); + mi != mapOrphanBlocksByPrev.upper_bound(hashPrev); + ++mi) + { + 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(block, stateDummy)) + vWorkQueue.push_back(mi->second->hashBlock); + mapOrphanBlocks.erase(mi->second->hashBlock); + delete mi->second; + } + mapOrphanBlocksByPrev.erase(hashPrev); + } + + LogPrintf("ProcessBlock: ACCEPTED\n"); + return true; +} + + + + + + + + +CMerkleBlock::CMerkleBlock(const CBlock& block, CBloomFilter& filter) +{ + header = block.GetBlockHeader(); + + vector vMatch; + vector vHashes; + + vMatch.reserve(block.vtx.size()); + vHashes.reserve(block.vtx.size()); + + for (unsigned int i = 0; i < block.vtx.size(); i++) + { + uint256 hash = block.vtx[i].GetHash(); + if (filter.IsRelevantAndUpdate(block.vtx[i], hash)) + { + vMatch.push_back(true); + vMatchedTxn.push_back(make_pair(i, hash)); + } + else + vMatch.push_back(false); + vHashes.push_back(hash); + } + + txn = CPartialMerkleTree(vHashes, vMatch); +} + + + + + + + + +uint256 CPartialMerkleTree::CalcHash(int height, unsigned int pos, const std::vector &vTxid) { + if (height == 0) { + // hash at height 0 is the txids themself + return vTxid[pos]; + } else { + // calculate left hash + uint256 left = CalcHash(height-1, pos*2, vTxid), right; + // calculate right hash if not beyong the end of the array - copy left hash otherwise1 + if (pos*2+1 < CalcTreeWidth(height-1)) + right = CalcHash(height-1, pos*2+1, vTxid); + else + right = left; + // combine subhashes + return Hash(BEGIN(left), END(left), BEGIN(right), END(right)); + } +} + +void CPartialMerkleTree::TraverseAndBuild(int height, unsigned int pos, const std::vector &vTxid, const std::vector &vMatch) { + // determine whether this node is the parent of at least one matched txid + bool fParentOfMatch = false; + for (unsigned int p = pos << height; p < (pos+1) << height && p < nTransactions; p++) + fParentOfMatch |= vMatch[p]; + // store as flag bit + vBits.push_back(fParentOfMatch); + if (height==0 || !fParentOfMatch) { + // if at height 0, or nothing interesting below, store hash and stop + vHash.push_back(CalcHash(height, pos, vTxid)); + } else { + // otherwise, don't store any hash, but descend into the subtrees + TraverseAndBuild(height-1, pos*2, vTxid, vMatch); + if (pos*2+1 < CalcTreeWidth(height-1)) + TraverseAndBuild(height-1, pos*2+1, vTxid, vMatch); + } +} + +uint256 CPartialMerkleTree::TraverseAndExtract(int height, unsigned int pos, unsigned int &nBitsUsed, unsigned int &nHashUsed, std::vector &vMatch) { + if (nBitsUsed >= vBits.size()) { + // overflowed the bits array - failure + fBad = true; + return 0; + } + bool fParentOfMatch = vBits[nBitsUsed++]; + if (height==0 || !fParentOfMatch) { + // if at height 0, or nothing interesting below, use stored hash and do not descend + if (nHashUsed >= vHash.size()) { + // overflowed the hash array - failure + fBad = true; + return 0; + } + const uint256 &hash = vHash[nHashUsed++]; + if (height==0 && fParentOfMatch) // in case of height 0, we have a matched txid + vMatch.push_back(hash); + return hash; + } else { + // otherwise, descend into the subtrees to extract matched txids and hashes + uint256 left = TraverseAndExtract(height-1, pos*2, nBitsUsed, nHashUsed, vMatch), right; + if (pos*2+1 < CalcTreeWidth(height-1)) + right = TraverseAndExtract(height-1, pos*2+1, nBitsUsed, nHashUsed, vMatch); + else + right = left; + // and combine them before returning + return Hash(BEGIN(left), END(left), BEGIN(right), END(right)); + } +} + +CPartialMerkleTree::CPartialMerkleTree(const std::vector &vTxid, const std::vector &vMatch) : nTransactions(vTxid.size()), fBad(false) { + // reset state + vBits.clear(); + vHash.clear(); + + // calculate height of tree + int nHeight = 0; + while (CalcTreeWidth(nHeight) > 1) + nHeight++; + + // traverse the partial tree + TraverseAndBuild(nHeight, 0, vTxid, vMatch); +} + +CPartialMerkleTree::CPartialMerkleTree() : nTransactions(0), fBad(true) {} + +uint256 CPartialMerkleTree::ExtractMatches(std::vector &vMatch) { + vMatch.clear(); + // An empty set will not work + if (nTransactions == 0) + return 0; + // check for excessively high numbers of transactions + if (nTransactions > MAX_BLOCK_SIZE / 60) // 60 is the lower bound for the size of a serialized CTransaction + return 0; + // there can never be more hashes provided than one for every txid + if (vHash.size() > nTransactions) + return 0; + // there must be at least one bit per node in the partial tree, and at least one node per hash + if (vBits.size() < vHash.size()) + return 0; + // calculate height of tree + int nHeight = 0; + while (CalcTreeWidth(nHeight) > 1) + nHeight++; + // traverse the partial tree + unsigned int nBitsUsed = 0, nHashUsed = 0; + uint256 hashMerkleRoot = TraverseAndExtract(nHeight, 0, nBitsUsed, nHashUsed, vMatch); + // verify that no problems occured during the tree traversal + if (fBad) + return 0; + // verify that all bits were consumed (except for the padding caused by serializing it as a byte sequence) + if ((nBitsUsed+7)/8 != (vBits.size()+7)/8) + return 0; + // verify that all hashes were consumed + if (nHashUsed != vHash.size()) + return 0; + return hashMerkleRoot; +} + + + + + + + +bool AbortNode(const std::string &strMessage) { + strMiscWarning = strMessage; + LogPrintf("*** %s\n", strMessage); + uiInterface.ThreadSafeMessageBox(strMessage, "", CClientUIInterface::MSG_ERROR); + StartShutdown(); + return false; +} + +bool CheckDiskSpace(uint64_t nAdditionalBytes) +{ + uint64_t nFreeBytesAvailable = filesystem::space(GetDataDir()).available; + + // Check for nMinDiskSpace bytes (currently 50MB) + if (nFreeBytesAvailable < nMinDiskSpace + nAdditionalBytes) + return AbortNode(_("Error: Disk space is low!")); + + return true; +} + +FILE* OpenDiskFile(const CDiskBlockPos &pos, const char *prefix, bool fReadOnly) +{ + if (pos.IsNull()) + return NULL; + boost::filesystem::path path = GetDataDir() / "blocks" / strprintf("%s%05u.dat", prefix, pos.nFile); + boost::filesystem::create_directories(path.parent_path()); + FILE* file = fopen(path.string().c_str(), "rb+"); + if (!file && !fReadOnly) + file = fopen(path.string().c_str(), "wb+"); + if (!file) { + LogPrintf("Unable to open file %s\n", path.string()); + return NULL; + } + if (pos.nPos) { + if (fseek(file, pos.nPos, SEEK_SET)) { + LogPrintf("Unable to seek to position %u of %s\n", pos.nPos, path.string()); + fclose(file); + return NULL; + } + } + return file; +} + +FILE* OpenBlockFile(const CDiskBlockPos &pos, bool fReadOnly) { + return OpenDiskFile(pos, "blk", fReadOnly); +} + +FILE* OpenUndoFile(const CDiskBlockPos &pos, bool fReadOnly) { + return OpenDiskFile(pos, "rev", fReadOnly); +} + +CBlockIndex * InsertBlockIndex(uint256 hash) +{ + if (hash == 0) + return NULL; + + // Return existing + map::iterator mi = mapBlockIndex.find(hash); + if (mi != mapBlockIndex.end()) + return (*mi).second; + + // Create new + CBlockIndex* pindexNew = new CBlockIndex(); + if (!pindexNew) + throw runtime_error("LoadBlockIndex() : new CBlockIndex failed"); + mi = mapBlockIndex.insert(make_pair(hash, pindexNew)).first; + pindexNew->phashBlock = &((*mi).first); + + return pindexNew; +} + +bool static LoadBlockIndexDB() +{ + if (!pblocktree->LoadBlockIndexGuts()) + return false; + + boost::this_thread::interruption_point(); + + // Calculate nChainWork + vector > vSortedByHeight; + vSortedByHeight.reserve(mapBlockIndex.size()); + BOOST_FOREACH(const PAIRTYPE(uint256, CBlockIndex*)& item, mapBlockIndex) + { + CBlockIndex* pindex = item.second; + vSortedByHeight.push_back(make_pair(pindex->nHeight, pindex)); + } + sort(vSortedByHeight.begin(), vSortedByHeight.end()); + BOOST_FOREACH(const PAIRTYPE(int, CBlockIndex*)& item, vSortedByHeight) + { + CBlockIndex* pindex = item.second; + pindex->nChainWork = (pindex->pprev ? pindex->pprev->nChainWork : 0) + pindex->GetBlockWork().getuint256(); + 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); + LogPrintf("LoadBlockIndexDB(): last block file = %i\n", nLastBlockFile); + if (pblocktree->ReadBlockFileInfo(nLastBlockFile, infoLastBlockFile)) + LogPrintf("LoadBlockIndexDB(): last block file info: %s\n", infoLastBlockFile.ToString()); + + // Check whether we need to continue reindexing + bool fReindexing = false; + pblocktree->ReadReindexing(fReindexing); + fReindex |= fReindexing; + + // Check whether we have a transaction index + pblocktree->ReadFlag("txindex", fTxIndex); + LogPrintf("LoadBlockIndexDB(): transaction index %s\n", fTxIndex ? "enabled" : "disabled"); + + // Load pointer to end of best chain + std::map::iterator it = mapBlockIndex.find(pcoinsTip->GetBestBlock()); + if (it == mapBlockIndex.end()) + return true; + 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) +{ + 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 > chainActive.Height()) + nCheckDepth = chainActive.Height(); + nCheckLevel = std::max(0, std::min(4, nCheckLevel)); + LogPrintf("Verifying last %i blocks at level %i\n", nCheckDepth, nCheckLevel); + CCoinsViewCache coins(*pcoinsTip, true); + CBlockIndex* pindexState = chainActive.Tip(); + CBlockIndex* pindexFailure = NULL; + int nGoodTransactions = 0; + CValidationState state; + for (CBlockIndex* pindex = chainActive.Tip(); pindex && pindex->pprev; pindex = pindex->pprev) + { + boost::this_thread::interruption_point(); + 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()); + // 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()); + // 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()); + } + } + // 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()); + pindexState = pindex->pprev; + if (!fClean) { + nGoodTransactions = 0; + pindexFailure = pindex; + } else + nGoodTransactions += block.vtx.size(); + } + } + if (pindexFailure) + 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 != chainActive.Tip()) { + boost::this_thread::interruption_point(); + pindex = chainActive.Next(pindex); + CBlock block; + if (!ReadBlockFromDisk(block, pindex)) + 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()); + } + } + + LogPrintf("No coin database inconsistencies in last %i blocks (%i transactions)\n", chainActive.Height() - pindexState->nHeight, nGoodTransactions); + + return true; +} + +void UnloadBlockIndex() +{ + mapBlockIndex.clear(); + setBlockIndexValid.clear(); + chainActive.SetTip(NULL); + pindexBestInvalid = NULL; +} + +bool LoadBlockIndex() +{ + // Load block index from databases + if (!fReindex && !LoadBlockIndexDB()) + return false; + return true; +} + +void static BitmarkGenesisMiner(CBlock block, int start, int threads) +{ + LogPrintf("PfennigMiner started\n"); + SetThreadPriority(THREAD_PRIORITY_LOWEST); + RenameThread("bitmark-miner"); + block.nTime += start; + try { while (true) { + printf("Searching for genesis block...\n"); + uint256 hashTarget = Params().ProofOfWorkLimit().getuint256(); + uint256 thash; + char scratchpad[SCRYPT_SCRATCHPAD_SIZE]; + + while(true) + { + scrypt_1024_1_1_256_sp(BEGIN(block.nVersion), BEGIN(thash), scratchpad); + if (thash <= hashTarget) + break; + if ((block.nNonce & 0xFFF) == 0) + { + printf("nonce %08X: hash = %s (target = %s)\n", block.nNonce, thash.ToString().c_str(), hashTarget.ToString().c_str()); + } + ++block.nNonce; + if (block.nNonce == 0) + { + printf("NONCE WRAPPED, incrementing time\n"); + block.nTime+=threads; + } + } + printf("block.nTime = %u \n", block.nTime); + printf("block.nNonce = %u \n", block.nNonce); + printf("block.GetHash = %s\n", block.GetHash().ToString().c_str()); + } } + catch (boost::thread_interrupted) + { + LogPrintf("PfennigMiner terminated\n"); + throw; + } +} + +void GenesisBitmark(CBlock block) +{ + static boost::thread_group* minerThreads = NULL; + + int nThreads = boost::thread::hardware_concurrency(); + + if (minerThreads != NULL) + { + minerThreads->interrupt_all(); + delete minerThreads; + minerThreads = NULL; + } + + if (nThreads == 0) + return; + + minerThreads = new boost::thread_group(); + for (int i = 0; i < nThreads; i++) + minerThreads->create_thread(boost::bind(&BitmarkGenesisMiner, block, i, nThreads)); +} + +bool InitBlockIndex() { + LOCK(cs_main); + // Check whether we're already initialized + if (chainActive.Genesis() != NULL) + return true; + + // Use the provided setting for -txindex in the new database + fTxIndex = GetBoolArg("-txindex", false); + pblocktree->WriteFlag("txindex", fTxIndex); + LogPrintf("Initializing databases...\n"); + + // Only add the genesis block if not reindexing (in which case we reuse the one already on disk) + if (!fReindex) { + // Generate a new Genesis block + if (true) + { + CBlock &block = const_cast(Params().GenesisBlock()); + GenesisBitmark(block); + block.print(); + while(true) {} + } + try { + CBlock &block = const_cast(Params().GenesisBlock()); + // Start new block file + unsigned int nBlockSize = ::GetSerializeSize(block, SER_DISK, CLIENT_VERSION); + CDiskBlockPos blockPos; + CValidationState state; + if (!FindBlockPos(state, blockPos, nBlockSize+8, 0, block.nTime)) + return error("LoadBlockIndex() : FindBlockPos failed"); + if (!WriteBlockToDisk(block, blockPos)) + return error("LoadBlockIndex() : writing genesis block to disk failed"); + if (!AddToBlockIndex(block, state, blockPos)) + return error("LoadBlockIndex() : genesis block not accepted"); + } catch(std::runtime_error &e) { + return error("LoadBlockIndex() : failed to initialize block database: %s", e.what()); + } + } + + return true; +} + + + +void PrintBlockTree() +{ + AssertLockHeld(cs_main); + // pre-compute tree structure + map > mapNext; + for (map::iterator mi = mapBlockIndex.begin(); mi != mapBlockIndex.end(); ++mi) + { + CBlockIndex* pindex = (*mi).second; + mapNext[pindex->pprev].push_back(pindex); + // test + //while (rand() % 3 == 0) + // mapNext[pindex->pprev].push_back(pindex); + } + + vector > vStack; + vStack.push_back(make_pair(0, chainActive.Genesis())); + + int nPrevCol = 0; + while (!vStack.empty()) + { + int nCol = vStack.back().first; + CBlockIndex* pindex = vStack.back().second; + vStack.pop_back(); + + // print split or gap + if (nCol > nPrevCol) + { + for (int i = 0; i < nCol-1; i++) + LogPrintf("| "); + LogPrintf("|\\\n"); + } + else if (nCol < nPrevCol) + { + for (int i = 0; i < nCol; i++) + LogPrintf("| "); + LogPrintf("|\n"); + } + nPrevCol = nCol; + + // print columns + for (int i = 0; i < nCol; i++) + LogPrintf("| "); + + // print item + CBlock block; + ReadBlockFromDisk(block, pindex); + 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()), + block.vtx.size()); + + // put the main time-chain first + vector& vNext = mapNext[pindex]; + for (unsigned int i = 0; i < vNext.size(); i++) + { + if (chainActive.Next(vNext[i])) + { + swap(vNext[0], vNext[i]); + break; + } + } + + // iterate children + for (unsigned int i = 0; i < vNext.size(); i++) + vStack.push_back(make_pair(nCol+i, vNext[i])); + } +} + +bool LoadExternalBlockFile(FILE* fileIn, CDiskBlockPos *dbp) +{ + int64_t nStart = GetTimeMillis(); + + int nLoaded = 0; + try { + CBufferedFile blkdat(fileIn, 2*MAX_BLOCK_SIZE, MAX_BLOCK_SIZE+8, SER_DISK, CLIENT_VERSION); + uint64_t nStartByte = 0; + if (dbp) { + // (try to) skip already indexed part + CBlockFileInfo info; + if (pblocktree->ReadBlockFileInfo(dbp->nFile, info)) { + nStartByte = info.nSize; + blkdat.Seek(info.nSize); + } + } + uint64_t nRewind = blkdat.GetPos(); + while (blkdat.good() && !blkdat.eof()) { + boost::this_thread::interruption_point(); + + blkdat.SetPos(nRewind); + nRewind++; // start one byte further next time, in case of failure + blkdat.SetLimit(); // remove former limit + unsigned int nSize = 0; + try { + // locate a header + unsigned char buf[MESSAGE_START_SIZE]; + blkdat.FindByte(Params().MessageStart()[0]); + nRewind = blkdat.GetPos()+1; + blkdat >> FLATDATA(buf); + if (memcmp(buf, Params().MessageStart(), MESSAGE_START_SIZE)) + continue; + // read size + blkdat >> nSize; + if (nSize < 80 || nSize > MAX_BLOCK_SIZE) + continue; + } catch (std::exception &e) { + // no valid block header found; don't complain + break; + } + try { + // read block + uint64_t nBlockPos = blkdat.GetPos(); + blkdat.SetLimit(nBlockPos + nSize); + CBlock block; + blkdat >> block; + nRewind = blkdat.GetPos(); + + // process block + if (nBlockPos >= nStartByte) { + LOCK(cs_main); + if (dbp) + dbp->nPos = nBlockPos; + CValidationState state; + if (ProcessBlock(state, NULL, &block, dbp)) + nLoaded++; + if (state.IsError()) + break; + } + } catch (std::exception &e) { + LogPrintf("%s : Deserialize or I/O error - %s", __func__, e.what()); + } + } + fclose(fileIn); + } catch(std::runtime_error &e) { + AbortNode(_("Error: system error: ") + e.what()); + } + if (nLoaded > 0) + LogPrintf("Loaded %i blocks from external file in %dms\n", nLoaded, GetTimeMillis() - nStart); + return nLoaded > 0; +} + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +// +// CAlert +// + +string GetWarnings(string strFor) +{ + int nPriority = 0; + string strStatusBar; + string strRPC; + + if (GetBoolArg("-testsafemode", false)) + strRPC = "test"; + + if (!CLIENT_VERSION_IS_RELEASE) + strStatusBar = _("This is a pre-release test build - use at your own risk - do not use for mining or merchant applications"); + + // Misc warnings like out of disk space and clock is wrong + if (strMiscWarning != "") + { + nPriority = 1000; + strStatusBar = strMiscWarning; + } + + if (fLargeWorkForkFound) + { + nPriority = 2000; + 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 + { + LOCK(cs_mapAlerts); + BOOST_FOREACH(PAIRTYPE(const uint256, CAlert)& item, mapAlerts) + { + const CAlert& alert = item.second; + if (alert.AppliesToMe() && alert.nPriority > nPriority) + { + nPriority = alert.nPriority; + strStatusBar = alert.strStatusBar; + } + } + } + + if (strFor == "statusbar") + return strStatusBar; + else if (strFor == "rpc") + return strRPC; + assert(!"GetWarnings() : invalid parameter"); + return "error"; +} + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +// +// Messages +// + + +bool static AlreadyHave(const CInv& inv) +{ + switch (inv.type) + { + case MSG_TX: + { + bool txInMap = false; + txInMap = mempool.exists(inv.hash); + return txInMap || mapOrphanTransactions.count(inv.hash) || + pcoinsTip->HaveCoins(inv.hash); + } + case MSG_BLOCK: + return mapBlockIndex.count(inv.hash) || + mapOrphanBlocks.count(inv.hash); + } + // Don't know what it is, just say we already got one + return true; +} + + +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()) + break; + + const CInv &inv = *it; + { + boost::this_thread::interruption_point(); + it++; + + if (inv.type == MSG_BLOCK || inv.type == MSG_FILTERED_BLOCK) + { + 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) + pfrom->PushMessage("block", block); + else // MSG_FILTERED_BLOCK) + { + LOCK(pfrom->cs_filter); + if (pfrom->pfilter) + { + CMerkleBlock merkleBlock(block, *pfrom->pfilter); + pfrom->PushMessage("merkleblock", merkleBlock); + // CMerkleBlock just contains hashes, so also push any transactions in the block the client did not see + // This avoids hurting performance by pointlessly requiring a round-trip + // Note that there is currently no way for a node to request any single transactions we didnt send here - + // they must either disconnect and retry or request the full block. + // Thus, the protocol spec specified allows for us to provide duplicate txn here, + // however we MUST always provide at least what the remote peer needs + typedef std::pair PairType; + BOOST_FOREACH(PairType& pair, merkleBlock.vMatchedTxn) + if (!pfrom->setInventoryKnown.count(CInv(MSG_TX, pair.second))) + pfrom->PushMessage("tx", block.vtx[pair.first]); + } + // else + // no response + } + + // Trigger them to send a getblocks request for the next batch of inventory + if (inv.hash == pfrom->hashContinue) + { + // Bypass PushInventory, this must send even if redundant, + // 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, chainActive.Tip()->GetBlockHash())); + pfrom->PushMessage("inv", vInv); + pfrom->hashContinue = 0; + } + } + } + else if (inv.IsKnownType()) + { + // Send stream from relay memory + bool pushed = false; + { + LOCK(cs_mapRelay); + map::iterator mi = mapRelay.find(inv); + if (mi != mapRelay.end()) { + pfrom->PushMessage(inv.GetCommand(), (*mi).second); + pushed = true; + } + } + if (!pushed && inv.type == MSG_TX) { + CTransaction tx; + if (mempool.lookup(inv.hash, tx)) { + CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); + ss.reserve(1000); + ss << tx; + pfrom->PushMessage("tx", ss); + pushed = true; + } + } + if (!pushed) { + vNotFound.push_back(inv); + } + } + + // Track requests for our stuff. + g_signals.Inventory(inv.hash); + + if (inv.type == MSG_BLOCK || inv.type == MSG_FILTERED_BLOCK) + break; + } + } + + pfrom->vRecvGetData.erase(pfrom->vRecvGetData.begin(), it); + + if (!vNotFound.empty()) { + // Let the peer know that we didn't find what it asked for, so it doesn't + // have to wait around forever. Currently only SPV clients actually care + // about this message: it's needed when they are recursively walking the + // dependencies of relevant unconfirmed transactions. SPV clients want to + // do that because they want to know about (and store and rebroadcast and + // risk analyze) the dependencies of transactions relevant to them, without + // having to download the entire memory pool. + pfrom->PushMessage("notfound", vNotFound); + } +} + +bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) +{ + RandAddSeedPerfmon(); + LogPrint("net", "received: %s (%u bytes)\n", strCommand, vRecv.size()); + if (mapArgs.count("-dropmessagestest") && GetRand(atoi(mapArgs["-dropmessagestest"])) == 0) + { + LogPrintf("dropmessagestest DROPPING RECV MESSAGE\n"); + return true; + } + + { + LOCK(cs_main); + State(pfrom->GetId())->nLastBlockProcess = GetTimeMicros(); + } + + + + if (strCommand == "version") + { + // Each connection can only send one version message + if (pfrom->nVersion != 0) + { + pfrom->PushMessage("reject", strCommand, REJECT_DUPLICATE, string("Duplicate version message")); + Misbehaving(pfrom->GetId(), 1); + return false; + } + + int64_t nTime; + CAddress addrMe; + CAddress addrFrom; + uint64_t nNonce = 1; + vRecv >> pfrom->nVersion >> pfrom->nServices >> nTime >> addrMe; + if (pfrom->nVersion < MIN_PEER_PROTO_VERSION) + { + // 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; + } + + if (pfrom->nVersion == 10300) + pfrom->nVersion = 300; + if (!vRecv.empty()) + vRecv >> addrFrom >> nNonce; + if (!vRecv.empty()) { + vRecv >> LIMITED_STRING(pfrom->strSubVer, 256); + pfrom->cleanSubVer = SanitizeString(pfrom->strSubVer); + } + if (!vRecv.empty()) + vRecv >> pfrom->nStartingHeight; + if (!vRecv.empty()) + vRecv >> pfrom->fRelayTxes; // set to true after we get the first filter* message + else + pfrom->fRelayTxes = true; + + if (pfrom->fInbound && addrMe.IsRoutable()) + { + pfrom->addrLocal = addrMe; + SeenLocal(addrMe); + } + + // Disconnect if we connected to ourself + if (nNonce == nLocalHostNonce && nNonce > 1) + { + LogPrintf("connected to self at %s, disconnecting\n", pfrom->addr.ToString()); + pfrom->fDisconnect = true; + return true; + } + + // Be shy and don't send version until we hear + if (pfrom->fInbound) + pfrom->PushVersion(); + + pfrom->fClient = !(pfrom->nServices & NODE_NETWORK); + + + // Change version + pfrom->PushMessage("verack"); + pfrom->ssSend.SetVersion(min(pfrom->nVersion, PROTOCOL_VERSION)); + + if (!pfrom->fInbound) + { + // Advertise our address + if (!fNoListen && !IsInitialBlockDownload()) + { + CAddress addr = GetLocalAddress(&pfrom->addr); + if (addr.IsRoutable()) + pfrom->PushAddress(addr); + } + + // Get recent addresses + if (pfrom->fOneShot || pfrom->nVersion >= CADDR_TIME_VERSION || addrman.size() < 1000) + { + pfrom->PushMessage("getaddr"); + pfrom->fGetAddr = true; + } + addrman.Good(pfrom->addr); + } else { + if (((CNetAddr)pfrom->addr) == (CNetAddr)addrFrom) + { + addrman.Add(addrFrom, addrFrom); + addrman.Good(addrFrom); + } + } + + // Relay alerts + { + LOCK(cs_mapAlerts); + BOOST_FOREACH(PAIRTYPE(const uint256, CAlert)& item, mapAlerts) + item.second.RelayTo(pfrom); + } + + pfrom->fSuccessfullyConnected = true; + + 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); + + } + + + else if (pfrom->nVersion == 0) + { + // Must have a version message before anything else + Misbehaving(pfrom->GetId(), 1); + return false; + } + + + else if (strCommand == "verack") + { + pfrom->SetRecvVersion(min(pfrom->nVersion, PROTOCOL_VERSION)); + } + + + else if (strCommand == "addr") + { + vector vAddr; + vRecv >> vAddr; + + // Don't want addr from older versions unless seeding + if (pfrom->nVersion < CADDR_TIME_VERSION && addrman.size() > 1000) + return true; + if (vAddr.size() > 1000) + { + Misbehaving(pfrom->GetId(), 20); + return error("message addr size() = %u", vAddr.size()); + } + + // Store the new addresses + vector vAddrOk; + int64_t nNow = GetAdjustedTime(); + int64_t nSince = nNow - 10 * 60; + BOOST_FOREACH(CAddress& addr, vAddr) + { + boost::this_thread::interruption_point(); + + if (addr.nTime <= 100000000 || addr.nTime > nNow + 10 * 60) + addr.nTime = nNow - 5 * 24 * 60 * 60; + pfrom->AddAddressKnown(addr); + bool fReachable = IsReachable(addr); + if (addr.nTime > nSince && !pfrom->fGetAddr && vAddr.size() <= 10 && addr.IsRoutable()) + { + // Relay to a limited number of other nodes + { + LOCK(cs_vNodes); + // Use deterministic randomness to send to the same nodes for 24 hours + // at a time so the setAddrKnowns of the chosen nodes prevent repeats + static uint256 hashSalt; + if (hashSalt == 0) + hashSalt = GetRandHash(); + uint64_t hashAddr = addr.GetHash(); + uint256 hashRand = hashSalt ^ (hashAddr<<32) ^ ((GetTime()+hashAddr)/(24*60*60)); + hashRand = Hash(BEGIN(hashRand), END(hashRand)); + multimap mapMix; + BOOST_FOREACH(CNode* pnode, vNodes) + { + if (pnode->nVersion < CADDR_TIME_VERSION) + continue; + unsigned int nPointer; + memcpy(&nPointer, &pnode, sizeof(nPointer)); + uint256 hashKey = hashRand ^ nPointer; + hashKey = Hash(BEGIN(hashKey), END(hashKey)); + mapMix.insert(make_pair(hashKey, pnode)); + } + int nRelayNodes = fReachable ? 2 : 1; // limited relaying of addresses outside our network(s) + for (multimap::iterator mi = mapMix.begin(); mi != mapMix.end() && nRelayNodes-- > 0; ++mi) + ((*mi).second)->PushAddress(addr); + } + } + // Do not store addresses outside our network + if (fReachable) + vAddrOk.push_back(addr); + } + addrman.Add(vAddrOk, pfrom->addr, 2 * 60 * 60); + if (vAddr.size() < 1000) + pfrom->fGetAddr = false; + if (pfrom->fOneShot) + pfrom->fDisconnect = true; + } + + + else if (strCommand == "inv") + { + vector vInv; + vRecv >> vInv; + if (vInv.size() > MAX_INV_SZ) + { + Misbehaving(pfrom->GetId(), 20); + return error("message inv size() = %u", vInv.size()); + } + + LOCK(cs_main); + + for (unsigned int nInv = 0; nInv < vInv.size(); nInv++) + { + const CInv &inv = vInv[nInv]; + + boost::this_thread::interruption_point(); + pfrom->AddInventoryKnown(inv); + + bool fAlreadyHave = AlreadyHave(inv); + LogPrint("net", " got inventory: %s %s\n", inv.ToString(), fAlreadyHave ? "have" : "new"); + + if (!fAlreadyHave) { + 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, chainActive.Tip(), GetOrphanRoot(inv.hash)); + } + + // Track requests for our stuff + g_signals.Inventory(inv.hash); + + if (pfrom->nSendSize > (SendBufferSize() * 2)) { + Misbehaving(pfrom->GetId(), 50); + return error("send buffer size() = %u", pfrom->nSendSize); + } + } + } + + + else if (strCommand == "getdata") + { + vector vInv; + vRecv >> vInv; + if (vInv.size() > MAX_INV_SZ) + { + Misbehaving(pfrom->GetId(), 20); + return error("message getdata size() = %u", vInv.size()); + } + + if (fDebug || (vInv.size() != 1)) + LogPrint("net", "received getdata (%u invsz)\n", vInv.size()); + + 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); + } + + + else if (strCommand == "getblocks") + { + CBlockLocator locator; + uint256 hashStop; + vRecv >> locator >> hashStop; + + LOCK(cs_main); + + // Find the last block the caller has in the main chain + CBlockIndex* pindex = chainActive.FindFork(locator); + + // Send the rest of the chain + if (pindex) + pindex = chainActive.Next(pindex); + int nLimit = 500; + 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) + { + LogPrint("net", " getblocks stopping at %d %s\n", pindex->nHeight, pindex->GetBlockHash().ToString()); + break; + } + pfrom->PushInventory(CInv(MSG_BLOCK, pindex->GetBlockHash())); + if (--nLimit <= 0) + { + // When this block is requested, we'll send an inv that'll make them + // getblocks the next batch of inventory. + LogPrint("net", " getblocks stopping at limit %d %s\n", pindex->nHeight, pindex->GetBlockHash().ToString()); + pfrom->hashContinue = pindex->GetBlockHash(); + break; + } + } + } + + + else if (strCommand == "getheaders") + { + CBlockLocator locator; + uint256 hashStop; + vRecv >> locator >> hashStop; + + LOCK(cs_main); + + CBlockIndex* pindex = NULL; + if (locator.IsNull()) + { + // If locator is null, return the hashStop block + map::iterator mi = mapBlockIndex.find(hashStop); + if (mi == mapBlockIndex.end()) + return true; + pindex = (*mi).second; + } + else + { + // Find the last block the caller has in the main chain + pindex = chainActive.FindFork(locator); + if (pindex) + 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; + 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) + break; + } + pfrom->PushMessage("headers", vHeaders); + } + + + else if (strCommand == "tx") + { + vector vWorkQueue; + vector vEraseQueue; + CTransaction tx; + vRecv >> tx; + + CInv inv(MSG_TX, tx.GetHash()); + pfrom->AddInventoryKnown(inv); + + LOCK(cs_main); + + bool fMissingInputs = false; + CValidationState state; + if (AcceptToMemoryPool(mempool, state, tx, true, &fMissingInputs)) + { + 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 + set setMisbehaving; + for (unsigned int i = 0; i < vWorkQueue.size(); i++) + { + map >::iterator itByPrev = mapOrphanTransactionsByPrev.find(vWorkQueue[i]); + if (itByPrev == mapOrphanTransactionsByPrev.end()) + continue; + for (set::iterator mi = itByPrev->second.begin(); + mi != itByPrev->second.end(); + ++mi) + { + const uint256& orphanHash = *mi; + const CTransaction& orphanTx = mapOrphanTransactions[orphanHash].tx; + NodeId fromPeer = mapOrphanTransactions[orphanHash].fromPeer; + 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) + CValidationState stateDummy; + vEraseQueue.push_back(orphanHash); + + if (setMisbehaving.count(fromPeer)) + continue; + + if (AcceptToMemoryPool(mempool, stateDummy, orphanTx, true, &fMissingInputs2)) + { + LogPrint("mempool", " accepted orphan tx %s\n", orphanHash.ToString()); + RelayTransaction(orphanTx, orphanHash); + mapAlreadyAskedFor.erase(CInv(MSG_TX, orphanHash)); + vWorkQueue.push_back(orphanHash); + } + else if (!fMissingInputs2) + { + int nDos = 0; + if (stateDummy.IsInvalid(nDos) && nDos > 0) + { + // Punish peer that gave us an invalid orphan tx + Misbehaving(fromPeer, nDos); + setMisbehaving.insert(fromPeer); + LogPrint("mempool", " invalid orphan tx %s\n", orphanHash.ToString()); + } + // too-little-fee orphan + LogPrint("mempool", " removed orphan tx %s\n", orphanHash.ToString()); + } + mempool.check(pcoinsTip); + } + } + + BOOST_FOREACH(uint256 hash, vEraseQueue) + EraseOrphanTx(hash); + } + else if (fMissingInputs) + { + AddOrphanTx(tx, pfrom->GetId()); + + // DoS prevention: do not allow mapOrphanTransactions to grow unbounded + unsigned int nMaxOrphanTx = (unsigned int)std::max((int64_t)0, GetArg("-maxorphantx", DEFAULT_MAX_ORPHAN_TRANSACTIONS)); + unsigned int nEvicted = LimitOrphanTxSize(nMaxOrphanTx); + if (nEvicted > 0) + LogPrint("mempool", "mapOrphan overflow, removed %u tx\n", nEvicted); + } + int nDoS = 0; + if (state.IsInvalid(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); + } + } + + + else if (strCommand == "block" && !fImporting && !fReindex) // Ignore blocks received while importing + { + CBlock block; + vRecv >> block; + + 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; + ProcessBlock(state, pfrom, &block); + } + + + else if (strCommand == "getaddr") + { + pfrom->vAddrToSend.clear(); + vector vAddr = addrman.GetAddr(); + BOOST_FOREACH(const CAddress &addr, vAddr) + pfrom->PushAddress(addr); + } + + + else if (strCommand == "mempool") + { + LOCK2(cs_main, pfrom->cs_filter); + + std::vector vtxid; + mempool.queryHashes(vtxid); + vector vInv; + BOOST_FOREACH(uint256& hash, vtxid) { + CInv inv(MSG_TX, 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) { + pfrom->PushMessage("inv", vInv); + vInv.clear(); + } + } + if (vInv.size() > 0) + pfrom->PushMessage("inv", vInv); + } + + + else if (strCommand == "ping") + { + // BIP0031 + uint64_t nonce = 0; + vRecv >> nonce; + // Echo the message back with the nonce. This allows for two useful features: + // + // 1) A remote node can quickly check if the connection is operational + // 2) Remote nodes can measure the latency of the network thread. If this node + // is overloaded it won't respond to pings quickly and the remote node can + // avoid sending us more work, like chain download requests. + // + // The nonce stops the remote getting confused between different pings: without + // it, if the remote node sends a ping once per second and this node takes 5 + // seconds to respond to each, the 5th ping the remote sends would appear to + // return very quickly. + pfrom->PushMessage("pong", nonce); + } + + + 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; + vRecv >> alert; + + uint256 alertHash = alert.GetHash(); + if (pfrom->setKnown.count(alertHash) == 0) + { + if (alert.ProcessAlert()) + { + // Relay + pfrom->setKnown.insert(alertHash); + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + alert.RelayTo(pnode); + } + } + else { + // Small DoS penalty so peers that send us lots of + // duplicate/expired/invalid-signature/whatever alerts + // eventually get banned. + // This isn't a Misbehaving(100) (immediate ban) because the + // peer might be an older or different implementation with + // a different signature key, etc. + Misbehaving(pfrom->GetId(), 10); + } + } + } + + + else if (strCommand == "filterload") + { + CBloomFilter filter; + vRecv >> filter; + + if (!filter.IsWithinSizeConstraints()) + // There is no excuse for sending a too-large filter + Misbehaving(pfrom->GetId(), 100); + else + { + LOCK(pfrom->cs_filter); + delete pfrom->pfilter; + pfrom->pfilter = new CBloomFilter(filter); + pfrom->pfilter->UpdateEmptyFull(); + } + pfrom->fRelayTxes = true; + } + + + else if (strCommand == "filteradd") + { + vector vData; + vRecv >> vData; + + // Nodes must NEVER send a data item > 520 bytes (the max size for a script data object, + // and thus, the maximum size any matched object can have) in a filteradd message + if (vData.size() > MAX_SCRIPT_ELEMENT_SIZE) + { + Misbehaving(pfrom->GetId(), 100); + } else { + LOCK(pfrom->cs_filter); + if (pfrom->pfilter) + pfrom->pfilter->insert(vData); + else + Misbehaving(pfrom->GetId(), 100); + } + } + + + else if (strCommand == "filterclear") + { + LOCK(pfrom->cs_filter); + delete pfrom->pfilter; + pfrom->pfilter = new CBloomFilter(); + pfrom->fRelayTxes = true; + } + + + else if (strCommand == "reject") + { + if (fDebug) + { + string strMsg; unsigned char ccode; string strReason; + vRecv >> LIMITED_STRING(strMsg, CMessageHeader::COMMAND_SIZE) >> ccode >> LIMITED_STRING(strReason, 111); + + ostringstream ss; + ss << strMsg << " code " << itostr(ccode) << ": " << strReason; + + if (strMsg == "block" || strMsg == "tx") + { + uint256 hash; + vRecv >> hash; + ss << ": hash " << hash.ToString(); + } + LogPrint("net", "Reject %s\n", SanitizeString(ss.str())); + } + } + + else + { + // Ignore unknown commands for extensibility + } + + + // Update the last seen time for this node's address + if (pfrom->fNetworkNode) + if (strCommand == "version" || strCommand == "addr" || strCommand == "inv" || strCommand == "getdata" || strCommand == "ping") + AddressCurrentlyConnected(pfrom->addr); + + + return true; +} + +// requires LOCK(cs_vRecvMsg) +bool ProcessMessages(CNode* pfrom) +{ + //if (fDebug) + // LogPrintf("ProcessMessages(%u messages)\n", pfrom->vRecvMsg.size()); + + // + // Message format + // (4) message start + // (12) command + // (4) size + // (4) checksum + // (x) data + // + bool fOk = true; + + 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 + if (pfrom->nSendSize >= SendBufferSize()) + break; + + // get next message + CNetMessage& msg = *it; + + //if (fDebug) + // LogPrintf("ProcessMessages(message %u msgsz, %u bytes, complete:%s)\n", + // msg.hdr.nMessageSize, msg.vRecv.size(), + // msg.complete() ? "Y" : "N"); + + // end, if an incomplete message is found + if (!msg.complete()) + break; + + // at this point, any failure means we can delete the current message + it++; + + // Scan for message start + if (memcmp(msg.hdr.pchMessageStart, Params().MessageStart(), MESSAGE_START_SIZE) != 0) { + LogPrintf("\n\nPROCESSMESSAGE: INVALID MESSAGESTART\n\n"); + fOk = false; + break; + } + + // Read header + CMessageHeader& hdr = msg.hdr; + if (!hdr.IsValid()) + { + LogPrintf("\n\nPROCESSMESSAGE: ERRORS IN HEADER %s\n\n\n", hdr.GetCommand()); + continue; + } + string strCommand = hdr.GetCommand(); + + // Message size + unsigned int nMessageSize = hdr.nMessageSize; + + // Checksum + CDataStream& vRecv = msg.vRecv; + uint256 hash = Hash(vRecv.begin(), vRecv.begin() + nMessageSize); + unsigned int nChecksum = 0; + memcpy(&nChecksum, &hash, sizeof(nChecksum)); + if (nChecksum != hdr.nChecksum) + { + LogPrintf("ProcessMessages(%s, %u bytes) : CHECKSUM ERROR nChecksum=%08x hdr.nChecksum=%08x\n", + strCommand, nMessageSize, nChecksum, hdr.nChecksum); + continue; + } + + // Process message + bool fRet = false; + try + { + 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 + 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 + LogPrintf("ProcessMessages(%s, %u bytes) : Exception '%s' caught\n", strCommand, nMessageSize, e.what()); + } + else + { + PrintExceptionContinue(&e, "ProcessMessages()"); + } + } + catch (boost::thread_interrupted) { + throw; + } + catch (std::exception& e) { + PrintExceptionContinue(&e, "ProcessMessages()"); + } catch (...) { + PrintExceptionContinue(NULL, "ProcessMessages()"); + } + + if (!fRet) + LogPrintf("ProcessMessage(%s, %u bytes) FAILED\n", strCommand, nMessageSize); + + break; + } + + // In case the connection got shut down, its receive buffer was wiped + if (!pfrom->fDisconnect) + pfrom->vRecvMsg.erase(pfrom->vRecvMsg.begin(), it); + + return fOk; +} + + +bool SendMessages(CNode* pto, bool fSendTrickle) +{ + { + // Don't send anything until we get their version message + if (pto->nVersion == 0) + return true; + + // + // 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()) { + // 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; + // Take timestamp as close as possible before transmitting ping + pto->nPingUsecStart = GetTimeMicros(); + pto->PushMessage("ping", nonce); + } + + TRY_LOCK(cs_main, lockMain); // Acquire cs_main for IsInitialBlockDownload() and CNodeState() + if (!lockMain) + return true; + + // Address refresh broadcast + static int64_t nLastRebroadcast; + if (!IsInitialBlockDownload() && (GetTime() - nLastRebroadcast > 24 * 60 * 60)) + { + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + // Periodically clear setAddrKnown to allow refresh broadcasts + if (nLastRebroadcast) + pnode->setAddrKnown.clear(); + + // Rebroadcast our address + if (!fNoListen) + { + CAddress addr = GetLocalAddress(&pnode->addr); + if (addr.IsRoutable()) + pnode->PushAddress(addr); + } + } + } + nLastRebroadcast = GetTime(); + } + + // + // Message: addr + // + if (fSendTrickle) + { + vector vAddr; + vAddr.reserve(pto->vAddrToSend.size()); + BOOST_FOREACH(const CAddress& addr, pto->vAddrToSend) + { + // returns true if wasn't already contained in the set + if (pto->setAddrKnown.insert(addr).second) + { + vAddr.push_back(addr); + // receiver rejects addr messages larger than 1000 + if (vAddr.size() >= 1000) + { + pto->PushMessage("addr", vAddr); + vAddr.clear(); + } + } + } + pto->vAddrToSend.clear(); + if (!vAddr.empty()) + 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 + // + vector vInv; + vector vInvWait; + { + LOCK(pto->cs_inventory); + vInv.reserve(pto->vInventoryToSend.size()); + vInvWait.reserve(pto->vInventoryToSend.size()); + BOOST_FOREACH(const CInv& inv, pto->vInventoryToSend) + { + if (pto->setInventoryKnown.count(inv)) + continue; + + // trickle out tx inv to protect privacy + if (inv.type == MSG_TX && !fSendTrickle) + { + // 1/4 of tx invs blast to all immediately + static uint256 hashSalt; + if (hashSalt == 0) + hashSalt = GetRandHash(); + uint256 hashRand = inv.hash ^ hashSalt; + hashRand = Hash(BEGIN(hashRand), END(hashRand)); + bool fTrickleWait = ((hashRand & 3) != 0); + + if (fTrickleWait) + { + vInvWait.push_back(inv); + continue; + } + } + + // returns true if wasn't already contained in the set + if (pto->setInventoryKnown.insert(inv).second) + { + vInv.push_back(inv); + if (vInv.size() >= 1000) + { + pto->PushMessage("inv", vInv); + vInv.clear(); + } + } + } + pto->vInventoryToSend = vInvWait; + } + if (!vInv.empty()) + 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 (blocks) + // + vector vGetData; + 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 (fDebug) + LogPrint("net", "sending getdata: %s\n", inv.ToString()); + vGetData.push_back(inv); + if (vGetData.size() >= 1000) + { + pto->PushMessage("getdata", vGetData); + vGetData.clear(); + } + } + pto->mapAskFor.erase(pto->mapAskFor.begin()); + } + if (!vGetData.empty()) + pto->PushMessage("getdata", vGetData); + + } + return true; +} + + + + + + +class CMainCleanup +{ +public: + CMainCleanup() {} + ~CMainCleanup() { + // block headers + std::map::iterator it1 = mapBlockIndex.begin(); + for (; it1 != mapBlockIndex.end(); it1++) + delete (*it1).second; + mapBlockIndex.clear(); + + // orphan blocks + std::map::iterator it2 = mapOrphanBlocks.begin(); + for (; it2 != mapOrphanBlocks.end(); it2++) + delete (*it2).second; + mapOrphanBlocks.clear(); + + // orphan transactions + mapOrphanTransactions.clear(); + mapOrphanTransactionsByPrev.clear(); + } +} instance_of_cmaincleanup; diff --git a/src/main.h b/src/main.h index d151355..daefebc 100644 --- a/src/main.h +++ b/src/main.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -40,7 +40,7 @@ static const unsigned int MAX_BLOCK_SIZE = 1000000; 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; +static const unsigned int DEFAULT_BLOCK_PRIORITY_SIZE = 250000; /** The maximum size for transactions we're willing to relay/mine */ static const unsigned int MAX_STANDARD_TX_SIZE = 100000; /** The maximum allowed number of signature check operations in a block (network rule) */ @@ -56,7 +56,7 @@ 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 /** Coinbase transaction outputs can only be spent after this number of new blocks (network rule) */ -static const int COINBASE_MATURITY = 720; +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 */ diff --git a/src/main.h~ b/src/main.h~ new file mode 100644 index 0000000..c7cd9d4 --- /dev/null +++ b/src/main.h~ @@ -0,0 +1,1123 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_MAIN_H +#define BITMARK_MAIN_H + +#if defined(HAVE_CONFIG_H) +#include "bitmark-config.h" +#endif + +#include "bignum.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 + +class CBlockIndex; +class CBloomFilter; +class CInv; + +/** The maximum allowed size for a serialized block, in bytes (network rule) */ +static const unsigned int MAX_BLOCK_SIZE = 1000000; +/** 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 = 250000; +/** The maximum size for transactions we're willing to relay/mine */ +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; +/** Default for -maxorphantx, maximum number of orphan transactions kept in memory */ +static const unsigned int DEFAULT_MAX_ORPHAN_TRANSACTIONS = 100; +/** Default for -maxorphanblocks, maximum number of orphan blocks kept in memory */ +static const unsigned int DEFAULT_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 +/** 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; +/** -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 CCriticalSection cs_main; +extern CTxMemPool mempool; +extern std::map mapBlockIndex; +extern uint64_t nLastBlockTx; +extern uint64_t nLastBlockSize; +extern const std::string strMessageMagic; +extern int64_t nTimeBestReceived; +extern bool fImporting; +extern bool fReindex; +extern bool fBenchmark; +extern int nScriptCheckThreads; +extern bool fTxIndex; +extern unsigned int nCoinCacheSize; + +// Minimum disk space required - used in CheckDiskSpace() +static const uint64_t nMinDiskSpace = 52428800; + + +class CCoinsDB; +class CBlockTreeDB; +struct CDiskBlockPos; +class CTxUndo; +class CScriptCheck; +class CValidationState; +class CWalletInterface; +struct CNodeStateStats; + +struct CBlockTemplate; + +/** Register a wallet to receive updates from core */ +void RegisterWallet(CWalletInterface* pwalletIn); +/** Unregister a wallet from core */ +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); + +/** Register with a network node to receive its signals */ +void RegisterNodeSignals(CNodeSignals& nodeSignals); +/** Unregister a network node */ +void UnregisterNodeSignals(CNodeSignals& nodeSignals); + +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_t nAdditionalBytes = 0); +/** Open a block file (blk?????.dat) */ +FILE* OpenBlockFile(const CDiskBlockPos &pos, bool fReadOnly = false); +/** Open an undo file (rev?????.dat) */ +FILE* OpenUndoFile(const CDiskBlockPos &pos, bool fReadOnly = false); +/** Import blocks from an external file */ +bool LoadExternalBlockFile(FILE* fileIn, CDiskBlockPos *dbp = NULL); +/** Initialize a new block tree database + block data on disk */ +bool InitBlockIndex(); +/** Load the block tree and coins database from disk */ +bool LoadBlockIndex(); +/** Unload database information */ +void UnloadBlockIndex(); +/** Verify consistency of the block and coin databases */ +bool VerifyDB(int nCheckLevel, int nCheckDepth); +/** Print the loaded block tree */ +void PrintBlockTree(); +/** 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(); +/** Check whether a block hash satisfies the proof-of-work requirement specified by nBits */ +bool CheckProofOfWork(uint256 hash, unsigned int nBits); +/** Calculate the minimum amount of work a received block needs, without knowing its direct parent */ +unsigned int ComputeMinWork(unsigned int nBase, int64_t nTime); +/** Check whether we are doing an initial block download (synchronizing from disk or network) */ +bool IsInitialBlockDownload(); +/** Format a string that describes several potential problems detected by the core */ +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); +/** Find the best known block, and make it the tip of the block chain */ +bool ActivateBestChain(CValidationState &state); +int64_t GetBlockValue(int nHeight, int64_t nFees); +unsigned int GetNextWorkRequired(const CBlockIndex* pindexLast, const CBlockHeader *pblock); + +void UpdateTime(CBlockHeader& block, const CBlockIndex* pindexPrev); + +/** Create a new block index entry for a given block hash */ +CBlockIndex * InsertBlockIndex(uint256 hash); +/** Verify a signature */ +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); + + + + + + + + +struct CNodeStateStats { + int nMisbehavior; +}; + +struct CDiskBlockPos +{ + int nFile; + unsigned int nPos; + + IMPLEMENT_SERIALIZE( + READWRITE(VARINT(nFile)); + READWRITE(VARINT(nPos)); + ) + + CDiskBlockPos() { + SetNull(); + } + + CDiskBlockPos(int nFileIn, unsigned int nPosIn) { + nFile = nFileIn; + nPos = nPosIn; + } + + friend bool operator==(const CDiskBlockPos &a, const CDiskBlockPos &b) { + return (a.nFile == b.nFile && a.nPos == b.nPos); + } + + friend bool operator!=(const CDiskBlockPos &a, const CDiskBlockPos &b) { + return !(a == b); + } + + void SetNull() { nFile = -1; nPos = 0; } + bool IsNull() const { return (nFile == -1); } +}; + +struct CDiskTxPos : public CDiskBlockPos +{ + unsigned int nTxOffset; // after header + + IMPLEMENT_SERIALIZE( + READWRITE(*(CDiskBlockPos*)this); + READWRITE(VARINT(nTxOffset)); + ) + + CDiskTxPos(const CDiskBlockPos &blockIn, unsigned int nTxOffsetIn) : CDiskBlockPos(blockIn.nFile, blockIn.nPos), nTxOffset(nTxOffsetIn) { + } + + CDiskTxPos() { + SetNull(); + } + + void SetNull() { + CDiskBlockPos::SetNull(); + nTxOffset = 0; + } +}; + + + +enum GetMinFee_mode +{ + GMF_RELAY, + GMF_SEND, +}; + +int64_t GetMinFee(const CTransaction& tx, unsigned int nBytes, bool fAllowFree, enum GetMinFee_mode mode); + +// +// Check transaction inputs, and make sure any +// pay-to-script-hash transactions are evaluating IsStandard scripts +// +// Why bother? To avoid denial-of-service attacks; an attacker +// can submit a standard HASH... OP_EQUAL transaction, +// which will get accepted into blocks. The redemption +// script can be anything; an attacker could use a very +// expensive-to-check-upon-redemption script like: +// 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 +*/ +bool AreInputsStandard(const CTransaction& tx, CCoinsViewCache& mapInputs); + +/** Count ECDSA signature operations the old-fashioned (pre-0.6) way + @return number of sigops this transaction's outputs will produce when spent + @see CTransaction::FetchInputs +*/ +unsigned int GetLegacySigOpCount(const CTransaction& tx); + +/** Count ECDSA signature operations in pay-to-script-hash inputs. + + @param[in] mapInputs Map of previous transactions that have outputs we're spending + @return maximum number of sigops required to validate this transaction's inputs + @see CTransaction::FetchInputs + */ +unsigned int GetP2SHSigOpCount(const CTransaction& tx, CCoinsViewCache& mapInputs); + + +inline bool AllowFree(double dPriority) +{ + // Large (in bytes) low-priority (new, small-coin) transactions + // need a fee. + return dPriority > COIN * 720 / 250; +} + +// Check whether all inputs of this transaction are valid (no double spends, scripts & sigs, amounts) +// This does not modify the UTXO set. If pvChecks is not NULL, script checks are pushed onto it +// instead of being performed inline. +bool CheckInputs(const CTransaction& tx, CValidationState &state, CCoinsViewCache &view, bool fScriptChecks = true, + unsigned int flags = SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC, + std::vector *pvChecks = NULL); + +// Apply the effects of this transaction on the UTXO set represented by view +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); + +/** Check for standard transaction types + @return True if all outputs (scriptPubKeys) use only standard transaction forms +*/ +bool IsStandardTx(const CTransaction& tx, std::string& reason); + +bool IsFinalTx(const CTransaction &tx, int nBlockHeight = 0, int64_t nBlockTime = 0); + +/** Undo information for a CBlock */ +class CBlockUndo +{ +public: + std::vector vtxundo; // for all but the coinbase + + IMPLEMENT_SERIALIZE( + READWRITE(vtxundo); + ) + + bool WriteToDisk(CDiskBlockPos &pos, const uint256 &hashBlock) + { + // Open history file to append + CAutoFile fileout = CAutoFile(OpenUndoFile(pos), SER_DISK, CLIENT_VERSION); + if (!fileout) + return error("CBlockUndo::WriteToDisk : OpenUndoFile failed"); + + // Write index header + unsigned int nSize = fileout.GetSerializeSize(*this); + fileout << FLATDATA(Params().MessageStart()) << nSize; + + // Write undo data + long fileOutPos = ftell(fileout); + if (fileOutPos < 0) + return error("CBlockUndo::WriteToDisk : ftell failed"); + pos.nPos = (unsigned int)fileOutPos; + fileout << *this; + + // calculate & write checksum + CHashWriter hasher(SER_GETHASH, PROTOCOL_VERSION); + hasher << hashBlock; + hasher << *this; + fileout << hasher.GetHash(); + + // Flush stdio buffers and commit to disk before returning + fflush(fileout); + if (!IsInitialBlockDownload()) + FileCommit(fileout); + + return true; + } + + bool ReadFromDisk(const CDiskBlockPos &pos, const uint256 &hashBlock) + { + // Open history file to read + CAutoFile filein = CAutoFile(OpenUndoFile(pos, true), SER_DISK, CLIENT_VERSION); + if (!filein) + return error("CBlockUndo::ReadFromDisk : OpenBlockFile failed"); + + // Read block + uint256 hashChecksum; + try { + filein >> *this; + filein >> hashChecksum; + } + catch (std::exception &e) { + return error("%s : Deserialize or I/O error - %s", __func__, e.what()); + } + + // Verify checksum + CHashWriter hasher(SER_GETHASH, PROTOCOL_VERSION); + hasher << hashBlock; + hasher << *this; + if (hashChecksum != hasher.GetHash()) + return error("CBlockUndo::ReadFromDisk : Checksum mismatch"); + + return true; + } +}; + + +/** Closure representing one script verification + * Note that this stores references to the spending transaction */ +class CScriptCheck +{ +private: + CScript scriptPubKey; + const CTransaction *ptxTo; + unsigned int nIn; + unsigned int nFlags; + int nHashType; + +public: + CScriptCheck() {} + CScriptCheck(const CCoins& txFromIn, const CTransaction& txToIn, unsigned int nInIn, unsigned int nFlagsIn, int nHashTypeIn) : + scriptPubKey(txFromIn.vout[txToIn.vin[nInIn].prevout.n].scriptPubKey), + ptxTo(&txToIn), nIn(nInIn), nFlags(nFlagsIn), nHashType(nHashTypeIn) { } + + bool operator()() const; + + void swap(CScriptCheck &check) { + scriptPubKey.swap(check.scriptPubKey); + std::swap(ptxTo, check.ptxTo); + std::swap(nIn, check.nIn); + std::swap(nFlags, check.nFlags); + std::swap(nHashType, check.nHashType); + } +}; + +/** 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; + int nIndex; + + // memory only + mutable bool fMerkleVerified; + + + CMerkleTx() + { + Init(); + } + + CMerkleTx(const CTransaction& txIn) : CTransaction(txIn) + { + Init(); + } + + void Init() + { + hashBlock = 0; + nIndex = -1; + fMerkleVerified = false; + } + + + IMPLEMENT_SERIALIZE + ( + nSerSize += SerReadWrite(s, *(CTransaction*)this, nType, nVersion, ser_action); + nVersion = this->nVersion; + READWRITE(hashBlock); + READWRITE(vMerkleBranch); + READWRITE(nIndex); + ) + + + 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 { CBlockIndex *pindexRet; return GetDepthInMainChainINTERNAL(pindexRet) > 0; } + int GetBlocksToMaturity() const; + bool AcceptToMemoryPool(bool fLimitFree=true); +}; + + + + + +/** Data structure that represents a partial merkle tree. + * + * It respresents a subset of the txid's of a known block, in a way that + * allows recovery of the list of txid's and the merkle root, in an + * authenticated way. + * + * The encoding works as follows: we traverse the tree in depth-first order, + * storing a bit for each traversed node, signifying whether the node is the + * parent of at least one matched leaf txid (or a matched txid itself). In + * case we are at the leaf level, or this bit is 0, its merkle node hash is + * stored, and its children are not explorer further. Otherwise, no hash is + * stored, but we recurse into both (or the only) child branch. During + * decoding, the same depth-first traversal is performed, consuming bits and + * hashes as they written during encoding. + * + * The serialization is fixed and provides a hard guarantee about the + * encoded size: + * + * SIZE <= 10 + ceil(32.25*N) + * + * Where N represents the number of leaf nodes of the partial tree. N itself + * is bounded by: + * + * N <= total_transactions + * N <= 1 + matched_transactions*tree_height + * + * The serialization format: + * - uint32 total_transactions (4 bytes) + * - varint number of hashes (1-3 bytes) + * - uint256[] hashes in depth-first order (<= 32*N bytes) + * - varint number of bytes of flag bits (1-3 bytes) + * - byte[] flag bits, packed per 8 in a byte, least significant bit first (<= 2*N-1 bits) + * The size constraints follow from this. + */ +class CPartialMerkleTree +{ +protected: + // the total number of transactions in the block + unsigned int nTransactions; + + // node-is-parent-of-matched-txid bits + std::vector vBits; + + // txids and internal hashes + std::vector vHash; + + // flag set when encountering invalid data + bool fBad; + + // helper function to efficiently calculate the number of nodes at given height in the merkle tree + unsigned int CalcTreeWidth(int height) { + return (nTransactions+(1 << height)-1) >> height; + } + + // calculate the hash of a node in the merkle tree (at leaf level: the txid's themself) + uint256 CalcHash(int height, unsigned int pos, const std::vector &vTxid); + + // recursive function that traverses tree nodes, storing the data as bits and hashes + void TraverseAndBuild(int height, unsigned int pos, const std::vector &vTxid, const std::vector &vMatch); + + // recursive function that traverses tree nodes, consuming the bits and hashes produced by TraverseAndBuild. + // it returns the hash of the respective node. + uint256 TraverseAndExtract(int height, unsigned int pos, unsigned int &nBitsUsed, unsigned int &nHashUsed, std::vector &vMatch); + +public: + + // serialization implementation + IMPLEMENT_SERIALIZE( + READWRITE(nTransactions); + READWRITE(vHash); + std::vector vBytes; + if (fRead) { + READWRITE(vBytes); + CPartialMerkleTree &us = *(const_cast(this)); + us.vBits.resize(vBytes.size() * 8); + for (unsigned int p = 0; p < us.vBits.size(); p++) + us.vBits[p] = (vBytes[p / 8] & (1 << (p % 8))) != 0; + us.fBad = false; + } else { + vBytes.resize((vBits.size()+7)/8); + for (unsigned int p = 0; p < vBits.size(); p++) + vBytes[p / 8] |= vBits[p] << (p % 8); + READWRITE(vBytes); + } + ) + + // Construct a partial merkle tree from a list of transaction id's, and a mask that selects a subset of them + CPartialMerkleTree(const std::vector &vTxid, const std::vector &vMatch); + + CPartialMerkleTree(); + + // extract the matching txid's represented by this partial merkle tree. + // returns the merkle root, or 0 in case of failure + uint256 ExtractMatches(std::vector &vMatch); +}; + + + +/** Functions for disk access for blocks */ +bool WriteBlockToDisk(CBlock& block, CDiskBlockPos& pos); +bool ReadBlockFromDisk(CBlock& block, const CDiskBlockPos& pos); +bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex); + + +/** Functions for validating blocks and updating the block tree */ + +/** Undo the effects of this block (with given index) on the UTXO set represented by coins. + * In case pfClean is provided, operation will try to be tolerant about errors, and *pfClean + * will be true if no problems were found. Otherwise, the return value will be false in case + * of problems. Note that in any case, coins may be modified. */ +bool DisconnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex, CCoinsViewCache& coins, bool* pfClean = NULL); + +// Apply the effects of this block (with given index) on the UTXO set represented by coins +bool ConnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex, CCoinsViewCache& coins, bool fJustCheck = false); + +// Add this block to the block index, and if necessary, switch the active block chain to this +bool AddToBlockIndex(CBlock& block, CValidationState& state, const CDiskBlockPos& pos); + +// Context-independent validity checks +bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW = true, bool fCheckMerkleRoot = true); + +// Store block on disk +// if dbp is provided, the file is known to already reside on disk +bool AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp = NULL); + + + +class CBlockFileInfo +{ +public: + unsigned int nBlocks; // number of blocks stored in file + unsigned int nSize; // number of used bytes of block file + 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_t nTimeFirst; // earliest time of block in file + uint64_t nTimeLast; // latest time of block in file + + IMPLEMENT_SERIALIZE( + READWRITE(VARINT(nBlocks)); + READWRITE(VARINT(nSize)); + READWRITE(VARINT(nUndoSize)); + READWRITE(VARINT(nHeightFirst)); + READWRITE(VARINT(nHeightLast)); + READWRITE(VARINT(nTimeFirst)); + READWRITE(VARINT(nTimeLast)); + ) + + void SetNull() { + nBlocks = 0; + nSize = 0; + nUndoSize = 0; + nHeightFirst = 0; + nHeightLast = 0; + nTimeFirst = 0; + nTimeLast = 0; + } + + CBlockFileInfo() { + SetNull(); + } + + std::string ToString() const { + return strprintf("CBlockFileInfo(blocks=%u, size=%u, heights=%u...%u, time=%s...%s)", nBlocks, nSize, nHeightFirst, nHeightLast, DateTimeStrFormat("%Y-%m-%d", nTimeFirst).c_str(), DateTimeStrFormat("%Y-%m-%d", nTimeLast).c_str()); + } + + // update statistics (does not update nSize) + 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 > nHeightLast) + nHeightLast = nHeightIn; + if (nTimeIn > nTimeLast) + nTimeLast = nTimeIn; + } +}; + +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 + BLOCK_VALID_TREE = 2, // parent found, difficulty matches, timestamp >= median previous, checkpoint + BLOCK_VALID_TRANSACTIONS = 3, // only first tx is coinbase, 2 <= coinbase input script length <= 100, transactions valid, no duplicate txids, sigops, size, merkle root + BLOCK_VALID_CHAIN = 4, // outputs do not overspend inputs, no double spends, coinbase output ok, immature coinbase spends, BIP30 + BLOCK_VALID_SCRIPTS = 5, // scripts/signatures ok + BLOCK_VALID_MASK = 7, + + BLOCK_HAVE_DATA = 8, // full block available in blk*.dat + BLOCK_HAVE_UNDO = 16, // undo data available in rev*.dat + BLOCK_HAVE_MASK = 24, + + BLOCK_FAILED_VALID = 32, // stage after last reached validness failed + BLOCK_FAILED_CHILD = 64, // descends from failed block + BLOCK_FAILED_MASK = 96 +}; + +/** The block chain is a tree shaped structure starting with the + * genesis block at the root, with each block potentially having multiple + * candidates to be the next block. A blockindex may have multiple pprev pointing + * to it, but at most one of them can be part of the currently active branch. + */ +class CBlockIndex +{ +public: + // pointer to the hash of the block, if any. memory is owned by this CBlockIndex + const uint256* phashBlock; + + // pointer to the index of the predecessor of this block + CBlockIndex* pprev; + + // height of the entry in the chain. The genesis block has height 0 + int nHeight; + + // Which # file this block is stored in (blk?????.dat) + int nFile; + + // Byte offset within blk?????.dat where this block's data is stored + unsigned int nDataPos; + + // Byte offset within rev?????.dat where this block's undo data is stored + unsigned int nUndoPos; + + // (memory only) Total amount of work (expected number of hashes) in the chain up to and including this block + uint256 nChainWork; + + // Number of transactions in this block. + // Note: in a potential headers-first mode, this number cannot be relied upon + unsigned int nTx; + + // (memory only) Number of transactions in the chain up to and including this block + unsigned int nChainTx; // change to 64-bit type when necessary; won't happen before 2030 + + // Verification status of this block. See enum BlockStatus + unsigned int nStatus; + + // block header + int nVersion; + uint256 hashMerkleRoot; + unsigned int nTime; + unsigned int nBits; + unsigned int nNonce; + + // (memory only) Sequencial id assigned to distinguish order in which blocks are received. + uint32_t nSequenceId; + + CBlockIndex() + { + phashBlock = NULL; + pprev = NULL; + nHeight = 0; + nFile = 0; + nDataPos = 0; + nUndoPos = 0; + nChainWork = 0; + nTx = 0; + nChainTx = 0; + nStatus = 0; + nSequenceId = 0; + + nVersion = 0; + hashMerkleRoot = 0; + nTime = 0; + nBits = 0; + nNonce = 0; + } + + CBlockIndex(CBlockHeader& block) + { + phashBlock = NULL; + pprev = NULL; + nHeight = 0; + nFile = 0; + nDataPos = 0; + nUndoPos = 0; + nChainWork = 0; + nTx = 0; + nChainTx = 0; + nStatus = 0; + nSequenceId = 0; + + nVersion = block.nVersion; + hashMerkleRoot = block.hashMerkleRoot; + nTime = block.nTime; + nBits = block.nBits; + nNonce = block.nNonce; + } + + CDiskBlockPos GetBlockPos() const { + CDiskBlockPos ret; + if (nStatus & BLOCK_HAVE_DATA) { + ret.nFile = nFile; + ret.nPos = nDataPos; + } + return ret; + } + + CDiskBlockPos GetUndoPos() const { + CDiskBlockPos ret; + if (nStatus & BLOCK_HAVE_UNDO) { + ret.nFile = nFile; + ret.nPos = nUndoPos; + } + return ret; + } + + CBlockHeader GetBlockHeader() const + { + CBlockHeader block; + block.nVersion = nVersion; + if (pprev) + block.hashPrevBlock = pprev->GetBlockHash(); + block.hashMerkleRoot = hashMerkleRoot; + block.nTime = nTime; + block.nBits = nBits; + block.nNonce = nNonce; + return block; + } + + uint256 GetBlockHash() const + { + return *phashBlock; + } + + int64_t GetBlockTime() const + { + return (int64_t)nTime; + } + + CBigNum GetBlockWork() const + { + CBigNum bnTarget; + bnTarget.SetCompact(nBits); + if (bnTarget <= 0) + return 0; + return (CBigNum(1)<<256) / (bnTarget+1); + } + + bool CheckIndex() const + { + return true; + } + + enum { nMedianTimeSpan=11 }; + + int64_t GetMedianTimePast() const + { + 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) + *(--pbegin) = pindex->GetBlockTime(); + + std::sort(pbegin, pend); + return pbegin[(pend - pbegin)/2]; + } + + 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, nHeight=%d, merkle=%s, hashBlock=%s)", + pprev, nHeight, + hashMerkleRoot.ToString().c_str(), + GetBlockHash().ToString().c_str()); + } + + void print() const + { + LogPrintf("%s\n", ToString().c_str()); + } +}; + + + +/** Used to marshal pointers into hashes for db storage. */ +class CDiskBlockIndex : public CBlockIndex +{ +public: + uint256 hashPrev; + + CDiskBlockIndex() { + hashPrev = 0; + } + + explicit CDiskBlockIndex(CBlockIndex* pindex) : CBlockIndex(*pindex) { + hashPrev = (pprev ? pprev->GetBlockHash() : 0); + } + + IMPLEMENT_SERIALIZE + ( + if (!(nType & SER_GETHASH)) + READWRITE(VARINT(nVersion)); + + READWRITE(VARINT(nHeight)); + READWRITE(VARINT(nStatus)); + READWRITE(VARINT(nTx)); + if (nStatus & (BLOCK_HAVE_DATA | BLOCK_HAVE_UNDO)) + READWRITE(VARINT(nFile)); + if (nStatus & BLOCK_HAVE_DATA) + READWRITE(VARINT(nDataPos)); + if (nStatus & BLOCK_HAVE_UNDO) + READWRITE(VARINT(nUndoPos)); + + // block header + READWRITE(this->nVersion); + READWRITE(hashPrev); + READWRITE(hashMerkleRoot); + READWRITE(nTime); + READWRITE(nBits); + READWRITE(nNonce); + ) + + uint256 GetBlockHash() const + { + CBlockHeader block; + block.nVersion = nVersion; + block.hashPrevBlock = hashPrev; + block.hashMerkleRoot = hashMerkleRoot; + block.nTime = nTime; + block.nBits = nBits; + block.nNonce = nNonce; + return block.GetHash(); + } + + + std::string ToString() const + { + std::string str = "CDiskBlockIndex("; + str += CBlockIndex::ToString(); + str += strprintf("\n hashBlock=%s, hashPrev=%s)", + GetBlockHash().ToString().c_str(), + hashPrev.ToString().c_str()); + return str; + } + + void print() const + { + LogPrintf("%s\n", ToString().c_str()); + } +}; + +/** Capture information about block/transaction validation */ +class CValidationState { +private: + enum mode_state { + MODE_VALID, // everything ok + MODE_INVALID, // network rule violation (DoS value may be set) + MODE_ERROR, // run-time error + } mode; + int nDoS; + std::string strRejectReason; + unsigned char chRejectCode; + bool corruptionPossible; +public: + 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, + unsigned char _chRejectCode=0, std::string _strRejectReason="") { + return DoS(0, ret, _chRejectCode, _strRejectReason); + } + 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(msg); + } + bool IsValid() const { + return mode == MODE_VALID; + } + bool IsInvalid() const { + return mode == MODE_INVALID; + } + bool IsError() const { + return mode == MODE_ERROR; + } + 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; } +}; + +/** An in-memory indexed chain of blocks. */ +class CChain { +private: + std::vector vChain; + +public: + /** 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; + +/** Global variable that points to the active block tree (protected by cs_main) */ +extern CBlockTreeDB *pblocktree; + +struct CBlockTemplate +{ + CBlock block; + std::vector vTxFees; + std::vector vTxSigOps; +}; + + + + + + +/** Used to relay blocks as header + vector + * to filtered nodes. + */ +class CMerkleBlock +{ +public: + // Public only for unit testing + CBlockHeader header; + CPartialMerkleTree txn; + +public: + // Public only for unit testing and relay testing + // (not relayed) + std::vector > vMatchedTxn; + + // Create from a CBlock, filtering transactions according to filter + // Note that this will call IsRelevantAndUpdate on the filter for each transaction, + // thus the filter will likely be modified. + CMerkleBlock(const CBlock& block, CBloomFilter& filter); + + IMPLEMENT_SERIALIZE + ( + READWRITE(header); + READWRITE(txn); + ) +}; + + +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/miner.cpp b/src/miner.cpp index fb3d42f..31d005f 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -14,7 +14,7 @@ #endif ////////////////////////////////////////////////////////////////////////////// // -// BitmarkMiner +// PfennigMiner // int static FormatHashBlocks(void* pbuffer, unsigned int len) @@ -435,7 +435,7 @@ bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey) return false; //// debug print - LogPrintf("BitmarkMiner:\n"); + LogPrintf("PfennigMiner:\n"); LogPrintf("proof-of-work found \n hash: %s \ntarget: %s\n", hash.GetHex(), hashTarget.GetHex()); pblock->print(); LogPrintf("generated %s\n", FormatMoney(pblock->vtx[0].vout[0].nValue)); @@ -444,7 +444,7 @@ bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey) { LOCK(cs_main); if (pblock->hashPrevBlock != chainActive.Tip()->GetBlockHash()) - return error("BitmarkMiner : generated block is stale"); + return error("PfennigMiner : generated block is stale"); // Remove key from key pool reservekey.KeepKey(); @@ -458,7 +458,7 @@ 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("BitmarkMiner : ProcessBlock, block not accepted"); + return error("PfennigMiner : ProcessBlock, block not accepted"); } return true; @@ -466,7 +466,7 @@ bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey) void static BitmarkMiner(CWallet *pwallet) { - LogPrintf("BitmarkMiner started\n"); + LogPrintf("PfennigMiner started\n"); SetThreadPriority(THREAD_PRIORITY_LOWEST); RenameThread("bitmark-miner"); @@ -494,7 +494,7 @@ void static BitmarkMiner(CWallet *pwallet) CBlock *pblock = &pblocktemplate->block; IncrementExtraNonce(pblock, pindexPrev, nExtraNonce); - LogPrintf("Running BitmarkMiner with %u transactions in block (%u bytes)\n", pblock->vtx.size(), + LogPrintf("Running PfennigMiner with %u transactions in block (%u bytes)\n", pblock->vtx.size(), ::GetSerializeSize(*pblock, SER_NETWORK, PROTOCOL_VERSION)); // @@ -594,7 +594,7 @@ void static BitmarkMiner(CWallet *pwallet) } } catch (boost::thread_interrupted) { - LogPrintf("BitmarkMiner terminated\n"); + LogPrintf("PfennigMiner terminated\n"); throw; } } diff --git a/src/miner.cpp~ b/src/miner.cpp~ new file mode 100644 index 0000000..a68f38c --- /dev/null +++ b/src/miner.cpp~ @@ -0,0 +1,629 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "miner.h" + +#include "core.h" +#include "main.h" +#include "net.h" +#ifdef ENABLE_WALLET +#include "wallet.h" +#endif +////////////////////////////////////////////////////////////////////////////// +// +// PfennigMiner +// + +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]; +} + +// Some explaining would be appreciated +class COrphan +{ +public: + const CTransaction* ptx; + set setDependsOn; + double dPriority; + double dFeePerKb; + + COrphan(const CTransaction* ptxIn) + { + ptx = ptxIn; + dPriority = dFeePerKb = 0; + } + + void print() const + { + LogPrintf("COrphan(hash=%s, dPriority=%.1f, dFeePerKb=%.1f)\n", + ptx->GetHash().ToString(), dPriority, dFeePerKb); + BOOST_FOREACH(uint256 hash, setDependsOn) + LogPrintf(" setDependsOn %s\n", hash.ToString()); + } +}; + + +uint64_t nLastBlockTx = 0; +uint64_t 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(const CScript& scriptPubKeyIn) +{ + // Create new block + auto_ptr pblocktemplate(new CBlockTemplate()); + if(!pblocktemplate.get()) + return NULL; + CBlock *pblock = &pblocktemplate->block; // pointer for convenience + + // Create coinbase tx + CTransaction txNew; + txNew.vin.resize(1); + txNew.vin[0].prevout.SetNull(); + txNew.vout.resize(1); + txNew.vout[0].scriptPubKey = scriptPubKeyIn; + + // 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", 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)); + + // 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", DEFAULT_BLOCK_MIN_SIZE); + nBlockMinSize = std::min(nBlockMaxSize, nBlockMinSize); + + // Collect memory pool transactions into the block + int64_t nFees = 0; + { + LOCK2(cs_main, mempool.cs); + CBlockIndex* pindexPrev = chainActive.Tip(); + 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) + { + const CTransaction& tx = mi->second.GetTx(); + if (tx.IsCoinBase() || !IsFinalTx(tx, pindexPrev->nHeight + 1)) + continue; + + COrphan* porphan = NULL; + double dPriority = 0; + int64_t 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)) + { + LogPrintf("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].GetTx().vout[txin.prevout.n].nValue; + continue; + } + const CCoins &coins = view.GetCoins(txin.prevout.hash); + + int64_t 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) / modified_txsize + unsigned int nTxSize = ::GetSerializeSize(tx, SER_NETWORK, PROTOCOL_VERSION); + 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-tx.GetValueOut()) / (double(nTxSize)/1000.0); + + if (porphan) + { + porphan->dPriority = dPriority; + porphan->dFeePerKb = dFeePerKb; + } + else + vecPriority.push_back(TxPriority(dPriority, dFeePerKb, &mi->second.GetTx())); + } + + // Collect transactions into block + uint64_t nBlockSize = 1000; + uint64_t 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>(); + const 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::nMinRelayTxFee) && (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_t nTxFees = view.GetValueIn(tx)-tx.GetValueOut(); + + 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) + { + LogPrintf("priority %.1f feeperkb %.1f txid %s\n", + dPriority, dFeePerKb, tx.GetHash().ToString()); + } + + // 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; + LogPrintf("CreateNewBlock(): total size %u\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); + 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 << CScriptNum(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); +} + +#ifdef ENABLE_WALLET +////////////////////////////////////////////////////////////////////////////// +// +// Internal miner +// +double dHashesPerSec = 0.0; +int64_t nHPSTimerStart = 0; + +CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey) +{ + CPubKey pubkey; + if (!reservekey.GetReservedKey(pubkey)) + return NULL; + + CScript scriptPubKey = CScript() << pubkey << OP_CHECKSIG; + return CreateNewBlock(scriptPubKey); +} + +bool CheckWork(CBlock* pblock, CWallet& wallet, CReserveKey& reservekey) +{ + uint256 hash = pblock->GetPoWHash(); + uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); + + if (hash > hashTarget) + return false; + + //// debug print + LogPrintf("PfennigMiner:\n"); + LogPrintf("proof-of-work found \n hash: %s \ntarget: %s\n", hash.GetHex(), hashTarget.GetHex()); + pblock->print(); + LogPrintf("generated %s\n", FormatMoney(pblock->vtx[0].vout[0].nValue)); + + // Found a solution + { + LOCK(cs_main); + if (pblock->hashPrevBlock != chainActive.Tip()->GetBlockHash()) + return error("PfennigMiner : 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("PfennigMiner : ProcessBlock, block not accepted"); + } + + return true; +} + +void static BitmarkMiner(CWallet *pwallet) +{ + LogPrintf("PfennigMiner started\n"); + SetThreadPriority(THREAD_PRIORITY_LOWEST); + RenameThread("bitmark-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); + } + + // + // Create new block + // + unsigned int nTransactionsUpdatedLast = mempool.GetTransactionsUpdated(); + CBlockIndex* pindexPrev = chainActive.Tip(); + + auto_ptr pblocktemplate(CreateNewBlockWithKey(reservekey)); + if (!pblocktemplate.get()) + return; + CBlock *pblock = &pblocktemplate->block; + IncrementExtraNonce(pblock, pindexPrev, nExtraNonce); + + LogPrintf("Running PfennigMiner with %u 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_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) + { + scrypt_1024_1_1_256_sp(BEGIN(pblock->nVersion), BEGIN(thash), scratchpad); + + if (thash <= hashTarget) + { + 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 (nBlockNonce >= 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(); + } + } + } } + catch (boost::thread_interrupted) + { + LogPrintf("PfennigMiner terminated\n"); + throw; + } +} + +void GenerateBitmarks(bool fGenerate, CWallet* pwallet, int nThreads) +{ + static boost::thread_group* minerThreads = NULL; + + 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(&BitmarkMiner, pwallet)); +} + +#endif + diff --git a/src/miner.h b/src/miner.h index ce77ed1..dbbfd20 100644 --- a/src/miner.h +++ b/src/miner.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/miner.h~ b/src/miner.h~ new file mode 100644 index 0000000..c4d40e8 --- /dev/null +++ b/src/miner.h~ @@ -0,0 +1,36 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_MINER_H +#define BITMARK_MINER_H + +#include + +class CBlock; +class CBlockIndex; +struct CBlockTemplate; +class CReserveKey; +class CScript; +class CWallet; + +/** Run the miner threads */ +void GenerateBitmarks(bool fGenerate, CWallet* pwallet, int nThreads); +/** Generate a new block, without valid proof-of-work */ +CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn); +CBlockTemplate* CreateNewBlockWithKey(CReserveKey& reservekey); +/** 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); +/** Base sha256 mining transform */ +void SHA256Transform(void* pstate, void* pinput, const void* pinit); + +extern double dHashesPerSec; +extern int64_t nHPSTimerStart; + +#endif // BITMARK_MINER_H diff --git a/src/mruset.h b/src/mruset.h index 6f9ae6f..e4e56fb 100644 --- a/src/mruset.h +++ b/src/mruset.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/mruset.h~ b/src/mruset.h~ new file mode 100644 index 0000000..d9281f4 --- /dev/null +++ b/src/mruset.h~ @@ -0,0 +1,68 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_MRUSET_H +#define BITMARK_MRUSET_H + +#include +#include +#include + +/** STL-like set container that only keeps the most recent N elements. */ +template class mruset +{ +public: + typedef T key_type; + typedef T value_type; + typedef typename std::set::iterator iterator; + typedef typename std::set::const_iterator const_iterator; + typedef typename std::set::size_type size_type; + +protected: + std::set set; + std::deque queue; + size_type nMaxSize; + +public: + mruset(size_type nMaxSizeIn = 0) { nMaxSize = nMaxSizeIn; } + iterator begin() const { return set.begin(); } + iterator end() const { return set.end(); } + size_type size() const { return set.size(); } + 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; } + std::pair insert(const key_type& x) + { + std::pair ret = set.insert(x); + if (ret.second) + { + if (nMaxSize && queue.size() == nMaxSize) + { + set.erase(queue.front()); + queue.pop_front(); + } + queue.push_back(x); + } + return ret; + } + size_type max_size() const { return nMaxSize; } + size_type max_size(size_type s) + { + if (s) + while (queue.size() > s) + { + set.erase(queue.front()); + queue.pop_front(); + } + nMaxSize = s; + return nMaxSize; + } +}; + +#endif diff --git a/src/net.cpp b/src/net.cpp index 0b145fa..25287d4 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -601,7 +601,7 @@ void CNode::copyStats(CNodeStats &stats) nPingUsecWait = GetTimeMicros() - nPingUsecStart; } - // Raw ping time is in microseconds, but show it to user as whole seconds (Bitmark users should be well used to small numbers with many decimal places by now :) + // Raw ping time is in microseconds, but show it to user as whole seconds (Pfennig users should be well used to small numbers with many decimal places by now :) stats.dPingTime = (((double)nPingUsecTime) / 1e6); stats.dPingWait = (((double)nPingUsecWait) / 1e6); diff --git a/src/net.cpp~ b/src/net.cpp~ new file mode 100644 index 0000000..5cdfc07 --- /dev/null +++ b/src/net.cpp~ @@ -0,0 +1,2005 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmark-config.h" +#endif + +#include "net.h" + +#include "addrman.h" +#include "chainparams.h" +#include "core.h" +#include "ui_interface.h" + +#ifdef WIN32 +#include +#else +#include +#endif + +#ifdef USE_UPNP +#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; + +static const int MAX_OUTBOUND_CONNECTIONS = 8; + +bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound = NULL, const char *strDest = NULL, bool fOneShot = false); + + +// +// Global state variables +// +bool fDiscover = true; +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_t nLocalHostNonce = 0; +static std::vector vhListenSocket; +CAddrMan addrman; +int nMaxConnections = 125; + +vector vNodes; +CCriticalSection cs_vNodes; +map mapRelay; +deque > vRelayExpiration; +CCriticalSection cs_mapRelay; +limitedmap mapAlreadyAskedFor(MAX_INV_SZ); + +static deque vOneShots; +CCriticalSection cs_vOneShots; + +set setservAddNodeAddresses; +CCriticalSection cs_setservAddNodeAddresses; + +vector vAddedNodes; +CCriticalSection cs_vAddedNodes; + +NodeId nLastNodeId = 0; +CCriticalSection cs_nLastNodeId; + +static CSemaphore *semOutbound = NULL; + +// Signals for message handling +static CNodeSignals g_signals; +CNodeSignals& GetNodeSignals() { return g_signals; } + +void AddOneShot(string strDest) +{ + LOCK(cs_vOneShots); + vOneShots.push_back(strDest); +} + +unsigned short GetListenPort() +{ + return (unsigned short)(GetArg("-port", Params().GetDefaultPort())); +} + +// find 'best' local address for a particular peer +bool GetLocal(CService& addr, const CNetAddr *paddrPeer) +{ + if (fNoListen) + return false; + + int nBestScore = -1; + int nBestReachability = -1; + { + LOCK(cs_mapLocalHost); + for (map::iterator it = mapLocalHost.begin(); it != mapLocalHost.end(); it++) + { + int nScore = (*it).second.nScore; + int nReachability = (*it).first.GetReachabilityFrom(paddrPeer); + if (nReachability > nBestReachability || (nReachability == nBestReachability && nScore > nBestScore)) + { + addr = CService((*it).first, (*it).second.nPort); + nBestReachability = nReachability; + nBestScore = nScore; + } + } + } + return nBestScore >= 0; +} + +// get best local address for a particular peer as a CAddress +CAddress GetLocalAddress(const CNetAddr *paddrPeer) +{ + CAddress ret(CService("0.0.0.0",0),0); + CService addr; + if (GetLocal(addr, paddrPeer)) + { + ret = CAddress(addr); + ret.nServices = nLocalServices; + ret.nTime = GetAdjustedTime(); + } + return ret; +} + +bool RecvLine(SOCKET hSocket, string& strLine) +{ + strLine = ""; + while (true) + { + char c; + int nBytes = recv(hSocket, &c, 1, 0); + if (nBytes > 0) + { + if (c == '\n') + continue; + if (c == '\r') + return true; + strLine += c; + if (strLine.size() >= 9000) + return true; + } + else if (nBytes <= 0) + { + boost::this_thread::interruption_point(); + if (nBytes < 0) + { + int nErr = WSAGetLastError(); + if (nErr == WSAEMSGSIZE) + continue; + if (nErr == WSAEWOULDBLOCK || nErr == WSAEINTR || nErr == WSAEINPROGRESS) + { + MilliSleep(10); + continue; + } + } + if (!strLine.empty()) + return true; + if (nBytes == 0) + { + // socket closed + LogPrint("net", "socket closed\n"); + return false; + } + else + { + // socket error + int nErr = WSAGetLastError(); + LogPrint("net", "recv failed: %s\n", NetworkErrorString(nErr)); + return false; + } + } + } +} + +// used when scores of local addresses may have changed +// pushes better local address to peers +void static AdvertizeLocal() +{ + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + if (pnode->fSuccessfullyConnected) + { + CAddress addrLocal = GetLocalAddress(&pnode->addr); + if (addrLocal.IsRoutable() && (CService)addrLocal != (CService)pnode->addrLocal) + { + pnode->PushAddress(addrLocal); + pnode->addrLocal = addrLocal; + } + } + } +} + +void SetReachable(enum Network net, bool fFlag) +{ + LOCK(cs_mapLocalHost); + vfReachable[net] = fFlag; + if (net == NET_IPV6 && fFlag) + vfReachable[NET_IPV4] = true; +} + +// learn a new local address +bool AddLocal(const CService& addr, int nScore) +{ + if (!addr.IsRoutable()) + return false; + + if (!fDiscover && nScore < LOCAL_MANUAL) + return false; + + if (IsLimited(addr)) + return false; + + LogPrintf("AddLocal(%s,%i)\n", addr.ToString(), nScore); + + { + LOCK(cs_mapLocalHost); + bool fAlready = mapLocalHost.count(addr) > 0; + LocalServiceInfo &info = mapLocalHost[addr]; + if (!fAlready || nScore >= info.nScore) { + info.nScore = nScore + (fAlready ? 1 : 0); + info.nPort = addr.GetPort(); + } + SetReachable(addr.GetNetwork()); + } + + AdvertizeLocal(); + + return true; +} + +bool AddLocal(const CNetAddr &addr, int nScore) +{ + return AddLocal(CService(addr, GetListenPort()), nScore); +} + +/** Make a particular network entirely off-limits (no automatic connects to it) */ +void SetLimited(enum Network net, bool fLimited) +{ + if (net == NET_UNROUTABLE) + return; + LOCK(cs_mapLocalHost); + vfLimited[net] = fLimited; +} + +bool IsLimited(enum Network net) +{ + LOCK(cs_mapLocalHost); + return vfLimited[net]; +} + +bool IsLimited(const CNetAddr &addr) +{ + return IsLimited(addr.GetNetwork()); +} + +/** vote for a local address */ +bool SeenLocal(const CService& addr) +{ + { + LOCK(cs_mapLocalHost); + if (mapLocalHost.count(addr) == 0) + return false; + mapLocalHost[addr].nScore++; + } + + AdvertizeLocal(); + + return true; +} + +/** check whether a given address is potentially local */ +bool IsLocal(const CService& addr) +{ + LOCK(cs_mapLocalHost); + return mapLocalHost.count(addr) > 0; +} + +/** check whether a given address is in a network we can probably connect to */ +bool IsReachable(const CNetAddr& addr) +{ + LOCK(cs_mapLocalHost); + enum Network net = addr.GetNetwork(); + return vfReachable[net] && !vfLimited[net]; +} + +bool GetMyExternalIP2(const CService& addrConnect, const char* pszGet, const char* pszKeyword, CNetAddr& ipRet) +{ + SOCKET hSocket; + if (!ConnectSocket(addrConnect, hSocket)) + return error("GetMyExternalIP() : connection to %s failed", addrConnect.ToString()); + + send(hSocket, pszGet, strlen(pszGet), MSG_NOSIGNAL); + + string strLine; + while (RecvLine(hSocket, strLine)) + { + if (strLine.empty()) // HTTP response is separated from headers by blank line + { + while (true) + { + if (!RecvLine(hSocket, strLine)) + { + closesocket(hSocket); + return false; + } + if (pszKeyword == NULL) + break; + if (strLine.find(pszKeyword) != string::npos) + { + strLine = strLine.substr(strLine.find(pszKeyword) + strlen(pszKeyword)); + break; + } + } + closesocket(hSocket); + if (strLine.find("<") != string::npos) + strLine = strLine.substr(0, strLine.find("<")); + strLine = strLine.substr(strspn(strLine.c_str(), " \t\n\r")); + while (strLine.size() > 0 && isspace(strLine[strLine.size()-1])) + strLine.resize(strLine.size()-1); + CService addr(strLine,0,true); + LogPrintf("GetMyExternalIP() received [%s] %s\n", strLine, addr.ToString()); + if (!addr.IsValid() || !addr.IsRoutable()) + return false; + ipRet.SetIP(addr); + return true; + } + } + closesocket(hSocket); + return error("GetMyExternalIP() : connection closed"); +} + +bool GetMyExternalIP(CNetAddr& ipRet) +{ + CService addrConnect; + const char* pszGet; + const char* pszKeyword; + + for (int nLookup = 0; nLookup <= 1; nLookup++) + for (int nHost = 1; nHost <= 1; nHost++) + { + // We should be phasing out our use of sites like these. If we need + // replacements, we should ask for volunteers to put this simple + // php file on their web server that prints the client IP: + // + if (nHost == 1) + { + addrConnect = CService("91.198.22.70", 80); // checkip.dyndns.org + + if (nLookup == 1) + { + CService addrIP("checkip.dyndns.org", 80, true); + if (addrIP.IsValid()) + addrConnect = addrIP; + } + + pszGet = "GET / HTTP/1.1\r\n" + "Host: checkip.dyndns.org\r\n" + "User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)\r\n" + "Connection: close\r\n" + "\r\n"; + + pszKeyword = "Address:"; + } + + if (GetMyExternalIP2(addrConnect, pszGet, pszKeyword, ipRet)) + return true; + } + + return false; +} + +void ThreadGetMyExternalIP() +{ + CNetAddr addrLocalHost; + if (GetMyExternalIP(addrLocalHost)) + { + LogPrintf("GetMyExternalIP() returned %s\n", addrLocalHost.ToStringIP()); + AddLocal(addrLocalHost, LOCAL_HTTP); + } +} + + + + + +void AddressCurrentlyConnected(const CService& addr) +{ + addrman.Connected(addr); +} + + + + +uint64_t CNode::nTotalBytesRecv = 0; +uint64_t CNode::nTotalBytesSent = 0; +CCriticalSection CNode::cs_totalBytesRecv; +CCriticalSection CNode::cs_totalBytesSent; + +CNode* FindNode(const CNetAddr& ip) +{ + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + if ((CNetAddr)pnode->addr == ip) + return (pnode); + return NULL; +} + +CNode* FindNode(std::string addrName) +{ + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + if (pnode->addrName == addrName) + return (pnode); + return NULL; +} + +CNode* FindNode(const CService& addr) +{ + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + if ((CService)pnode->addr == addr) + return (pnode); + return NULL; +} + +CNode* ConnectNode(CAddress addrConnect, const char *pszDest) +{ + if (pszDest == NULL) { + if (IsLocal(addrConnect)) + return NULL; + + // Look for an existing connection + CNode* pnode = FindNode((CService)addrConnect); + if (pnode) + { + pnode->AddRef(); + return pnode; + } + } + + + /// debug print + LogPrint("net", "trying connection %s lastseen=%.1fhrs\n", + pszDest ? pszDest : addrConnect.ToString(), + pszDest ? 0 : (double)(GetAdjustedTime() - addrConnect.nTime)/3600.0); + + // Connect + SOCKET hSocket; + if (pszDest ? ConnectSocketByName(addrConnect, hSocket, pszDest, Params().GetDefaultPort()) : ConnectSocket(addrConnect, hSocket)) + { + addrman.Attempt(addrConnect); + + 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) + LogPrintf("ConnectSocket() : ioctlsocket non-blocking setting failed, error %s\n", NetworkErrorString(WSAGetLastError())); +#else + if (fcntl(hSocket, F_SETFL, O_NONBLOCK) == SOCKET_ERROR) + LogPrintf("ConnectSocket() : fcntl non-blocking setting failed, error %s\n", NetworkErrorString(errno)); +#endif + + // Add node + CNode* pnode = new CNode(hSocket, addrConnect, pszDest ? pszDest : "", false); + pnode->AddRef(); + + { + LOCK(cs_vNodes); + vNodes.push_back(pnode); + } + + pnode->nTimeConnected = GetTime(); + return pnode; + } + else + { + return NULL; + } +} + +void CNode::CloseSocketDisconnect() +{ + fDisconnect = true; + if (hSocket != INVALID_SOCKET) + { + LogPrint("net", "disconnecting node %s\n", addrName); + closesocket(hSocket); + hSocket = INVALID_SOCKET; + } + + // in case this fails, we'll empty the recv buffer when the CNode is deleted + TRY_LOCK(cs_vRecvMsg, lockRecv); + if (lockRecv) + vRecvMsg.clear(); + + // if this was the sync node, we'll need a new one + if (this == pnodeSync) + pnodeSync = NULL; +} + +void CNode::Cleanup() +{ +} + + +void CNode::PushVersion() +{ + int nBestHeight = g_signals.GetHeight().get_value_or(0); + + /// when NTP implemented, change to just nTime = GetAdjustedTime() + 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)); + 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); +} + + + + + +std::map CNode::setBanned; +CCriticalSection CNode::cs_setBanned; + +void CNode::ClearBanned() +{ + setBanned.clear(); +} + +bool CNode::IsBanned(CNetAddr ip) +{ + bool fResult = false; + { + LOCK(cs_setBanned); + std::map::iterator i = setBanned.find(ip); + if (i != setBanned.end()) + { + int64_t t = (*i).second; + if (GetTime() < t) + fResult = true; + } + } + return fResult; +} + +bool CNode::Ban(const CNetAddr &addr) { + int64_t banTime = GetTime()+GetArg("-bantime", 60*60*24); // Default 24-hour ban + { + LOCK(cs_setBanned); + if (setBanned[addr] < banTime) + setBanned[addr] = banTime; + } + 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(cleanSubVer); + X(fInbound); + X(nStartingHeight); + 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 (Pfennig 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 + +// requires LOCK(cs_vRecvMsg) +bool CNode::ReceiveMsgBytes(const char *pch, unsigned int nBytes) +{ + while (nBytes > 0) { + + // get current incomplete message, or create a new one + if (vRecvMsg.empty() || + vRecvMsg.back().complete()) + vRecvMsg.push_back(CNetMessage(SER_NETWORK, nRecvVersion)); + + CNetMessage& msg = vRecvMsg.back(); + + // absorb network data + int handled; + if (!msg.in_data) + handled = msg.readHeader(pch, nBytes); + else + handled = msg.readData(pch, nBytes); + + if (handled < 0) + return false; + + pch += handled; + nBytes -= handled; + } + + return true; +} + +int CNetMessage::readHeader(const char *pch, unsigned int nBytes) +{ + // copy data to temporary parsing buffer + unsigned int nRemaining = 24 - nHdrPos; + unsigned int nCopy = std::min(nRemaining, nBytes); + + memcpy(&hdrbuf[nHdrPos], pch, nCopy); + nHdrPos += nCopy; + + // if header incomplete, exit + if (nHdrPos < 24) + return nCopy; + + // deserialize to CMessageHeader + try { + hdrbuf >> hdr; + } + catch (std::exception &e) { + return -1; + } + + // reject messages larger than MAX_SIZE + if (hdr.nMessageSize > MAX_SIZE) + return -1; + + // switch state to reading message data + in_data = true; + vRecv.resize(hdr.nMessageSize); + + return nCopy; +} + +int CNetMessage::readData(const char *pch, unsigned int nBytes) +{ + unsigned int nRemaining = hdr.nMessageSize - nDataPos; + unsigned int nCopy = std::min(nRemaining, nBytes); + + memcpy(&vRecv[nDataPos], pch, nCopy); + nDataPos += nCopy; + + return nCopy; +} + + + + + + + + + +// requires LOCK(cs_vSend) +void SocketSendData(CNode *pnode) +{ + std::deque::iterator it = pnode->vSendMsg.begin(); + + while (it != pnode->vSendMsg.end()) { + const CSerializeData &data = *it; + assert(data.size() > pnode->nSendOffset); + int nBytes = send(pnode->hSocket, &data[pnode->nSendOffset], data.size() - pnode->nSendOffset, MSG_NOSIGNAL | MSG_DONTWAIT); + if (nBytes > 0) { + pnode->nLastSend = GetTime(); + pnode->nSendBytes += nBytes; + pnode->nSendOffset += nBytes; + pnode->RecordBytesSent(nBytes); + if (pnode->nSendOffset == data.size()) { + pnode->nSendOffset = 0; + pnode->nSendSize -= data.size(); + it++; + } else { + // could not send full message; stop sending more + break; + } + } else { + if (nBytes < 0) { + // error + int nErr = WSAGetLastError(); + if (nErr != WSAEWOULDBLOCK && nErr != WSAEMSGSIZE && nErr != WSAEINTR && nErr != WSAEINPROGRESS) + { + LogPrintf("socket send error %s\n", NetworkErrorString(nErr)); + pnode->CloseSocketDisconnect(); + } + } + // couldn't send anything at all + break; + } + } + + if (it == pnode->vSendMsg.end()) { + assert(pnode->nSendOffset == 0); + assert(pnode->nSendSize == 0); + } + pnode->vSendMsg.erase(pnode->vSendMsg.begin(), it); +} + +static list vNodesDisconnected; + +void ThreadSocketHandler() +{ + unsigned int nPrevNodeCount = 0; + while (true) + { + // + // Disconnect nodes + // + { + LOCK(cs_vNodes); + // Disconnect unused nodes + vector vNodesCopy = vNodes; + BOOST_FOREACH(CNode* pnode, vNodesCopy) + { + if (pnode->fDisconnect || + (pnode->GetRefCount() <= 0 && pnode->vRecvMsg.empty() && pnode->nSendSize == 0 && pnode->ssSend.empty())) + { + // remove from vNodes + vNodes.erase(remove(vNodes.begin(), vNodes.end(), pnode), vNodes.end()); + + // release outbound grant (if any) + pnode->grantOutbound.Release(); + + // close socket and cleanup + pnode->CloseSocketDisconnect(); + pnode->Cleanup(); + + // hold in disconnected pool until all refs are released + if (pnode->fNetworkNode || pnode->fInbound) + pnode->Release(); + vNodesDisconnected.push_back(pnode); + } + } + } + { + // Delete disconnected nodes + list vNodesDisconnectedCopy = vNodesDisconnected; + BOOST_FOREACH(CNode* pnode, vNodesDisconnectedCopy) + { + // wait until threads are done using it + if (pnode->GetRefCount() <= 0) + { + bool fDelete = false; + { + TRY_LOCK(pnode->cs_vSend, lockSend); + if (lockSend) + { + TRY_LOCK(pnode->cs_vRecvMsg, lockRecv); + if (lockRecv) + { + TRY_LOCK(pnode->cs_inventory, lockInv); + if (lockInv) + fDelete = true; + } + } + } + if (fDelete) + { + vNodesDisconnected.remove(pnode); + delete pnode; + } + } + } + } + if(vNodes.size() != nPrevNodeCount) { + nPrevNodeCount = vNodes.size(); + uiInterface.NotifyNumConnectionsChanged(nPrevNodeCount); + } + + + // + // Find which sockets have data to receive + // + struct timeval timeout; + timeout.tv_sec = 0; + timeout.tv_usec = 50000; // frequency to poll pnode->vSend + + fd_set fdsetRecv; + fd_set fdsetSend; + fd_set fdsetError; + FD_ZERO(&fdsetRecv); + FD_ZERO(&fdsetSend); + FD_ZERO(&fdsetError); + SOCKET hSocketMax = 0; + bool have_fds = false; + + BOOST_FOREACH(SOCKET hListenSocket, vhListenSocket) { + FD_SET(hListenSocket, &fdsetRecv); + hSocketMax = max(hSocketMax, hListenSocket); + have_fds = true; + } + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + if (pnode->hSocket == INVALID_SOCKET) + continue; + FD_SET(pnode->hSocket, &fdsetError); + hSocketMax = max(hSocketMax, pnode->hSocket); + have_fds = true; + + // Implement the following logic: + // * If there is data to send, select() for sending data. As this only + // happens when optimistic write failed, we choose to first drain the + // write buffer in this case before receiving more. This avoids + // needlessly queueing received data, if the remote peer is not themselves + // receiving data. This means properly utilizing TCP flow control signalling. + // * Otherwise, if there is no (complete) message in the receive buffer, + // or there is space left in the buffer, select() for receiving data. + // * (if neither of the above applies, there is certainly one message + // in the receiver buffer ready to be processed). + // Together, that means that at least one of the following is always possible, + // so we don't deadlock: + // * We send some data. + // * We wait for data to be received (and disconnect after timeout). + // * We process a message in the buffer (message handler thread). + { + TRY_LOCK(pnode->cs_vSend, lockSend); + if (lockSend && !pnode->vSendMsg.empty()) { + FD_SET(pnode->hSocket, &fdsetSend); + continue; + } + } + { + TRY_LOCK(pnode->cs_vRecvMsg, lockRecv); + if (lockRecv && ( + pnode->vRecvMsg.empty() || !pnode->vRecvMsg.front().complete() || + pnode->GetTotalRecvSize() <= ReceiveFloodSize())) + FD_SET(pnode->hSocket, &fdsetRecv); + } + } + } + + int nSelect = select(have_fds ? hSocketMax + 1 : 0, + &fdsetRecv, &fdsetSend, &fdsetError, &timeout); + boost::this_thread::interruption_point(); + + if (nSelect == SOCKET_ERROR) + { + if (have_fds) + { + int nErr = WSAGetLastError(); + LogPrintf("socket select error %s\n", NetworkErrorString(nErr)); + for (unsigned int i = 0; i <= hSocketMax; i++) + FD_SET(i, &fdsetRecv); + } + FD_ZERO(&fdsetSend); + FD_ZERO(&fdsetError); + MilliSleep(timeout.tv_usec/1000); + } + + + // + // Accept new connections + // + BOOST_FOREACH(SOCKET hListenSocket, vhListenSocket) + if (hListenSocket != INVALID_SOCKET && FD_ISSET(hListenSocket, &fdsetRecv)) + { + struct sockaddr_storage sockaddr; + socklen_t len = sizeof(sockaddr); + SOCKET hSocket = accept(hListenSocket, (struct sockaddr*)&sockaddr, &len); + CAddress addr; + int nInbound = 0; + + if (hSocket != INVALID_SOCKET) + if (!addr.SetSockAddr((const struct sockaddr*)&sockaddr)) + LogPrintf("Warning: Unknown socket family\n"); + + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + if (pnode->fInbound) + nInbound++; + } + + if (hSocket == INVALID_SOCKET) + { + int nErr = WSAGetLastError(); + if (nErr != WSAEWOULDBLOCK) + LogPrintf("socket error accept failed: %s\n", NetworkErrorString(nErr)); + } + else if (nInbound >= nMaxConnections - MAX_OUTBOUND_CONNECTIONS) + { + closesocket(hSocket); + } + else if (CNode::IsBanned(addr)) + { + LogPrintf("connection from %s dropped (banned)\n", addr.ToString()); + closesocket(hSocket); + } + else + { + LogPrint("net", "accepted connection %s\n", addr.ToString()); + CNode* pnode = new CNode(hSocket, addr, "", true); + pnode->AddRef(); + { + LOCK(cs_vNodes); + vNodes.push_back(pnode); + } + } + } + + + // + // Service each socket + // + vector vNodesCopy; + { + LOCK(cs_vNodes); + vNodesCopy = vNodes; + BOOST_FOREACH(CNode* pnode, vNodesCopy) + pnode->AddRef(); + } + BOOST_FOREACH(CNode* pnode, vNodesCopy) + { + boost::this_thread::interruption_point(); + + // + // Receive + // + if (pnode->hSocket == INVALID_SOCKET) + continue; + if (FD_ISSET(pnode->hSocket, &fdsetRecv) || FD_ISSET(pnode->hSocket, &fdsetError)) + { + TRY_LOCK(pnode->cs_vRecvMsg, lockRecv); + if (lockRecv) + { + { + // typical socket buffer is 8K-64K + char pchBuf[0x10000]; + int nBytes = recv(pnode->hSocket, pchBuf, sizeof(pchBuf), MSG_DONTWAIT); + if (nBytes > 0) + { + if (!pnode->ReceiveMsgBytes(pchBuf, nBytes)) + pnode->CloseSocketDisconnect(); + pnode->nLastRecv = GetTime(); + pnode->nRecvBytes += nBytes; + pnode->RecordBytesRecv(nBytes); + } + else if (nBytes == 0) + { + // socket closed gracefully + if (!pnode->fDisconnect) + LogPrint("net", "socket closed\n"); + pnode->CloseSocketDisconnect(); + } + else if (nBytes < 0) + { + // error + int nErr = WSAGetLastError(); + if (nErr != WSAEWOULDBLOCK && nErr != WSAEMSGSIZE && nErr != WSAEINTR && nErr != WSAEINPROGRESS) + { + if (!pnode->fDisconnect) + LogPrintf("socket recv error %s\n", NetworkErrorString(nErr)); + pnode->CloseSocketDisconnect(); + } + } + } + } + } + + // + // Send + // + if (pnode->hSocket == INVALID_SOCKET) + continue; + if (FD_ISSET(pnode->hSocket, &fdsetSend)) + { + TRY_LOCK(pnode->cs_vSend, lockSend); + if (lockSend) + SocketSendData(pnode); + } + + // + // Inactivity checking + // + if (pnode->vSendMsg.empty()) + pnode->nLastSendEmpty = GetTime(); + if (GetTime() - pnode->nTimeConnected > 60) + { + if (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) + { + LogPrintf("socket not sending\n"); + pnode->fDisconnect = true; + } + else if (GetTime() - pnode->nLastRecv > 90*60) + { + LogPrintf("socket inactivity timeout\n"); + pnode->fDisconnect = true; + } + } + } + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodesCopy) + pnode->Release(); + } + } +} + + + + + + + + + +#ifdef USE_UPNP +void ThreadMapPort() +{ + std::string port = strprintf("%u", GetListenPort()); + const char * multicastif = 0; + const char * minissdpdpath = 0; + struct UPNPDev * devlist = 0; + char lanaddr[64]; + +#ifndef UPNPDISCOVER_SUCCESS + /* miniupnpc 1.5 */ + devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0); +#else + /* miniupnpc 1.6 */ + int error = 0; + devlist = upnpDiscover(2000, multicastif, minissdpdpath, 0, 0, &error); +#endif + + struct UPNPUrls urls; + struct IGDdatas data; + int r; + + r = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr)); + if (r == 1) + { + if (fDiscover) { + char externalIPAddress[40]; + r = UPNP_GetExternalIPAddress(urls.controlURL, data.first.servicetype, externalIPAddress); + if(r != UPNPCOMMAND_SUCCESS) + LogPrintf("UPnP: GetExternalIPAddress() returned %d\n", r); + else + { + if(externalIPAddress[0]) + { + LogPrintf("UPnP: ExternalIPAddress = %s\n", externalIPAddress); + AddLocal(CNetAddr(externalIPAddress), LOCAL_UPNP); + } + else + LogPrintf("UPnP: GetExternalIPAddress failed.\n"); + } + } + + string strDesc = "Pfennig " + FormatFullVersion(); + + try { + while (true) { +#ifndef UPNPDISCOVER_SUCCESS + /* miniupnpc 1.5 */ + r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, + port.c_str(), port.c_str(), lanaddr, strDesc.c_str(), "TCP", 0); +#else + /* miniupnpc 1.6 */ + r = UPNP_AddPortMapping(urls.controlURL, data.first.servicetype, + port.c_str(), port.c_str(), lanaddr, strDesc.c_str(), "TCP", 0, "0"); +#endif + + if(r!=UPNPCOMMAND_SUCCESS) + LogPrintf("AddPortMapping(%s, %s, %s) failed with code %d (%s)\n", + port, port, lanaddr, r, strupnperror(r)); + else + LogPrintf("UPnP Port Mapping successful.\n");; + + MilliSleep(20*60*1000); // Refresh every 20 minutes + } + } + catch (boost::thread_interrupted) + { + r = UPNP_DeletePortMapping(urls.controlURL, data.first.servicetype, port.c_str(), "TCP", 0); + LogPrintf("UPNP_DeletePortMapping() returned : %d\n", r); + freeUPNPDevlist(devlist); devlist = 0; + FreeUPNPUrls(&urls); + throw; + } + } else { + LogPrintf("No valid UPnP IGDs found\n"); + freeUPNPDevlist(devlist); devlist = 0; + if (r != 0) + FreeUPNPUrls(&urls); + } +} + +void MapPort(bool fUseUPnP) +{ + static boost::thread* upnp_thread = NULL; + + if (fUseUPnP) + { + if (upnp_thread) { + upnp_thread->interrupt(); + upnp_thread->join(); + delete upnp_thread; + } + upnp_thread = new boost::thread(boost::bind(&TraceThread, "upnp", &ThreadMapPort)); + } + else if (upnp_thread) { + upnp_thread->interrupt(); + upnp_thread->join(); + delete upnp_thread; + upnp_thread = NULL; + } +} + +#else +void MapPort(bool) +{ + // Intentionally left blank. +} +#endif + + + + + + +void ThreadDNSAddressSeed() +{ + // goal: only query DNS seeds if address need is acute + if ((addrman.size() > 0) && + (!GetBoolArg("-forcednsseed", false))) { + MilliSleep(11 * 1000); + + LOCK(cs_vNodes); + if (vNodes.size() >= 2) { + LogPrintf("P2P peers available. Skipped DNS seeding.\n"); + return; + } + } + + const vector &vSeeds = Params().DNSSeeds(); + int found = 0; + + LogPrintf("Loading addresses from DNS seeds (could take a while)\n"); + + BOOST_FOREACH(const CDNSSeedData &seed, vSeeds) { + if (HaveNameProxy()) { + AddOneShot(seed.host); + } else { + vector vIPs; + vector vAdd; + if (LookupHost(seed.host.c_str(), vIPs)) + { + BOOST_FOREACH(CNetAddr& ip, vIPs) + { + int nOneDay = 24*3600; + CAddress addr = CAddress(CService(ip, Params().GetDefaultPort())); + addr.nTime = GetTime() - 3*nOneDay - GetRand(4*nOneDay); // use a random age between 3 and 7 days old + vAdd.push_back(addr); + found++; + } + } + addrman.Add(vAdd, CNetAddr(seed.name, true)); + } + } + + LogPrintf("%d addresses found from DNS seeds\n", found); +} + + + + + + + + + + + + +void DumpAddresses() +{ + int64_t nStart = GetTimeMillis(); + + CAddrDB adb; + adb.Write(addrman); + + LogPrint("net", "Flushed %d addresses to peers.dat %dms\n", + addrman.size(), GetTimeMillis() - nStart); +} + +void static ProcessOneShot() +{ + string strDest; + { + LOCK(cs_vOneShots); + if (vOneShots.empty()) + return; + strDest = vOneShots.front(); + vOneShots.pop_front(); + } + CAddress addr; + CSemaphoreGrant grant(*semOutbound, true); + if (grant) { + if (!OpenNetworkConnection(addr, &grant, strDest.c_str(), true)) + AddOneShot(strDest); + } +} + +void ThreadOpenConnections() +{ + // Connect to specific addresses + if (mapArgs.count("-connect") && mapMultiArgs["-connect"].size() > 0) + { + for (int64_t nLoop = 0;; nLoop++) + { + ProcessOneShot(); + BOOST_FOREACH(string strAddr, mapMultiArgs["-connect"]) + { + CAddress addr; + OpenNetworkConnection(addr, NULL, strAddr.c_str()); + for (int i = 0; i < 10 && i < nLoop; i++) + { + MilliSleep(500); + } + } + MilliSleep(500); + } + } + + // Initiate network connections + int64_t nStart = GetTime(); + while (true) + { + ProcessOneShot(); + + MilliSleep(500); + + CSemaphoreGrant grant(*semOutbound); + boost::this_thread::interruption_point(); + + // Add seed nodes if DNS seeds are all down (an infrastructure attack?). + if (addrman.size() == 0 && (GetTime() - nStart > 60)) { + static bool done = false; + if (!done) { + LogPrintf("Adding fixed seed nodes as DNS doesn't seem to be available.\n"); + addrman.Add(Params().FixedSeeds(), CNetAddr("127.0.0.1")); + done = true; + } + } + + // + // Choose an address to connect to based on most recently seen + // + CAddress addrConnect; + + // Only connect out to one peer per network group (/16 for IPv4). + // Do this here so we don't have to critsect vNodes inside mapAddresses critsect. + int nOutbound = 0; + set > setConnected; + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) { + if (!pnode->fInbound) { + setConnected.insert(pnode->addr.GetGroup()); + nOutbound++; + } + } + } + + int64_t nANow = GetAdjustedTime(); + + int nTries = 0; + while (true) + { + // use an nUnkBias between 10 (no outgoing connections) and 90 (8 outgoing connections) + CAddress addr = addrman.Select(10 + min(nOutbound,8)*10); + + // if we selected an invalid address, restart + if (!addr.IsValid() || setConnected.count(addr.GetGroup()) || IsLocal(addr)) + break; + + // If we didn't find an appropriate destination after trying 100 addresses fetched from addrman, + // stop this loop, and let the outer loop run again (which sleeps, adds seed nodes, recalculates + // already-connected network ranges, ...) before trying new addrman addresses. + nTries++; + if (nTries > 100) + break; + + if (IsLimited(addr)) + continue; + + // only consider very recently tried nodes after 30 failed attempts + if (nANow - addr.nLastTry < 600 && nTries < 30) + continue; + + // do not allow non-default ports, unless after 50 invalid addresses selected already + if (addr.GetPort() != Params().GetDefaultPort() && nTries < 50) + continue; + + addrConnect = addr; + break; + } + + if (addrConnect.IsValid()) + OpenNetworkConnection(addrConnect, &grant); + } +} + +void ThreadOpenAddedConnections() +{ + { + LOCK(cs_vAddedNodes); + vAddedNodes = mapMultiArgs["-addnode"]; + } + + if (HaveNameProxy()) { + while(true) { + list lAddresses(0); + { + LOCK(cs_vAddedNodes); + BOOST_FOREACH(string& strAddNode, vAddedNodes) + lAddresses.push_back(strAddNode); + } + BOOST_FOREACH(string& strAddNode, lAddresses) { + CAddress addr; + CSemaphoreGrant grant(*semOutbound); + OpenNetworkConnection(addr, &grant, strAddNode.c_str()); + MilliSleep(500); + } + MilliSleep(120000); // Retry every 2 minutes + } + } + + for (unsigned int i = 0; true; i++) + { + list lAddresses(0); + { + LOCK(cs_vAddedNodes); + BOOST_FOREACH(string& strAddNode, vAddedNodes) + lAddresses.push_back(strAddNode); + } + + list > lservAddressesToAdd(0); + BOOST_FOREACH(string& strAddNode, lAddresses) + { + vector vservNode(0); + if(Lookup(strAddNode.c_str(), vservNode, Params().GetDefaultPort(), fNameLookup, 0)) + { + lservAddressesToAdd.push_back(vservNode); + { + LOCK(cs_setservAddNodeAddresses); + BOOST_FOREACH(CService& serv, vservNode) + setservAddNodeAddresses.insert(serv); + } + } + } + // Attempt to connect to each IP for each addnode entry until at least one is successful per addnode entry + // (keeping in mind that addnode entries can have many IPs if fNameLookup) + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + for (list >::iterator it = lservAddressesToAdd.begin(); it != lservAddressesToAdd.end(); it++) + BOOST_FOREACH(CService& addrNode, *(it)) + if (pnode->addr == addrNode) + { + it = lservAddressesToAdd.erase(it); + it--; + break; + } + } + BOOST_FOREACH(vector& vserv, lservAddressesToAdd) + { + CSemaphoreGrant grant(*semOutbound); + OpenNetworkConnection(CAddress(vserv[i % vserv.size()]), &grant); + MilliSleep(500); + } + MilliSleep(120000); // Retry every 2 minutes + } +} + +// if successful, this moves the passed grant to the constructed node +bool OpenNetworkConnection(const CAddress& addrConnect, CSemaphoreGrant *grantOutbound, const char *strDest, bool fOneShot) +{ + // + // Initiate outbound network connection + // + boost::this_thread::interruption_point(); + if (!strDest) + if (IsLocal(addrConnect) || + FindNode((CNetAddr)addrConnect) || CNode::IsBanned(addrConnect) || + FindNode(addrConnect.ToStringIPPort().c_str())) + return false; + if (strDest && FindNode(strDest)) + return false; + + CNode* pnode = ConnectNode(addrConnect, strDest); + boost::this_thread::interruption_point(); + + if (!pnode) + return false; + if (grantOutbound) + grantOutbound->MoveTo(pnode->grantOutbound); + pnode->fNetworkNode = true; + if (fOneShot) + pnode->fOneShot = true; + + return true; +} + + +// for now, use a very simple selection metric: the node from which we received +// most recently +static int64_t NodeSyncScore(const CNode *pnode) { + return pnode->nLastRecv; +} + +void static StartSync(const vector &vNodes) { + CNode *pnodeNewSync = NULL; + int64_t nBestScore = 0; + + int nBestHeight = g_signals.GetHeight().get_value_or(0); + + // Iterate over all nodes + BOOST_FOREACH(CNode* pnode, vNodes) { + // check preconditions for allowing a sync + if (!pnode->fClient && !pnode->fOneShot && + !pnode->fDisconnect && pnode->fSuccessfullyConnected && + (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 + int64_t nScore = NodeSyncScore(pnode); + if (pnodeNewSync == NULL || nScore > nBestScore) { + pnodeNewSync = pnode; + nBestScore = nScore; + } + } + } + // if a new sync candidate was found, start sync! + if (pnodeNewSync) { + pnodeNewSync->fStartSync = true; + pnodeSync = pnodeNewSync; + } +} + +void ThreadMessageHandler() +{ + SetThreadPriority(THREAD_PRIORITY_BELOW_NORMAL); + while (true) + { + bool fHaveSyncNode = false; + + vector vNodesCopy; + { + LOCK(cs_vNodes); + vNodesCopy = vNodes; + BOOST_FOREACH(CNode* pnode, vNodesCopy) { + pnode->AddRef(); + if (pnode == pnodeSync) + fHaveSyncNode = true; + } + } + + if (!fHaveSyncNode) + StartSync(vNodesCopy); + + // Poll the connected nodes for messages + CNode* pnodeTrickle = NULL; + if (!vNodesCopy.empty()) + pnodeTrickle = vNodesCopy[GetRand(vNodesCopy.size())]; + + bool fSleep = true; + + BOOST_FOREACH(CNode* pnode, vNodesCopy) + { + if (pnode->fDisconnect) + continue; + + // Receive messages + { + 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(); + + // Send messages + { + TRY_LOCK(pnode->cs_vSend, lockSend); + if (lockSend) + g_signals.SendMessages(pnode, pnode == pnodeTrickle); + } + boost::this_thread::interruption_point(); + } + + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodesCopy) + pnode->Release(); + } + + if (fSleep) + MilliSleep(100); + } +} + + + + + + +bool BindListenPort(const CService &addrBind, string& strError) +{ + strError = ""; + int nOne = 1; + + // Create socket for listening for incoming connections + struct sockaddr_storage sockaddr; + socklen_t len = sizeof(sockaddr); + if (!addrBind.GetSockAddr((struct sockaddr*)&sockaddr, &len)) + { + 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 %s)", NetworkErrorString(WSAGetLastError())); + LogPrintf("%s\n", strError); + return false; + } + +#ifdef SO_NOSIGPIPE + // Different way of disabling SIGPIPE on BSD + setsockopt(hListenSocket, SOL_SOCKET, SO_NOSIGPIPE, (void*)&nOne, sizeof(int)); +#endif + +#ifndef WIN32 + // Allow binding if the port is still in TIME_WAIT state after + // the program was closed and restarted. Not an issue on windows. + setsockopt(hListenSocket, SOL_SOCKET, SO_REUSEADDR, (void*)&nOne, sizeof(int)); +#endif + + +#ifdef WIN32 + // Set to non-blocking, incoming connections will also inherit this + if (ioctlsocket(hListenSocket, FIONBIO, (u_long*)&nOne) == SOCKET_ERROR) +#else + if (fcntl(hListenSocket, F_SETFL, O_NONBLOCK) == SOCKET_ERROR) +#endif + { + strError = strprintf("Error: Couldn't set properties on socket for incoming connections (error %s)", NetworkErrorString(WSAGetLastError())); + LogPrintf("%s\n", strError); + return false; + } + + // 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()) { +#ifdef IPV6_V6ONLY +#ifdef WIN32 + setsockopt(hListenSocket, IPPROTO_IPV6, IPV6_V6ONLY, (const char*)&nOne, sizeof(int)); +#else + setsockopt(hListenSocket, IPPROTO_IPV6, IPV6_V6ONLY, (void*)&nOne, sizeof(int)); +#endif +#endif +#ifdef WIN32 + int nProtLevel = 10 /* PROTECTION_LEVEL_UNRESTRICTED */; + int nParameterId = 23 /* IPV6_PROTECTION_LEVEl */; + // this call is allowed to fail + setsockopt(hListenSocket, IPPROTO_IPV6, nParameterId, (const char*)&nProtLevel, sizeof(int)); +#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. Pfennig Core is probably already running."), addrBind.ToString()); + else + strError = strprintf(_("Unable to bind to %s on this computer (bind returned error %s)"), addrBind.ToString(), NetworkErrorString(nErr)); + LogPrintf("%s\n", strError); + return false; + } + 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 %s)"), NetworkErrorString(WSAGetLastError())); + LogPrintf("%s\n", strError); + return false; + } + + vhListenSocket.push_back(hListenSocket); + + if (addrBind.IsRoutable() && fDiscover) + AddLocal(addrBind, LOCAL_BIND); + + return true; +} + +void static Discover(boost::thread_group& threadGroup) +{ + if (!fDiscover) + return; + +#ifdef WIN32 + // Get local host IP + char pszHostName[1000] = ""; + if (gethostname(pszHostName, sizeof(pszHostName)) != SOCKET_ERROR) + { + vector vaddr; + if (LookupHost(pszHostName, vaddr)) + { + BOOST_FOREACH (const CNetAddr &addr, vaddr) + { + AddLocal(addr, LOCAL_IF); + } + } + } +#else + // Get local host ip + struct ifaddrs* myaddrs; + if (getifaddrs(&myaddrs) == 0) + { + for (struct ifaddrs* ifa = myaddrs; ifa != NULL; ifa = ifa->ifa_next) + { + if (ifa->ifa_addr == NULL) continue; + if ((ifa->ifa_flags & IFF_UP) == 0) continue; + if (strcmp(ifa->ifa_name, "lo") == 0) continue; + if (strcmp(ifa->ifa_name, "lo0") == 0) continue; + if (ifa->ifa_addr->sa_family == AF_INET) + { + struct sockaddr_in* s4 = (struct sockaddr_in*)(ifa->ifa_addr); + CNetAddr addr(s4->sin_addr); + if (AddLocal(addr, LOCAL_IF)) + LogPrintf("IPv4 %s: %s\n", ifa->ifa_name, addr.ToString()); + } + 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)) + LogPrintf("IPv6 %s: %s\n", ifa->ifa_name, addr.ToString()); + } + } + freeifaddrs(myaddrs); + } +#endif + + // Don't use external IPv4 discovery, when -onlynet="IPv6" + if (!IsLimited(NET_IPV4)) + threadGroup.create_thread(boost::bind(&TraceThread, "ext-ip", &ThreadGetMyExternalIP)); +} + +void StartNode(boost::thread_group& threadGroup) +{ + if (semOutbound == NULL) { + // initialize semaphore + int nMaxOutbound = min(MAX_OUTBOUND_CONNECTIONS, nMaxConnections); + semOutbound = new CSemaphore(nMaxOutbound); + } + + if (pnodeLocalHost == NULL) + pnodeLocalHost = new CNode(INVALID_SOCKET, CAddress(CService("127.0.0.1", 0), nLocalServices)); + + Discover(threadGroup); + + // + // Start threads + // + + if (!GetBoolArg("-dnsseed", true)) + LogPrintf("DNS seeding disabled\n"); + else + threadGroup.create_thread(boost::bind(&TraceThread, "dnsseed", &ThreadDNSAddressSeed)); + +#ifdef USE_UPNP + // Map ports with UPnP + MapPort(GetBoolArg("-upnp", USE_UPNP)); +#endif + + // Send and receive from sockets, accept connections + threadGroup.create_thread(boost::bind(&TraceThread, "net", &ThreadSocketHandler)); + + // Initiate outbound connections from -addnode + threadGroup.create_thread(boost::bind(&TraceThread, "addcon", &ThreadOpenAddedConnections)); + + // Initiate outbound connections + threadGroup.create_thread(boost::bind(&TraceThread, "opencon", &ThreadOpenConnections)); + + // Process messages + threadGroup.create_thread(boost::bind(&TraceThread, "msghand", &ThreadMessageHandler)); + + // Dump network addresses + threadGroup.create_thread(boost::bind(&LoopForever, "dumpaddr", &DumpAddresses, DUMP_ADDRESSES_INTERVAL * 1000)); +} + +bool StopNode() +{ + LogPrintf("StopNode()\n"); + MapPort(false); + if (semOutbound) + for (int i=0; ipost(); + MilliSleep(50); + DumpAddresses(); + + return true; +} + +class CNetCleanup +{ +public: + CNetCleanup() + { + } + ~CNetCleanup() + { + // Close sockets + BOOST_FOREACH(CNode* pnode, vNodes) + if (pnode->hSocket != INVALID_SOCKET) + closesocket(pnode->hSocket); + BOOST_FOREACH(SOCKET hListenSocket, vhListenSocket) + if (hListenSocket != INVALID_SOCKET) + if (closesocket(hListenSocket) == SOCKET_ERROR) + LogPrintf("closesocket(hListenSocket) failed with error %s\n", NetworkErrorString(WSAGetLastError())); + + // clean up some globals (to help leak detection) + BOOST_FOREACH(CNode *pnode, vNodes) + delete pnode; + BOOST_FOREACH(CNode *pnode, vNodesDisconnected) + delete pnode; + vNodes.clear(); + vNodesDisconnected.clear(); + delete semOutbound; + semOutbound = NULL; + delete pnodeLocalHost; + pnodeLocalHost = NULL; + +#ifdef WIN32 + // Shutdown Windows Sockets + WSACleanup(); +#endif + } +} +instance_of_cnetcleanup; + + + + + + + +void RelayTransaction(const CTransaction& tx, const uint256& hash) +{ + CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); + ss.reserve(10000); + ss << tx; + RelayTransaction(tx, hash, ss); +} + +void RelayTransaction(const CTransaction& tx, const uint256& hash, const CDataStream& ss) +{ + CInv inv(MSG_TX, hash); + { + LOCK(cs_mapRelay); + // Expire old relay messages + while (!vRelayExpiration.empty() && vRelayExpiration.front().first < GetTime()) + { + mapRelay.erase(vRelayExpiration.front().second); + vRelayExpiration.pop_front(); + } + + // Save original serialized message so newer versions are preserved + mapRelay.insert(std::make_pair(inv, ss)); + vRelayExpiration.push_back(std::make_pair(GetTime() + 15 * 60, inv)); + } + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + { + if(!pnode->fRelayTxes) + continue; + LOCK(pnode->cs_filter); + if (pnode->pfilter) + { + if (pnode->pfilter->IsRelevantAndUpdate(tx, hash)) + pnode->PushInventory(inv); + } else + pnode->PushInventory(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 684ccba..4d0925f 100644 --- a/src/net.h +++ b/src/net.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/net.h~ b/src/net.h~ new file mode 100644 index 0000000..c36b2c1 --- /dev/null +++ b/src/net.h~ @@ -0,0 +1,738 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_NET_H +#define BITMARK_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 + +#ifndef WIN32 +#include +#endif + +#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; +/** The maximum number of entries in mapAskFor */ +static const size_t MAPASKFOR_MAX_SZ = MAX_INV_SZ; +/** The maximum number of new addresses to accumulate before announcing. */ +static const unsigned int MAX_ADDR_TO_SEND = 1000; + +inline unsigned int ReceiveFloodSize() { return 1000*GetArg("-maxreceivebuffer", 5*1000); } +inline unsigned int SendBufferSize() { return 1000*GetArg("-maxsendbuffer", 1*1000); } + +void AddOneShot(std::string strDest); +bool RecvLine(SOCKET hSocket, std::string& strLine); +bool GetMyExternalIP(CNetAddr& ipRet); +void AddressCurrentlyConnected(const CService& addr); +CNode* FindNode(const CNetAddr& ip); +CNode* FindNode(const CService& ip); +CNode* ConnectNode(CAddress addrConnect, const char *strDest = NULL); +void MapPort(bool fUseUPnP); +unsigned short GetListenPort(); +bool BindListenPort(const CService &bindAddr, std::string& strError=REF(std::string())); +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(); + + +enum +{ + LOCAL_NONE, // unknown + LOCAL_IF, // address a local interface listens on + LOCAL_BIND, // address explicit bound to + LOCAL_UPNP, // address reported by UPnP + LOCAL_HTTP, // address reported by whatismyip.com and similar + LOCAL_MANUAL, // address explicitly specified (-externalip=) + + LOCAL_MAX +}; + +void SetLimited(enum Network net, bool fLimited = true); +bool IsLimited(enum Network net); +bool IsLimited(const CNetAddr& addr); +bool AddLocal(const CService& addr, int nScore = LOCAL_NONE); +bool AddLocal(const CNetAddr& addr, int nScore = LOCAL_NONE); +bool SeenLocal(const CService& addr); +bool IsLocal(const CService& addr); +bool GetLocal(CService &addr, const CNetAddr *paddrPeer = NULL); +bool IsReachable(const CNetAddr &addr); +void SetReachable(enum Network net, bool fFlag = true); +CAddress GetLocalAddress(const CNetAddr *paddrPeer = NULL); + + +extern bool fDiscover; +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 CCriticalSection cs_mapRelay; +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: + NodeId nodeid; + uint64_t nServices; + int64_t nLastSend; + int64_t nLastRecv; + int64_t nTimeConnected; + std::string addrName; + int nVersion; + std::string cleanSubVer; + bool fInbound; + int nStartingHeight; + uint64_t nSendBytes; + uint64_t nRecvBytes; + bool fSyncNode; + double dPingTime; + double dPingWait; + std::string addrLocal; +}; + + + + +class CNetMessage { +public: + bool in_data; // parsing header (false) or data (true) + + CDataStream hdrbuf; // partially received header + CMessageHeader hdr; // complete header + unsigned int nHdrPos; + + CDataStream vRecv; // received message data + unsigned int nDataPos; + + CNetMessage(int nTypeIn, int nVersionIn) : hdrbuf(nTypeIn, nVersionIn), vRecv(nTypeIn, nVersionIn) { + hdrbuf.resize(24); + in_data = false; + nHdrPos = 0; + nDataPos = 0; + } + + bool complete() const + { + if (!in_data) + return false; + return (hdr.nMessageSize == nDataPos); + } + + void SetVersion(int nVersionIn) + { + hdrbuf.SetVersion(nVersionIn); + vRecv.SetVersion(nVersionIn); + } + + int readHeader(const char *pch, unsigned int nBytes); + int readData(const char *pch, unsigned int nBytes); +}; + + + + + +/** Information about a peer */ +class CNode +{ +public: + // socket + 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_t nSendBytes; + std::deque vSendMsg; + CCriticalSection cs_vSend; + + std::deque vRecvGetData; + std::deque vRecvMsg; + CCriticalSection cs_vRecvMsg; + uint64_t nRecvBytes; + int nRecvVersion; + + int64_t nLastSend; + int64_t nLastRecv; + int64_t nLastSendEmpty; + int64_t nTimeConnected; + CAddress addr; + std::string addrName; + CService addrLocal; + int nVersion; + // 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; + bool fNetworkNode; + bool fSuccessfullyConnected; + bool fDisconnect; + // We use fRelayTxes for two purposes - + // a) it allows us to not relay tx invs before receiving the peer's version message + // b) the peer may tell us in their version message that we should not relay tx invs + // until they have initialized their bloom filter. + bool fRelayTxes; + CSemaphoreGrant grantOutbound; + 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 CCriticalSection cs_setBanned; + + // Basic fuzz-testing + void Fuzz(int nChance); // modifies ssSend + +public: + uint256 hashContinue; + CBlockIndex* pindexLastGetBlocksBegin; + uint256 hashLastGetBlocksEnd; + int nStartingHeight; + bool fStartSync; + + // flood relay + std::vector vAddrToSend; + mruset setAddrKnown; + bool fGetAddr; + std::set setKnown; + + // inventory based relay + mruset setInventoryKnown; + std::vector vInventoryToSend; + CCriticalSection cs_inventory; + std::multimap mapAskFor; + + // 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 = INIT_PROTO_VERSION; + nLastSend = 0; + nLastRecv = 0; + nSendBytes = 0; + nRecvBytes = 0; + nLastSendEmpty = GetTime(); + nTimeConnected = GetTime(); + addr = addrIn; + addrName = addrNameIn == "" ? addr.ToStringIPPort() : addrNameIn; + nVersion = 0; + strSubVer = ""; + fOneShot = false; + fClient = false; // set by version message + fInbound = fInboundIn; + fNetworkNode = false; + fSuccessfullyConnected = false; + fDisconnect = false; + nRefCount = 0; + nSendSize = 0; + nSendOffset = 0; + hashContinue = 0; + pindexLastGetBlocksBegin = 0; + hashLastGetBlocksEnd = 0; + nStartingHeight = -1; + fStartSync = false; + fGetAddr = false; + fRelayTxes = false; + setInventoryKnown.max_size(SendBufferSize() / 1000); + 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() + { + if (hSocket != INVALID_SOCKET) + { + closesocket(hSocket); + hSocket = INVALID_SOCKET; + } + 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() + { + assert(nRefCount >= 0); + return nRefCount; + } + + // requires LOCK(cs_vRecvMsg) + unsigned int GetTotalRecvSize() + { + unsigned int total = 0; + BOOST_FOREACH(const CNetMessage &msg, vRecvMsg) + total += msg.vRecv.size() + 24; + return total; + } + + // requires LOCK(cs_vRecvMsg) + bool ReceiveMsgBytes(const char *pch, unsigned int nBytes); + + // requires LOCK(cs_vRecvMsg) + void SetRecvVersion(int nVersionIn) + { + nRecvVersion = nVersionIn; + BOOST_FOREACH(CNetMessage &msg, vRecvMsg) + msg.SetVersion(nVersionIn); + } + + CNode* AddRef() + { + nRefCount++; + return this; + } + + void Release() + { + nRefCount--; + } + + + + void AddAddressKnown(const CAddress& addr) + { + setAddrKnown.insert(addr); + } + + void PushAddress(const CAddress& addr) + { + // Known checking here is only to save space from duplicates. + // SendMessages will filter it again for knowns that were added + // after addresses were pushed. + if (addr.IsValid() && !setAddrKnown.count(addr)) { + if (vAddrToSend.size() >= MAX_ADDR_TO_SEND) { + vAddrToSend[insecure_rand() % vAddrToSend.size()] = addr; + } else { + vAddrToSend.push_back(addr); + } + } + } + + + void AddInventoryKnown(const CInv& inv) + { + { + LOCK(cs_inventory); + setInventoryKnown.insert(inv); + } + } + + void PushInventory(const CInv& inv) + { + { + LOCK(cs_inventory); + if (!setInventoryKnown.count(inv)) + vInventoryToSend.push_back(inv); + } + } + + void AskFor(const CInv& inv) + { + if (mapAskFor.size() > MAPASKFOR_MAX_SZ) + return; + // We're using mapAskFor as a priority queue, + // the key is the earliest time the request can be sent + int64_t nRequestTime; + limitedmap::const_iterator it = mapAlreadyAskedFor.find(inv); + if (it != mapAlreadyAskedFor.end()) + nRequestTime = it->second; + else + nRequestTime = 0; + 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_t nNow = GetTimeMicros() - 1000000; + static int64_t nLastTime; + ++nLastTime; + nNow = std::max(nNow, nLastTime); + nLastTime = nNow; + + // Each retry is 2 minutes after the last + nRequestTime = std::max(nRequestTime + 2 * 60 * 1000000, nNow); + if (it != mapAlreadyAskedFor.end()) + mapAlreadyAskedFor.update(it, nRequestTime); + else + mapAlreadyAskedFor.insert(std::make_pair(inv, nRequestTime)); + mapAskFor.insert(std::make_pair(nRequestTime, inv)); + } + + + + // TODO: Document the postcondition of this function. Is cs_vSend locked? + void BeginMessage(const char* pszCommand) EXCLUSIVE_LOCK_FUNCTION(cs_vSend) + { + ENTER_CRITICAL_SECTION(cs_vSend); + assert(ssSend.size() == 0); + ssSend << CMessageHeader(pszCommand, 0); + LogPrint("net", "sending: %s ", pszCommand); + } + + // TODO: Document the precondition of this function. Is cs_vSend locked? + void AbortMessage() UNLOCK_FUNCTION(cs_vSend) + { + ssSend.clear(); + + LEAVE_CRITICAL_SECTION(cs_vSend); + + LogPrint("net", "(aborted)\n"); + } + + // TODO: Document the precondition of this function. Is cs_vSend locked? + void EndMessage() UNLOCK_FUNCTION(cs_vSend) + { + // 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) + { + LogPrint("net", "dropmessages DROPPING SEND MESSAGE\n"); + AbortMessage(); + return; + } + if (mapArgs.count("-fuzzmessagestest")) + Fuzz(GetArg("-fuzzmessagestest", 10)); + + if (ssSend.size() == 0) + return; + + // Set the size + unsigned int nSize = ssSend.size() - CMessageHeader::HEADER_SIZE; + memcpy((char*)&ssSend[CMessageHeader::MESSAGE_SIZE_OFFSET], &nSize, sizeof(nSize)); + + // Set the checksum + uint256 hash = Hash(ssSend.begin() + CMessageHeader::HEADER_SIZE, ssSend.end()); + unsigned int nChecksum = 0; + memcpy(&nChecksum, &hash, sizeof(nChecksum)); + assert(ssSend.size () >= CMessageHeader::CHECKSUM_OFFSET + sizeof(nChecksum)); + memcpy((char*)&ssSend[CMessageHeader::CHECKSUM_OFFSET], &nChecksum, sizeof(nChecksum)); + + LogPrint("net", "(%d bytes)\n", nSize); + + std::deque::iterator it = vSendMsg.insert(vSendMsg.end(), CSerializeData()); + ssSend.GetAndClear(*it); + nSendSize += (*it).size(); + + // If write queue empty, attempt "optimistic write" + if (it == vSendMsg.begin()) + SocketSendData(this); + + LEAVE_CRITICAL_SECTION(cs_vSend); + } + + void PushVersion(); + + + void PushMessage(const char* pszCommand) + { + try + { + BeginMessage(pszCommand); + EndMessage(); + } + catch (...) + { + AbortMessage(); + throw; + } + } + + template + void PushMessage(const char* pszCommand, const T1& a1) + { + try + { + BeginMessage(pszCommand); + ssSend << a1; + EndMessage(); + } + catch (...) + { + AbortMessage(); + throw; + } + } + + template + void PushMessage(const char* pszCommand, const T1& a1, const T2& a2) + { + try + { + BeginMessage(pszCommand); + ssSend << a1 << a2; + EndMessage(); + } + catch (...) + { + AbortMessage(); + throw; + } + } + + template + void PushMessage(const char* pszCommand, const T1& a1, const T2& a2, const T3& a3) + { + try + { + BeginMessage(pszCommand); + ssSend << a1 << a2 << a3; + EndMessage(); + } + catch (...) + { + AbortMessage(); + throw; + } + } + + template + void PushMessage(const char* pszCommand, const T1& a1, const T2& a2, const T3& a3, const T4& a4) + { + try + { + BeginMessage(pszCommand); + ssSend << a1 << a2 << a3 << a4; + EndMessage(); + } + catch (...) + { + AbortMessage(); + throw; + } + } + + template + void PushMessage(const char* pszCommand, const T1& a1, const T2& a2, const T3& a3, const T4& a4, const T5& a5) + { + try + { + BeginMessage(pszCommand); + ssSend << a1 << a2 << a3 << a4 << a5; + EndMessage(); + } + catch (...) + { + AbortMessage(); + throw; + } + } + + template + void PushMessage(const char* pszCommand, const T1& a1, const T2& a2, const T3& a3, const T4& a4, const T5& a5, const T6& a6) + { + try + { + BeginMessage(pszCommand); + ssSend << a1 << a2 << a3 << a4 << a5 << a6; + EndMessage(); + } + catch (...) + { + AbortMessage(); + throw; + } + } + + template + void PushMessage(const char* pszCommand, const T1& a1, const T2& a2, const T3& a3, const T4& a4, const T5& a5, const T6& a6, const T7& a7) + { + try + { + BeginMessage(pszCommand); + ssSend << a1 << a2 << a3 << a4 << a5 << a6 << a7; + EndMessage(); + } + catch (...) + { + AbortMessage(); + throw; + } + } + + template + void PushMessage(const char* pszCommand, const T1& a1, const T2& a2, const T3& a3, const T4& a4, const T5& a5, const T6& a6, const T7& a7, const T8& a8) + { + try + { + BeginMessage(pszCommand); + ssSend << a1 << a2 << a3 << a4 << a5 << a6 << a7 << a8; + EndMessage(); + } + catch (...) + { + AbortMessage(); + throw; + } + } + + template + void PushMessage(const char* pszCommand, const T1& a1, const T2& a2, const T3& a3, const T4& a4, const T5& a5, const T6& a6, const T7& a7, const T8& a8, const T9& a9) + { + try + { + BeginMessage(pszCommand); + ssSend << a1 << a2 << a3 << a4 << a5 << a6 << a7 << a8 << a9; + EndMessage(); + } + catch (...) + { + AbortMessage(); + throw; + } + } + + bool IsSubscribed(unsigned int nChannel); + void Subscribe(unsigned int nChannel, unsigned int nHops=0); + void CancelSubscribe(unsigned int nChannel); + void CloseSocketDisconnect(); + void Cleanup(); + + + // Denial-of-service detection/prevention + // The idea is to detect peers that are behaving + // badly and disconnect/ban them, but do it in a + // one-coding-mistake-won't-shatter-the-entire-network + // way. + // IMPORTANT: There should be nothing I can give a + // node that it will forward on that will make that + // node's peers drop it. If there is, an attacker + // can isolate a node and/or try to split the network. + // Dropping a node for sending stuff that is invalid + // now but might be valid in a later version is also + // dangerous, because it can cause a network split + // between nodes running old code and nodes running + // new code. + static void ClearBanned(); // needed for unit testing + static bool IsBanned(CNetAddr ip); + 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(); +}; + + + +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 40cb507..78bfea0 100644 --- a/src/netbase.cpp +++ b/src/netbase.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/netbase.cpp~ b/src/netbase.cpp~ new file mode 100644 index 0000000..4324cca --- /dev/null +++ b/src/netbase.cpp~ @@ -0,0 +1,1159 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "hash.h" +#include "sync.h" +#include "uint256.h" +#include "util.h" + +#ifndef WIN32 +#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 +static proxyType proxyInfo[NET_MAX]; +static proxyType nameproxyInfo; +static CCriticalSection cs_proxyInfos; +int nConnectTimeout = 5000; +bool fNameLookup = false; + +static const unsigned char pchIPv4[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff }; + +enum Network ParseNetwork(std::string net) { + boost::to_lower(net); + if (net == "ipv4") return NET_IPV4; + if (net == "ipv6") return NET_IPV6; + if (net == "tor") return NET_TOR; + return NET_UNROUTABLE; +} + +void SplitHostPort(std::string in, int &portOut, std::string &hostOut) { + size_t colon = in.find_last_of(':'); + // if a : is found, and it either follows a [...], or no other : is in the string, treat it as port separator + bool fHaveColon = colon != in.npos; + bool fBracketed = fHaveColon && (in[0]=='[' && in[colon-1]==']'); // if there is a colon, and in[0]=='[', colon is not 0, so in[colon-1] is safe + bool fMultiColon = fHaveColon && (in.find_last_of(':',colon-1) != in.npos); + if (fHaveColon && (colon==0 || fBracketed || !fMultiColon)) { + char *endp = NULL; + int n = strtol(in.c_str() + colon + 1, &endp, 10); + if (endp && *endp == 0 && n >= 0) { + in = in.substr(0, colon); + if (n > 0 && n < 0x10000) + portOut = n; + } + } + if (in.size()>0 && in[0] == '[' && in[in.size()-1] == ']') + hostOut = in.substr(1, in.size()-2); + else + hostOut = in; +} + +bool static LookupIntern(const char *pszName, std::vector& vIP, unsigned int nMaxSolutions, bool fAllowLookup) +{ + vIP.clear(); + + { + CNetAddr addr; + if (addr.SetSpecial(std::string(pszName))) { + vIP.push_back(addr); + return true; + } + } + + struct addrinfo aiHint; + memset(&aiHint, 0, sizeof(struct addrinfo)); + + aiHint.ai_socktype = SOCK_STREAM; + aiHint.ai_protocol = IPPROTO_TCP; + aiHint.ai_family = AF_UNSPEC; +#ifdef WIN32 + aiHint.ai_flags = fAllowLookup ? 0 : AI_NUMERICHOST; +#else + aiHint.ai_flags = fAllowLookup ? AI_ADDRCONFIG : AI_NUMERICHOST; +#endif + struct addrinfo *aiRes = NULL; + int nErr = getaddrinfo(pszName, NULL, &aiHint, &aiRes); + if (nErr) + return false; + + struct addrinfo *aiTrav = aiRes; + while (aiTrav != NULL && (nMaxSolutions == 0 || vIP.size() < nMaxSolutions)) + { + if (aiTrav->ai_family == AF_INET) + { + assert(aiTrav->ai_addrlen >= sizeof(sockaddr_in)); + vIP.push_back(CNetAddr(((struct sockaddr_in*)(aiTrav->ai_addr))->sin_addr)); + } + + 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)); + } + + aiTrav = aiTrav->ai_next; + } + + freeaddrinfo(aiRes); + + return (vIP.size() > 0); +} + +bool LookupHost(const char *pszName, std::vector& vIP, unsigned int nMaxSolutions, bool fAllowLookup) +{ + std::string strHost(pszName); + if (strHost.empty()) + return false; + if (boost::algorithm::starts_with(strHost, "[") && boost::algorithm::ends_with(strHost, "]")) + { + strHost = strHost.substr(1, strHost.size() - 2); + } + + return LookupIntern(strHost.c_str(), vIP, nMaxSolutions, fAllowLookup); +} + +bool LookupHostNumeric(const char *pszName, std::vector& vIP, unsigned int nMaxSolutions) +{ + return LookupHost(pszName, vIP, nMaxSolutions, false); +} + +bool Lookup(const char *pszName, std::vector& vAddr, int portDefault, bool fAllowLookup, unsigned int nMaxSolutions) +{ + if (pszName[0] == 0) + return false; + int port = portDefault; + std::string hostname = ""; + SplitHostPort(std::string(pszName), port, hostname); + + std::vector vIP; + bool fRet = LookupIntern(hostname.c_str(), vIP, nMaxSolutions, fAllowLookup); + if (!fRet) + return false; + vAddr.resize(vIP.size()); + for (unsigned int i = 0; i < vIP.size(); i++) + vAddr[i] = CService(vIP[i], port); + return true; +} + +bool Lookup(const char *pszName, CService& addr, int portDefault, bool fAllowLookup) +{ + std::vector vService; + bool fRet = Lookup(pszName, vService, portDefault, fAllowLookup, 1); + if (!fRet) + return false; + addr = vService[0]; + return true; +} + +bool LookupNumeric(const char *pszName, CService& addr, int portDefault) +{ + return Lookup(pszName, addr, portDefault, false); +} + +bool static Socks4(const CService &addrDest, SOCKET& hSocket) +{ + LogPrintf("SOCKS4 connecting %s\n", addrDest.ToString()); + if (!addrDest.IsIPv4()) + { + closesocket(hSocket); + return error("Proxy destination is not IPv4"); + } + char pszSocks4IP[] = "\4\1\0\0\0\0\0\0user"; + struct sockaddr_in addr; + socklen_t len = sizeof(addr); + if (!addrDest.GetSockAddr((struct sockaddr*)&addr, &len) || addr.sin_family != AF_INET) + { + closesocket(hSocket); + return error("Cannot get proxy destination address"); + } + memcpy(pszSocks4IP + 2, &addr.sin_port, 2); + memcpy(pszSocks4IP + 4, &addr.sin_addr, 4); + char* pszSocks4 = pszSocks4IP; + int nSize = sizeof(pszSocks4IP); + + int ret = send(hSocket, pszSocks4, nSize, MSG_NOSIGNAL); + if (ret != nSize) + { + closesocket(hSocket); + return error("Error sending to proxy"); + } + char pchRet[8]; + if (recv(hSocket, pchRet, 8, 0) != 8) + { + closesocket(hSocket); + return error("Error reading proxy response"); + } + if (pchRet[1] != 0x5a) + { + closesocket(hSocket); + if (pchRet[1] != 0x5b) + LogPrintf("ERROR: Proxy returned error %d\n", pchRet[1]); + return false; + } + LogPrintf("SOCKS4 connected %s\n", addrDest.ToString()); + return true; +} + +bool static Socks5(string strDest, int port, SOCKET& hSocket) +{ + LogPrintf("SOCKS5 connecting %s\n", strDest); + if (strDest.size() > 255) + { + closesocket(hSocket); + return error("Hostname too long"); + } + char pszSocks5Init[] = "\5\1\0"; + ssize_t nSize = sizeof(pszSocks5Init) - 1; + + ssize_t ret = send(hSocket, pszSocks5Init, nSize, MSG_NOSIGNAL); + if (ret != nSize) + { + closesocket(hSocket); + return error("Error sending to proxy"); + } + char pchRet1[2]; + if (recv(hSocket, pchRet1, 2, 0) != 2) + { + closesocket(hSocket); + return error("Error reading proxy response"); + } + if (pchRet1[0] != 0x05 || pchRet1[1] != 0x00) + { + closesocket(hSocket); + return error("Proxy failed to initialize"); + } + string strSocks5("\5\1"); + strSocks5 += '\000'; strSocks5 += '\003'; + strSocks5 += static_cast(std::min((int)strDest.size(), 255)); + strSocks5 += strDest; + strSocks5 += static_cast((port >> 8) & 0xFF); + strSocks5 += static_cast((port >> 0) & 0xFF); + ret = send(hSocket, strSocks5.c_str(), strSocks5.size(), MSG_NOSIGNAL); + if (ret != (ssize_t)strSocks5.size()) + { + closesocket(hSocket); + return error("Error sending to proxy"); + } + char pchRet2[4]; + if (recv(hSocket, pchRet2, 4, 0) != 4) + { + closesocket(hSocket); + return error("Error reading proxy response"); + } + if (pchRet2[0] != 0x05) + { + closesocket(hSocket); + return error("Proxy failed to accept request"); + } + if (pchRet2[1] != 0x00) + { + closesocket(hSocket); + switch (pchRet2[1]) + { + case 0x01: return error("Proxy error: general failure"); + case 0x02: return error("Proxy error: connection not allowed"); + case 0x03: return error("Proxy error: network unreachable"); + case 0x04: return error("Proxy error: host unreachable"); + case 0x05: return error("Proxy error: connection refused"); + case 0x06: return error("Proxy error: TTL expired"); + case 0x07: return error("Proxy error: protocol error"); + case 0x08: return error("Proxy error: address type not supported"); + default: return error("Proxy error: unknown"); + } + } + if (pchRet2[2] != 0x00) + { + closesocket(hSocket); + return error("Error: malformed proxy response"); + } + char pchRet3[256]; + switch (pchRet2[3]) + { + case 0x01: ret = recv(hSocket, pchRet3, 4, 0) != 4; break; + case 0x04: ret = recv(hSocket, pchRet3, 16, 0) != 16; break; + case 0x03: + { + ret = recv(hSocket, pchRet3, 1, 0) != 1; + if (ret) { + closesocket(hSocket); + return error("Error reading from proxy"); + } + int nRecv = pchRet3[0]; + ret = recv(hSocket, pchRet3, nRecv, 0) != nRecv; + break; + } + default: closesocket(hSocket); return error("Error: malformed proxy response"); + } + if (ret) + { + closesocket(hSocket); + return error("Error reading from proxy"); + } + if (recv(hSocket, pchRet3, 2, 0) != 2) + { + closesocket(hSocket); + return error("Error reading from proxy"); + } + LogPrintf("SOCKS5 connected %s\n", strDest); + return true; +} + +bool static ConnectSocketDirectly(const CService &addrConnect, SOCKET& hSocketRet, int nTimeout) +{ + hSocketRet = INVALID_SOCKET; + + struct sockaddr_storage sockaddr; + socklen_t len = sizeof(sockaddr); + if (!addrConnect.GetSockAddr((struct sockaddr*)&sockaddr, &len)) { + LogPrintf("Cannot connect to %s: unsupported network\n", addrConnect.ToString()); + return false; + } + + SOCKET hSocket = socket(((struct sockaddr*)&sockaddr)->sa_family, SOCK_STREAM, IPPROTO_TCP); + if (hSocket == INVALID_SOCKET) + return false; +#ifdef SO_NOSIGPIPE + int set = 1; + setsockopt(hSocket, SOL_SOCKET, SO_NOSIGPIPE, (void*)&set, sizeof(int)); +#endif + +#ifdef WIN32 + u_long fNonblock = 1; + if (ioctlsocket(hSocket, FIONBIO, &fNonblock) == SOCKET_ERROR) +#else + int fFlags = fcntl(hSocket, F_GETFL, 0); + if (fcntl(hSocket, F_SETFL, fFlags | O_NONBLOCK) == -1) +#endif + { + closesocket(hSocket); + return false; + } + + if (connect(hSocket, (struct sockaddr*)&sockaddr, len) == SOCKET_ERROR) + { + // WSAEINVAL is here because some legacy version of winsock uses it + if (WSAGetLastError() == WSAEINPROGRESS || WSAGetLastError() == WSAEWOULDBLOCK || WSAGetLastError() == WSAEINVAL) + { + struct timeval timeout; + timeout.tv_sec = nTimeout / 1000; + timeout.tv_usec = (nTimeout % 1000) * 1000; + + fd_set fdset; + FD_ZERO(&fdset); + FD_SET(hSocket, &fdset); + int nRet = select(hSocket + 1, NULL, &fdset, NULL, &timeout); + if (nRet == 0) + { + LogPrint("net", "connection to %s timeout\n", addrConnect.ToString()); + closesocket(hSocket); + return false; + } + if (nRet == SOCKET_ERROR) + { + LogPrintf("select() for %s failed: %s\n", addrConnect.ToString(), NetworkErrorString(WSAGetLastError())); + closesocket(hSocket); + return false; + } + socklen_t nRetSize = sizeof(nRet); +#ifdef WIN32 + if (getsockopt(hSocket, SOL_SOCKET, SO_ERROR, (char*)(&nRet), &nRetSize) == SOCKET_ERROR) +#else + if (getsockopt(hSocket, SOL_SOCKET, SO_ERROR, &nRet, &nRetSize) == SOCKET_ERROR) +#endif + { + LogPrintf("getsockopt() for %s failed: %s\n", addrConnect.ToString(), NetworkErrorString(WSAGetLastError())); + closesocket(hSocket); + return false; + } + if (nRet != 0) + { + LogPrintf("connect() to %s failed after select(): %s\n", addrConnect.ToString(), NetworkErrorString(nRet)); + closesocket(hSocket); + return false; + } + } +#ifdef WIN32 + else if (WSAGetLastError() != WSAEISCONN) +#else + else +#endif + { + LogPrintf("connect() to %s failed: %s\n", addrConnect.ToString(), NetworkErrorString(WSAGetLastError())); + closesocket(hSocket); + return false; + } + } + + // this isn't even strictly necessary + // CNode::ConnectNode immediately turns the socket back to non-blocking + // but we'll turn it back to blocking just in case +#ifdef WIN32 + fNonblock = 0; + if (ioctlsocket(hSocket, FIONBIO, &fNonblock) == SOCKET_ERROR) +#else + fFlags = fcntl(hSocket, F_GETFL, 0); + if (fcntl(hSocket, F_SETFL, fFlags & ~O_NONBLOCK) == SOCKET_ERROR) +#endif + { + closesocket(hSocket); + return false; + } + + hSocketRet = hSocket; + return true; +} + +bool SetProxy(enum Network net, CService addrProxy, int nSocksVersion) { + assert(net >= 0 && net < NET_MAX); + if (nSocksVersion != 0 && nSocksVersion != 4 && nSocksVersion != 5) + return false; + if (nSocksVersion != 0 && !addrProxy.IsValid()) + return false; + LOCK(cs_proxyInfos); + proxyInfo[net] = std::make_pair(addrProxy, nSocksVersion); + return true; +} + +bool GetProxy(enum Network net, proxyType &proxyInfoOut) { + assert(net >= 0 && net < NET_MAX); + LOCK(cs_proxyInfos); + if (!proxyInfo[net].second) + return false; + proxyInfoOut = proxyInfo[net]; + return true; +} + +bool SetNameProxy(CService addrProxy, int nSocksVersion) { + if (nSocksVersion != 0 && nSocksVersion != 5) + return false; + if (nSocksVersion != 0 && !addrProxy.IsValid()) + return false; + LOCK(cs_proxyInfos); + nameproxyInfo = std::make_pair(addrProxy, nSocksVersion); + return true; +} + +bool GetNameProxy(proxyType &nameproxyInfoOut) { + LOCK(cs_proxyInfos); + if (!nameproxyInfo.second) + return false; + nameproxyInfoOut = nameproxyInfo; + return true; +} + +bool HaveNameProxy() { + LOCK(cs_proxyInfos); + return nameproxyInfo.second != 0; +} + +bool IsProxy(const CNetAddr &addr) { + LOCK(cs_proxyInfos); + for (int i = 0; i < NET_MAX; i++) { + if (proxyInfo[i].second && (addr == (CNetAddr)proxyInfo[i].first)) + return true; + } + return false; +} + +bool ConnectSocket(const CService &addrDest, SOCKET& hSocketRet, int nTimeout) +{ + proxyType proxy; + + // no proxy needed + if (!GetProxy(addrDest.GetNetwork(), proxy)) + return ConnectSocketDirectly(addrDest, hSocketRet, nTimeout); + + SOCKET hSocket = INVALID_SOCKET; + + // first connect to proxy server + if (!ConnectSocketDirectly(proxy.first, hSocket, nTimeout)) + return false; + + // do socks negotiation + switch (proxy.second) { + case 4: + if (!Socks4(addrDest, hSocket)) + return false; + break; + case 5: + if (!Socks5(addrDest.ToStringIP(), addrDest.GetPort(), hSocket)) + return false; + break; + default: + closesocket(hSocket); + return false; + } + + hSocketRet = hSocket; + return true; +} + +bool ConnectSocketByName(CService &addr, SOCKET& hSocketRet, const char *pszDest, int portDefault, int nTimeout) +{ + string strDest; + int port = portDefault; + SplitHostPort(string(pszDest), port, strDest); + + SOCKET hSocket = INVALID_SOCKET; + + proxyType nameproxy; + GetNameProxy(nameproxy); + + CService addrResolved(CNetAddr(strDest, fNameLookup && !nameproxy.second), port); + if (addrResolved.IsValid()) { + addr = addrResolved; + return ConnectSocket(addr, hSocketRet, nTimeout); + } + addr = CService("0.0.0.0:0"); + if (!nameproxy.second) + return false; + if (!ConnectSocketDirectly(nameproxy.first, hSocket, nTimeout)) + return false; + + switch(nameproxy.second) { + default: + case 4: + closesocket(hSocket); + return false; + case 5: + if (!Socks5(strDest, port, hSocket)) + return false; + break; + } + + hSocketRet = hSocket; + return true; +} + +void CNetAddr::Init() +{ + memset(ip, 0, sizeof(ip)); +} + +void CNetAddr::SetIP(const CNetAddr& ipIn) +{ + memcpy(ip, ipIn.ip, sizeof(ip)); +} + +static const unsigned char pchOnionCat[] = {0xFD,0x87,0xD8,0x7E,0xEB,0x43}; + +bool CNetAddr::SetSpecial(const std::string &strName) +{ + if (strName.size()>6 && strName.substr(strName.size() - 6, 6) == ".onion") { + std::vector vchAddr = DecodeBase32(strName.substr(0, strName.size() - 6).c_str()); + if (vchAddr.size() != 16-sizeof(pchOnionCat)) + return false; + memcpy(ip, pchOnionCat, sizeof(pchOnionCat)); + for (unsigned int i=0; i<16-sizeof(pchOnionCat); i++) + ip[i + sizeof(pchOnionCat)] = vchAddr[i]; + return true; + } + return false; +} + +CNetAddr::CNetAddr() +{ + Init(); +} + +CNetAddr::CNetAddr(const struct in_addr& ipv4Addr) +{ + memcpy(ip, pchIPv4, 12); + memcpy(ip+12, &ipv4Addr, 4); +} + +CNetAddr::CNetAddr(const struct in6_addr& ipv6Addr) +{ + memcpy(ip, &ipv6Addr, 16); +} + +CNetAddr::CNetAddr(const char *pszIp, bool fAllowLookup) +{ + Init(); + std::vector vIP; + if (LookupHost(pszIp, vIP, 1, fAllowLookup)) + *this = vIP[0]; +} + +CNetAddr::CNetAddr(const std::string &strIp, bool fAllowLookup) +{ + Init(); + std::vector vIP; + if (LookupHost(strIp.c_str(), vIP, 1, fAllowLookup)) + *this = vIP[0]; +} + +unsigned int CNetAddr::GetByte(int n) const +{ + return ip[15-n]; +} + +bool CNetAddr::IsIPv4() const +{ + return (memcmp(ip, pchIPv4, sizeof(pchIPv4)) == 0); +} + +bool CNetAddr::IsIPv6() const +{ + return (!IsIPv4() && !IsTor()); +} + +bool CNetAddr::IsRFC1918() const +{ + return IsIPv4() && ( + GetByte(3) == 10 || + (GetByte(3) == 192 && GetByte(2) == 168) || + (GetByte(3) == 172 && (GetByte(2) >= 16 && GetByte(2) <= 31))); +} + +bool CNetAddr::IsRFC3927() const +{ + return IsIPv4() && (GetByte(3) == 169 && GetByte(2) == 254); +} + +bool CNetAddr::IsRFC3849() const +{ + return GetByte(15) == 0x20 && GetByte(14) == 0x01 && GetByte(13) == 0x0D && GetByte(12) == 0xB8; +} + +bool CNetAddr::IsRFC3964() const +{ + return (GetByte(15) == 0x20 && GetByte(14) == 0x02); +} + +bool CNetAddr::IsRFC6052() const +{ + static const unsigned char pchRFC6052[] = {0,0x64,0xFF,0x9B,0,0,0,0,0,0,0,0}; + return (memcmp(ip, pchRFC6052, sizeof(pchRFC6052)) == 0); +} + +bool CNetAddr::IsRFC4380() const +{ + return (GetByte(15) == 0x20 && GetByte(14) == 0x01 && GetByte(13) == 0 && GetByte(12) == 0); +} + +bool CNetAddr::IsRFC4862() const +{ + static const unsigned char pchRFC4862[] = {0xFE,0x80,0,0,0,0,0,0}; + return (memcmp(ip, pchRFC4862, sizeof(pchRFC4862)) == 0); +} + +bool CNetAddr::IsRFC4193() const +{ + return ((GetByte(15) & 0xFE) == 0xFC); +} + +bool CNetAddr::IsRFC6145() const +{ + static const unsigned char pchRFC6145[] = {0,0,0,0,0,0,0,0,0xFF,0xFF,0,0}; + return (memcmp(ip, pchRFC6145, sizeof(pchRFC6145)) == 0); +} + +bool CNetAddr::IsRFC4843() const +{ + return (GetByte(15) == 0x20 && GetByte(14) == 0x01 && GetByte(13) == 0x00 && (GetByte(12) & 0xF0) == 0x10); +} + +bool CNetAddr::IsTor() const +{ + return (memcmp(ip, pchOnionCat, sizeof(pchOnionCat)) == 0); +} + +bool CNetAddr::IsLocal() const +{ + // IPv4 loopback + if (IsIPv4() && (GetByte(3) == 127 || GetByte(3) == 0)) + return true; + + // IPv6 loopback (::1/128) + static const unsigned char pchLocal[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1}; + if (memcmp(ip, pchLocal, 16) == 0) + return true; + + return false; +} + +bool CNetAddr::IsMulticast() const +{ + return (IsIPv4() && (GetByte(3) & 0xF0) == 0xE0) + || (GetByte(15) == 0xFF); +} + +bool CNetAddr::IsValid() const +{ + // Cleanup 3-byte shifted addresses caused by garbage in size field + // of addr messages from versions before 0.2.9 checksum. + // Two consecutive addr messages look like this: + // header20 vectorlen3 addr26 addr26 addr26 header20 vectorlen3 addr26 addr26 addr26... + // so if the first length field is garbled, it reads the second batch + // of addr misaligned by 3 bytes. + if (memcmp(ip, pchIPv4+3, sizeof(pchIPv4)-3) == 0) + return false; + + // unspecified IPv6 address (::/128) + unsigned char ipNone[16] = {}; + if (memcmp(ip, ipNone, 16) == 0) + return false; + + // documentation IPv6 address + if (IsRFC3849()) + return false; + + if (IsIPv4()) + { + // INADDR_NONE + uint32_t ipNone = INADDR_NONE; + if (memcmp(ip+12, &ipNone, 4) == 0) + return false; + + // 0 + ipNone = 0; + if (memcmp(ip+12, &ipNone, 4) == 0) + return false; + } + + return true; +} + +bool CNetAddr::IsRoutable() const +{ + return IsValid() && !(IsRFC1918() || IsRFC3927() || IsRFC4862() || (IsRFC4193() && !IsTor()) || IsRFC4843() || IsLocal()); +} + +enum Network CNetAddr::GetNetwork() const +{ + if (!IsRoutable()) + return NET_UNROUTABLE; + + if (IsIPv4()) + return NET_IPV4; + + if (IsTor()) + return NET_TOR; + + return NET_IPV6; +} + +std::string CNetAddr::ToStringIP() const +{ + if (IsTor()) + return EncodeBase32(&ip[6], 10) + ".onion"; + CService serv(*this, 0); + struct sockaddr_storage sockaddr; + socklen_t socklen = sizeof(sockaddr); + if (serv.GetSockAddr((struct sockaddr*)&sockaddr, &socklen)) { + char name[1025] = ""; + if (!getnameinfo((const struct sockaddr*)&sockaddr, socklen, name, sizeof(name), NULL, 0, NI_NUMERICHOST)) + return std::string(name); + } + if (IsIPv4()) + return strprintf("%u.%u.%u.%u", GetByte(3), GetByte(2), GetByte(1), GetByte(0)); + else + return strprintf("%x:%x:%x:%x:%x:%x:%x:%x", + GetByte(15) << 8 | GetByte(14), GetByte(13) << 8 | GetByte(12), + GetByte(11) << 8 | GetByte(10), GetByte(9) << 8 | GetByte(8), + GetByte(7) << 8 | GetByte(6), GetByte(5) << 8 | GetByte(4), + GetByte(3) << 8 | GetByte(2), GetByte(1) << 8 | GetByte(0)); +} + +std::string CNetAddr::ToString() const +{ + return ToStringIP(); +} + +bool operator==(const CNetAddr& a, const CNetAddr& b) +{ + return (memcmp(a.ip, b.ip, 16) == 0); +} + +bool operator!=(const CNetAddr& a, const CNetAddr& b) +{ + return (memcmp(a.ip, b.ip, 16) != 0); +} + +bool operator<(const CNetAddr& a, const CNetAddr& b) +{ + return (memcmp(a.ip, b.ip, 16) < 0); +} + +bool CNetAddr::GetInAddr(struct in_addr* pipv4Addr) const +{ + if (!IsIPv4()) + return false; + memcpy(pipv4Addr, ip+12, 4); + return true; +} + +bool CNetAddr::GetIn6Addr(struct in6_addr* pipv6Addr) const +{ + memcpy(pipv6Addr, ip, 16); + return true; +} + +// get canonical identifier of an address' group +// no two connections will be attempted to addresses with the same group +std::vector CNetAddr::GetGroup() const +{ + std::vector vchRet; + int nClass = NET_IPV6; + int nStartByte = 0; + int nBits = 16; + + // all local addresses belong to the same group + if (IsLocal()) + { + nClass = 255; + nBits = 0; + } + + // all unroutable addresses belong to the same group + if (!IsRoutable()) + { + nClass = NET_UNROUTABLE; + nBits = 0; + } + // for IPv4 addresses, '1' + the 16 higher-order bits of the IP + // includes mapped IPv4, SIIT translated IPv4, and the well-known prefix + else if (IsIPv4() || IsRFC6145() || IsRFC6052()) + { + nClass = NET_IPV4; + nStartByte = 12; + } + // for 6to4 tunnelled addresses, use the encapsulated IPv4 address + else if (IsRFC3964()) + { + nClass = NET_IPV4; + nStartByte = 2; + } + // for Teredo-tunnelled IPv6 addresses, use the encapsulated IPv4 address + else if (IsRFC4380()) + { + vchRet.push_back(NET_IPV4); + vchRet.push_back(GetByte(3) ^ 0xFF); + vchRet.push_back(GetByte(2) ^ 0xFF); + return vchRet; + } + else if (IsTor()) + { + nClass = NET_TOR; + nStartByte = 6; + nBits = 4; + } + // for he.net, use /36 groups + 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 + nBits = 32; + + vchRet.push_back(nClass); + while (nBits >= 8) + { + vchRet.push_back(GetByte(15 - nStartByte)); + nStartByte++; + nBits -= 8; + } + if (nBits > 0) + vchRet.push_back(GetByte(15 - nStartByte) | ((1 << nBits) - 1)); + + return vchRet; +} + +uint64_t CNetAddr::GetHash() const +{ + uint256 hash = Hash(&ip[0], &ip[16]); + uint64_t nRet; + memcpy(&nRet, &hash, sizeof(nRet)); + return nRet; +} + +void CNetAddr::print() const +{ + LogPrintf("CNetAddr(%s)\n", ToString()); +} + +// private extensions to enum Network, only returned by GetExtNetwork, +// and only used in GetReachabilityFrom +static const int NET_UNKNOWN = NET_MAX + 0; +static const int NET_TEREDO = NET_MAX + 1; +int static GetExtNetwork(const CNetAddr *addr) +{ + if (addr == NULL) + return NET_UNKNOWN; + if (addr->IsRFC4380()) + return NET_TEREDO; + return addr->GetNetwork(); +} + +/** Calculates a metric for how reachable (*this) is from a given partner */ +int CNetAddr::GetReachabilityFrom(const CNetAddr *paddrPartner) const +{ + enum Reachability { + REACH_UNREACHABLE, + REACH_DEFAULT, + REACH_TEREDO, + REACH_IPV6_WEAK, + REACH_IPV4, + REACH_IPV6_STRONG, + REACH_PRIVATE + }; + + if (!IsRoutable()) + return REACH_UNREACHABLE; + + int ourNet = GetExtNetwork(this); + int theirNet = GetExtNetwork(paddrPartner); + bool fTunnel = IsRFC3964() || IsRFC6052() || IsRFC6145(); + + switch(theirNet) { + case NET_IPV4: + switch(ourNet) { + default: return REACH_DEFAULT; + case NET_IPV4: return REACH_IPV4; + } + case NET_IPV6: + switch(ourNet) { + default: return REACH_DEFAULT; + case NET_TEREDO: return REACH_TEREDO; + case NET_IPV4: return REACH_IPV4; + case NET_IPV6: return fTunnel ? REACH_IPV6_WEAK : REACH_IPV6_STRONG; // only prefer giving our IPv6 address if it's not tunnelled + } + case NET_TOR: + switch(ourNet) { + default: return REACH_DEFAULT; + case NET_IPV4: return REACH_IPV4; // Tor users can connect to IPv4 as well + case NET_TOR: return REACH_PRIVATE; + } + case NET_TEREDO: + switch(ourNet) { + default: return REACH_DEFAULT; + case NET_TEREDO: return REACH_TEREDO; + case NET_IPV6: return REACH_IPV6_WEAK; + case NET_IPV4: return REACH_IPV4; + } + case NET_UNKNOWN: + case NET_UNROUTABLE: + default: + switch(ourNet) { + default: return REACH_DEFAULT; + case NET_TEREDO: return REACH_TEREDO; + case NET_IPV6: return REACH_IPV6_WEAK; + case NET_IPV4: return REACH_IPV4; + case NET_TOR: return REACH_PRIVATE; // either from Tor, or don't care about our address + } + } +} + +void CService::Init() +{ + port = 0; +} + +CService::CService() +{ + Init(); +} + +CService::CService(const CNetAddr& cip, unsigned short portIn) : CNetAddr(cip), port(portIn) +{ +} + +CService::CService(const struct in_addr& ipv4Addr, unsigned short portIn) : CNetAddr(ipv4Addr), port(portIn) +{ +} + +CService::CService(const struct in6_addr& ipv6Addr, unsigned short portIn) : CNetAddr(ipv6Addr), port(portIn) +{ +} + +CService::CService(const struct sockaddr_in& addr) : CNetAddr(addr.sin_addr), port(ntohs(addr.sin_port)) +{ + assert(addr.sin_family == AF_INET); +} + +CService::CService(const struct sockaddr_in6 &addr) : CNetAddr(addr.sin6_addr), port(ntohs(addr.sin6_port)) +{ + assert(addr.sin6_family == AF_INET6); +} + +bool CService::SetSockAddr(const struct sockaddr *paddr) +{ + switch (paddr->sa_family) { + case AF_INET: + *this = CService(*(const struct sockaddr_in*)paddr); + return true; + case AF_INET6: + *this = CService(*(const struct sockaddr_in6*)paddr); + return true; + default: + return false; + } +} + +CService::CService(const char *pszIpPort, bool fAllowLookup) +{ + Init(); + CService ip; + if (Lookup(pszIpPort, ip, 0, fAllowLookup)) + *this = ip; +} + +CService::CService(const char *pszIpPort, int portDefault, bool fAllowLookup) +{ + Init(); + CService ip; + if (Lookup(pszIpPort, ip, portDefault, fAllowLookup)) + *this = ip; +} + +CService::CService(const std::string &strIpPort, bool fAllowLookup) +{ + Init(); + CService ip; + if (Lookup(strIpPort.c_str(), ip, 0, fAllowLookup)) + *this = ip; +} + +CService::CService(const std::string &strIpPort, int portDefault, bool fAllowLookup) +{ + Init(); + CService ip; + if (Lookup(strIpPort.c_str(), ip, portDefault, fAllowLookup)) + *this = ip; +} + +unsigned short CService::GetPort() const +{ + return port; +} + +bool operator==(const CService& a, const CService& b) +{ + return (CNetAddr)a == (CNetAddr)b && a.port == b.port; +} + +bool operator!=(const CService& a, const CService& b) +{ + return (CNetAddr)a != (CNetAddr)b || a.port != b.port; +} + +bool operator<(const CService& a, const CService& b) +{ + return (CNetAddr)a < (CNetAddr)b || ((CNetAddr)a == (CNetAddr)b && a.port < b.port); +} + +bool CService::GetSockAddr(struct sockaddr* paddr, socklen_t *addrlen) const +{ + if (IsIPv4()) { + if (*addrlen < (socklen_t)sizeof(struct sockaddr_in)) + return false; + *addrlen = sizeof(struct sockaddr_in); + struct sockaddr_in *paddrin = (struct sockaddr_in*)paddr; + memset(paddrin, 0, *addrlen); + if (!GetInAddr(&paddrin->sin_addr)) + return false; + paddrin->sin_family = AF_INET; + paddrin->sin_port = htons(port); + return true; + } + if (IsIPv6()) { + if (*addrlen < (socklen_t)sizeof(struct sockaddr_in6)) + return false; + *addrlen = sizeof(struct sockaddr_in6); + struct sockaddr_in6 *paddrin6 = (struct sockaddr_in6*)paddr; + memset(paddrin6, 0, *addrlen); + if (!GetIn6Addr(&paddrin6->sin6_addr)) + return false; + paddrin6->sin6_family = AF_INET6; + paddrin6->sin6_port = htons(port); + return true; + } + return false; +} + +std::vector CService::GetKey() const +{ + std::vector vKey; + vKey.resize(18); + memcpy(&vKey[0], ip, 16); + vKey[16] = port / 0x100; + vKey[17] = port & 0x0FF; + return vKey; +} + +std::string CService::ToStringPort() const +{ + return strprintf("%u", port); +} + +std::string CService::ToStringIPPort() const +{ + if (IsIPv4() || IsTor()) { + return ToStringIP() + ":" + ToStringPort(); + } else { + return "[" + ToStringIP() + "]:" + ToStringPort(); + } +} + +std::string CService::ToString() const +{ + return ToStringIPPort(); +} + +void CService::print() const +{ + 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 e92657b..9b5d302 100644 --- a/src/netbase.h +++ b/src/netbase.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/netbase.h~ b/src/netbase.h~ new file mode 100644 index 0000000..ffa5f75 --- /dev/null +++ b/src/netbase.h~ @@ -0,0 +1,156 @@ +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_NETBASE_H +#define BITMARK_NETBASE_H + +#if defined(HAVE_CONFIG_H) +#include "bitmark-config.h" +#endif + +#include "compat.h" +#include "serialize.h" + +#include +#include +#include + +extern int nConnectTimeout; + +#ifdef WIN32 +// In MSVC, this is defined as a macro, undefine it to prevent a compile and link error +#undef SetPort +#endif + +enum Network +{ + NET_UNROUTABLE, + NET_IPV4, + NET_IPV6, + NET_TOR, + + NET_MAX, +}; + +extern int nConnectTimeout; +extern bool fNameLookup; + +/** IP address (IPv6, or IPv4 using mapped IPv6 range (::FFFF:0:0/96)) */ +class CNetAddr +{ + protected: + unsigned char ip[16]; // in network byte order + + public: + CNetAddr(); + CNetAddr(const struct in_addr& ipv4Addr); + explicit CNetAddr(const char *pszIp, bool fAllowLookup = false); + explicit CNetAddr(const std::string &strIp, bool fAllowLookup = false); + void Init(); + void SetIP(const CNetAddr& ip); + bool SetSpecial(const std::string &strName); // for Tor addresses + bool IsIPv4() const; // IPv4 mapped address (::FFFF:0:0/96, 0.0.0.0/0) + bool IsIPv6() const; // IPv6 address (not mapped IPv4, not Tor) + bool IsRFC1918() const; // IPv4 private networks (10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12) + 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::/7) + bool IsRFC4380() const; // IPv6 Teredo tunnelling (2001::/32) + bool IsRFC4843() const; // IPv6 ORCHID (2001:10::/28) + bool IsRFC4862() const; // IPv6 autoconfig (FE80::/64) + bool IsRFC6052() const; // IPv6 well-known prefix (64:FF9B::/96) + bool IsRFC6145() const; // IPv6 IPv4-translated address (::FFFF:0:0:0/96) + bool IsTor() const; + bool IsLocal() const; + bool IsRoutable() const; + bool IsValid() const; + bool IsMulticast() const; + enum Network GetNetwork() const; + std::string ToString() const; + std::string ToStringIP() const; + unsigned int GetByte(int n) 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; + + CNetAddr(const struct in6_addr& pipv6Addr); + bool GetIn6Addr(struct in6_addr* pipv6Addr) const; + + friend bool operator==(const CNetAddr& a, const CNetAddr& b); + friend bool operator!=(const CNetAddr& a, const CNetAddr& b); + friend bool operator<(const CNetAddr& a, const CNetAddr& b); + + IMPLEMENT_SERIALIZE + ( + READWRITE(FLATDATA(ip)); + ) +}; + +/** A combination of a network address (CNetAddr) and a (TCP) port */ +class CService : public CNetAddr +{ + protected: + unsigned short port; // host order + + public: + CService(); + CService(const CNetAddr& ip, unsigned short port); + CService(const struct in_addr& ipv4Addr, unsigned short port); + CService(const struct sockaddr_in& addr); + explicit CService(const char *pszIpPort, int portDefault, bool fAllowLookup = false); + explicit CService(const char *pszIpPort, bool fAllowLookup = false); + explicit CService(const std::string& strIpPort, int portDefault, bool fAllowLookup = false); + explicit CService(const std::string& strIpPort, bool fAllowLookup = false); + void Init(); + void SetPort(unsigned short portIn); + unsigned short GetPort() const; + bool GetSockAddr(struct sockaddr* paddr, socklen_t *addrlen) const; + bool SetSockAddr(const struct sockaddr* paddr); + friend bool operator==(const CService& a, const CService& b); + friend bool operator!=(const CService& a, const CService& b); + friend bool operator<(const CService& a, const CService& b); + std::vector GetKey() const; + std::string ToString() const; + std::string ToStringPort() const; + std::string ToStringIPPort() const; + void print() const; + + CService(const struct in6_addr& ipv6Addr, unsigned short port); + CService(const struct sockaddr_in6& addr); + + IMPLEMENT_SERIALIZE + ( + CService* pthis = const_cast(this); + READWRITE(FLATDATA(ip)); + unsigned short portN = htons(port); + READWRITE(portN); + if (fRead) + pthis->port = ntohs(portN); + ) +}; + +typedef std::pair proxyType; + +enum Network ParseNetwork(std::string net); +void SplitHostPort(std::string in, int &portOut, std::string &hostOut); +bool SetProxy(enum Network net, CService addrProxy, int nSocksVersion = 5); +bool GetProxy(enum Network net, proxyType &proxyInfoOut); +bool IsProxy(const CNetAddr &addr); +bool SetNameProxy(CService addrProxy, int nSocksVersion = 5); +bool HaveNameProxy(); +bool LookupHost(const char *pszName, std::vector& vIP, unsigned int nMaxSolutions = 0, bool fAllowLookup = true); +bool LookupHostNumeric(const char *pszName, std::vector& vIP, unsigned int nMaxSolutions = 0); +bool Lookup(const char *pszName, CService& addr, int portDefault = 0, bool fAllowLookup = true); +bool Lookup(const char *pszName, std::vector& vAddr, int portDefault = 0, bool fAllowLookup = true, unsigned int nMaxSolutions = 0); +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 2442031..070e71e 100644 --- a/src/noui.cpp +++ b/src/noui.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/noui.cpp~ b/src/noui.cpp~ new file mode 100644 index 0000000..3fe0ae7 --- /dev/null +++ b/src/noui.cpp~ @@ -0,0 +1,48 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#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) +{ + std::string strCaption; + // Check for usage of predefined caption + switch (style) { + case CClientUIInterface::MSG_ERROR: + strCaption += _("Error"); + break; + case CClientUIInterface::MSG_WARNING: + strCaption += _("Warning"); + break; + case CClientUIInterface::MSG_INFORMATION: + strCaption += _("Information"); + break; + default: + strCaption += caption; // Use supplied caption (can be empty) + } + + LogPrintf("%s: %s\n", strCaption, message); + fprintf(stderr, "%s: %s\n", strCaption.c_str(), message.c_str()); + return false; +} + +static void noui_InitMessage(const std::string &message) +{ + LogPrintf("init message: %s\n", message); +} + +void noui_connect() +{ + // Connect pfennigd signal handlers + uiInterface.ThreadSafeMessageBox.connect(noui_ThreadSafeMessageBox); + uiInterface.InitMessage.connect(noui_InitMessage); +} diff --git a/src/protocol.cpp b/src/protocol.cpp index fb6d22b..33248ac 100644 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/protocol.cpp~ b/src/protocol.cpp~ new file mode 100644 index 0000000..85b8804 --- /dev/null +++ b/src/protocol.cpp~ @@ -0,0 +1,152 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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" + +#ifndef WIN32 +# include +#endif + +static const char* ppszTypeName[] = +{ + "ERROR", + "tx", + "block", + "filtered block" +}; + +CMessageHeader::CMessageHeader() +{ + memcpy(pchMessageStart, Params().MessageStart(), MESSAGE_START_SIZE); + memset(pchCommand, 0, sizeof(pchCommand)); + pchCommand[1] = 1; + nMessageSize = -1; + nChecksum = 0; +} + +CMessageHeader::CMessageHeader(const char* pszCommand, unsigned int nMessageSizeIn) +{ + memcpy(pchMessageStart, Params().MessageStart(), MESSAGE_START_SIZE); + strncpy(pchCommand, pszCommand, COMMAND_SIZE); + nMessageSize = nMessageSizeIn; + nChecksum = 0; +} + +std::string CMessageHeader::GetCommand() const +{ + if (pchCommand[COMMAND_SIZE-1] == 0) + return std::string(pchCommand, pchCommand + strlen(pchCommand)); + else + return std::string(pchCommand, pchCommand + COMMAND_SIZE); +} + +bool CMessageHeader::IsValid() const +{ + // Check start string + if (memcmp(pchMessageStart, Params().MessageStart(), MESSAGE_START_SIZE) != 0) + return false; + + // Check the command string for errors + for (const char* p1 = pchCommand; p1 < pchCommand + COMMAND_SIZE; p1++) + { + if (*p1 == 0) + { + // Must be all zeros after the first zero + for (; p1 < pchCommand + COMMAND_SIZE; p1++) + if (*p1 != 0) + return false; + } + else if (*p1 < ' ' || *p1 > 0x7E) + return false; + } + + // Message size + if (nMessageSize > MAX_SIZE) + { + LogPrintf("CMessageHeader::IsValid() : (%s, %u bytes) nMessageSize > MAX_SIZE\n", GetCommand(), nMessageSize); + return false; + } + + return true; +} + + + +CAddress::CAddress() : CService() +{ + Init(); +} + +CAddress::CAddress(CService ipIn, uint64_t nServicesIn) : CService(ipIn) +{ + Init(); + nServices = nServicesIn; +} + +void CAddress::Init() +{ + nServices = NODE_NETWORK; + nTime = 100000000; + nLastTry = 0; +} + +CInv::CInv() +{ + type = 0; + hash = 0; +} + +CInv::CInv(int typeIn, const uint256& hashIn) +{ + type = typeIn; + hash = hashIn; +} + +CInv::CInv(const std::string& strType, const uint256& hashIn) +{ + unsigned int i; + for (i = 1; i < ARRAYLEN(ppszTypeName); i++) + { + if (strType == ppszTypeName[i]) + { + type = i; + break; + } + } + if (i == ARRAYLEN(ppszTypeName)) + throw std::out_of_range(strprintf("CInv::CInv(string, uint256) : unknown type '%s'", strType)); + hash = hashIn; +} + +bool operator<(const CInv& a, const CInv& b) +{ + return (a.type < b.type || (a.type == b.type && a.hash < b.hash)); +} + +bool CInv::IsKnownType() const +{ + return (type >= 1 && type < (int)ARRAYLEN(ppszTypeName)); +} + +const char* CInv::GetCommand() const +{ + if (!IsKnownType()) + throw std::out_of_range(strprintf("CInv::GetCommand() : type=%d unknown type", type)); + return ppszTypeName[type]; +} + +std::string CInv::ToString() const +{ + return strprintf("%s %s", GetCommand(), hash.ToString()); +} + +void CInv::print() const +{ + LogPrintf("CInv(%s)\n", ToString()); +} + diff --git a/src/protocol.h b/src/protocol.h index 741c085..4efcbc4 100644 --- a/src/protocol.h +++ b/src/protocol.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/protocol.h~ b/src/protocol.h~ new file mode 100644 index 0000000..f745b0a --- /dev/null +++ b/src/protocol.h~ @@ -0,0 +1,141 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef __cplusplus +# error This header can only be compiled as C++. +#endif + +#ifndef __INCLUDED_PROTOCOL_H__ +#define __INCLUDED_PROTOCOL_H__ + +#include "chainparams.h" +#include "netbase.h" +#include "serialize.h" +#include "uint256.h" + +#include +#include + +/** Message header. + * (4) message start. + * (12) command. + * (4) size. + * (4) checksum. + */ +class CMessageHeader +{ + public: + CMessageHeader(); + CMessageHeader(const char* pszCommand, unsigned int nMessageSizeIn); + + std::string GetCommand() const; + bool IsValid() const; + + IMPLEMENT_SERIALIZE + ( + READWRITE(FLATDATA(pchMessageStart)); + READWRITE(FLATDATA(pchCommand)); + READWRITE(nMessageSize); + READWRITE(nChecksum); + ) + + // TODO: make private (improves encapsulation) + public: + enum { + COMMAND_SIZE=12, + MESSAGE_SIZE_SIZE=sizeof(int), + CHECKSUM_SIZE=sizeof(int), + + MESSAGE_SIZE_OFFSET=MESSAGE_START_SIZE+COMMAND_SIZE, + CHECKSUM_OFFSET=MESSAGE_SIZE_OFFSET+MESSAGE_SIZE_SIZE, + HEADER_SIZE=MESSAGE_START_SIZE+COMMAND_SIZE+MESSAGE_SIZE_SIZE+CHECKSUM_SIZE + }; + char pchMessageStart[MESSAGE_START_SIZE]; + char pchCommand[COMMAND_SIZE]; + unsigned int nMessageSize; + unsigned int nChecksum; +}; + +/** nServices flags */ +enum +{ + NODE_NETWORK = (1 << 0), +}; + +/** A CService with information about it as peer */ +class CAddress : public CService +{ + public: + CAddress(); + explicit CAddress(CService ipIn, uint64_t nServicesIn=NODE_NETWORK); + + void Init(); + + IMPLEMENT_SERIALIZE + ( + CAddress* pthis = const_cast(this); + CService* pip = (CService*)pthis; + if (fRead) + pthis->Init(); + if (nType & SER_DISK) + READWRITE(nVersion); + if ((nType & SER_DISK) || + (nVersion >= CADDR_TIME_VERSION && !(nType & SER_GETHASH))) + READWRITE(nTime); + READWRITE(nServices); + READWRITE(*pip); + ) + + void print() const; + + // TODO: make private (improves encapsulation) + public: + uint64_t nServices; + + // disk and network only + unsigned int nTime; + + // memory only + int64_t nLastTry; +}; + +/** inv message data */ +class CInv +{ + public: + CInv(); + CInv(int typeIn, const uint256& hashIn); + CInv(const std::string& strType, const uint256& hashIn); + + IMPLEMENT_SERIALIZE + ( + READWRITE(type); + READWRITE(hash); + ) + + friend bool operator<(const CInv& a, const CInv& b); + + bool IsKnownType() const; + const char* GetCommand() const; + std::string ToString() const; + void print() const; + + // TODO: make private (improves encapsulation) + public: + int type; + uint256 hash; +}; + +enum +{ + MSG_TX = 1, + MSG_BLOCK, + // Nodes may always request a MSG_FILTERED_BLOCK in a getdata, however, + // MSG_FILTERED_BLOCK should not appear in any invs except as a part of getdata. + MSG_FILTERED_BLOCK, +}; + +#endif // __INCLUDED_PROTOCOL_H__ diff --git a/src/qt/Makefile.am~ b/src/qt/Makefile.am~ new file mode 100644 index 0000000..ad879ce --- /dev/null +++ b/src/qt/Makefile.am~ @@ -0,0 +1,379 @@ +include $(top_srcdir)/src/Makefile.include + +AM_CPPFLAGS += -I$(top_srcdir)/src \ + -I$(top_builddir)/src/qt \ + -I$(top_builddir)/src/qt/forms \ + $(PROTOBUF_CFLAGS) \ + $(QR_CFLAGS) +bin_PROGRAMS = gamecredits-qt +noinst_LIBRARIES = libbitmarkqt.a +SUBDIRS = . $(BUILD_TEST_QT) +DIST_SUBDIRS = . test + +# bitmark qt core # +QT_TS = \ + locale/bitmark_ach.ts \ + locale/bitmark_af_ZA.ts \ + locale/bitmark_ar.ts \ + locale/bitmark_be_BY.ts \ + locale/bitmark_bg.ts \ + locale/bitmark_bs.ts \ + locale/bitmark_ca_ES.ts \ + locale/bitmark_ca.ts \ + locale/bitmark_ca@valencia.ts \ + locale/bitmark_cmn.ts \ + locale/bitmark_cs.ts \ + locale/bitmark_cy.ts \ + locale/bitmark_da.ts \ + locale/bitmark_de.ts \ + locale/bitmark_el_GR.ts \ + locale/bitmark_en.ts \ + locale/bitmark_eo.ts \ + locale/bitmark_es_CL.ts \ + locale/bitmark_es_DO.ts \ + locale/bitmark_es_MX.ts \ + locale/bitmark_es.ts \ + locale/bitmark_es_UY.ts \ + locale/bitmark_et.ts \ + locale/bitmark_eu_ES.ts \ + locale/bitmark_fa_IR.ts \ + locale/bitmark_fa.ts \ + locale/bitmark_fi.ts \ + locale/bitmark_fr_CA.ts \ + locale/bitmark_fr.ts \ + locale/bitmark_gl.ts \ + locale/bitmark_gu_IN.ts \ + locale/bitmark_he.ts \ + locale/bitmark_hi_IN.ts \ + locale/bitmark_hr.ts \ + locale/bitmark_hu.ts \ + locale/bitmark_id_ID.ts \ + locale/bitmark_it.ts \ + locale/bitmark_ja.ts \ + locale/bitmark_ka.ts \ + locale/bitmark_kk_KZ.ts \ + locale/bitmark_ko_KR.ts \ + locale/bitmark_ky.ts \ + locale/bitmark_la.ts \ + locale/bitmark_lt.ts \ + locale/bitmark_lv_LV.ts \ + locale/bitmark_mn.ts \ + locale/bitmark_ms_MY.ts \ + locale/bitmark_nb.ts \ + locale/bitmark_nl.ts \ + locale/bitmark_pam.ts \ + locale/bitmark_pl.ts \ + locale/bitmark_pt_BR.ts \ + locale/bitmark_pt_PT.ts \ + locale/bitmark_ro_RO.ts \ + locale/bitmark_ru.ts \ + locale/bitmark_sah.ts \ + locale/bitmark_sk.ts \ + locale/bitmark_sl_SI.ts \ + locale/bitmark_sq.ts \ + locale/bitmark_sr.ts \ + locale/bitmark_sv.ts \ + locale/bitmark_th_TH.ts \ + locale/bitmark_tr.ts \ + locale/bitmark_uk.ts \ + locale/bitmark_ur_PK.ts \ + locale/bitmark_uz@Cyrl.ts \ + locale/bitmark_vi.ts \ + locale/bitmark_vi_VN.ts \ + locale/bitmark_zh_CN.ts \ + locale/bitmark_zh_HK.ts \ + locale/bitmark_zh_TW.ts + +QT_FORMS_UI = \ + forms/aboutdialog.ui \ + forms/addressbookpage.ui \ + forms/askpassphrasedialog.ui \ + forms/coincontroldialog.ui \ + forms/editaddressdialog.ui \ + forms/helpmessagedialog.ui \ + forms/intro.ui \ + forms/openuridialog.ui \ + forms/optionsdialog.ui \ + forms/overviewpage.ui \ + forms/receivecoinsdialog.ui \ + forms/receiverequestdialog.ui \ + forms/rpcconsole.ui \ + forms/sendcoinsdialog.ui \ + forms/sendcoinsentry.ui \ + forms/signverifymessagedialog.ui \ + forms/transactiondescdialog.ui + +QT_MOC_CPP = \ + moc_addressbookpage.cpp \ + moc_addresstablemodel.cpp \ + moc_askpassphrasedialog.cpp \ + moc_bitmarkaddressvalidator.cpp \ + moc_bitmarkamountfield.cpp \ + moc_bitmarkgui.cpp \ + moc_bitmarkunits.cpp \ + moc_clientmodel.cpp \ + moc_coincontroldialog.cpp \ + moc_coincontroltreewidget.cpp \ + moc_csvmodelwriter.cpp \ + moc_editaddressdialog.cpp \ + moc_guiutil.cpp \ + moc_intro.cpp \ + moc_macdockiconhandler.cpp \ + moc_macnotificationhandler.cpp \ + moc_monitoreddatamapper.cpp \ + moc_notificator.cpp \ + moc_openuridialog.cpp \ + moc_optionsdialog.cpp \ + moc_optionsmodel.cpp \ + moc_overviewpage.cpp \ + moc_paymentserver.cpp \ + moc_qvalidatedlineedit.cpp \ + moc_qvaluecombobox.cpp \ + moc_receivecoinsdialog.cpp \ + moc_receiverequestdialog.cpp \ + moc_recentrequeststablemodel.cpp \ + moc_rpcconsole.cpp \ + moc_sendcoinsdialog.cpp \ + moc_sendcoinsentry.cpp \ + moc_signverifymessagedialog.cpp \ + moc_splashscreen.cpp \ + moc_trafficgraphwidget.cpp \ + moc_transactiondesc.cpp \ + moc_transactiondescdialog.cpp \ + moc_transactionfilterproxy.cpp \ + moc_transactiontablemodel.cpp \ + moc_transactionview.cpp \ + moc_utilitydialog.cpp \ + moc_walletframe.cpp \ + moc_walletmodel.cpp \ + moc_walletview.cpp + +BITMARK_MM = \ + macdockiconhandler.mm \ + macnotificationhandler.mm + +QT_MOC = \ + bitmark.moc \ + intro.moc \ + overviewpage.moc \ + rpcconsole.moc + +QT_QRC_CPP = qrc_bitmark.cpp +QT_QRC = bitmark.qrc + +PROTOBUF_CC = paymentrequest.pb.cc +PROTOBUF_H = paymentrequest.pb.h +PROTOBUF_PROTO = paymentrequest.proto + +BITMARK_QT_H = \ + addressbookpage.h \ + addresstablemodel.h \ + askpassphrasedialog.h \ + bitmarkaddressvalidator.h \ + bitmarkamountfield.h \ + bitmarkgui.h \ + bitmarkunits.h \ + clientmodel.h \ + coincontroldialog.h \ + coincontroltreewidget.h \ + csvmodelwriter.h \ + editaddressdialog.h \ + guiconstants.h \ + guiutil.h \ + intro.h \ + macdockiconhandler.h \ + macnotificationhandler.h \ + monitoreddatamapper.h \ + notificator.h \ + openuridialog.h \ + optionsdialog.h \ + optionsmodel.h \ + overviewpage.h \ + paymentrequestplus.h \ + paymentserver.h \ + qvalidatedlineedit.h \ + qvaluecombobox.h \ + receivecoinsdialog.h \ + receiverequestdialog.h \ + recentrequeststablemodel.h \ + rpcconsole.h \ + sendcoinsdialog.h \ + sendcoinsentry.h \ + signverifymessagedialog.h \ + splashscreen.h \ + trafficgraphwidget.h \ + transactiondesc.h \ + transactiondescdialog.h \ + transactionfilterproxy.h \ + transactionrecord.h \ + transactiontablemodel.h \ + transactionview.h \ + utilitydialog.h \ + walletframe.h \ + walletmodel.h \ + walletmodeltransaction.h \ + walletview.h \ + winshutdownmonitor.h + +RES_ICONS = \ + res/icons/add.png \ + res/icons/address-book.png \ + res/icons/bitmark.ico \ + res/icons/bitmark.png \ + res/icons/bitmark_testnet.ico \ + res/icons/bitmark_testnet.png \ + res/icons/clock1.png \ + res/icons/clock2.png \ + res/icons/clock3.png \ + res/icons/clock4.png \ + res/icons/clock5.png \ + res/icons/configure.png \ + res/icons/connect0_16.png \ + res/icons/connect1_16.png \ + res/icons/connect2_16.png \ + res/icons/connect3_16.png \ + res/icons/connect4_16.png \ + res/icons/debugwindow.png \ + res/icons/edit.png \ + res/icons/editcopy.png \ + res/icons/editpaste.png \ + res/icons/export.png \ + res/icons/filesave.png \ + res/icons/history.png \ + res/icons/key.png \ + res/icons/lock_closed.png \ + res/icons/lock_open.png \ + res/icons/overview.png \ + res/icons/qrcode.png \ + res/icons/quit.png \ + res/icons/receive.png \ + res/icons/remove.png \ + res/icons/send.png \ + res/icons/synced.png \ + res/icons/toolbar.png \ + res/icons/toolbar_testnet.png \ + res/icons/transaction0.png \ + res/icons/transaction2.png \ + res/icons/transaction_conflicted.png \ + res/icons/tx_inout.png \ + res/icons/tx_input.png \ + res/icons/tx_output.png \ + res/icons/tx_mined.png + +BITMARK_QT_CPP = \ + bitmark.cpp \ + bitmarkaddressvalidator.cpp \ + bitmarkamountfield.cpp \ + bitmarkgui.cpp \ + bitmarkunits.cpp \ + clientmodel.cpp \ + csvmodelwriter.cpp \ + guiutil.cpp \ + intro.cpp \ + monitoreddatamapper.cpp \ + notificator.cpp \ + optionsdialog.cpp \ + optionsmodel.cpp \ + qvalidatedlineedit.cpp \ + qvaluecombobox.cpp \ + rpcconsole.cpp \ + splashscreen.cpp \ + trafficgraphwidget.cpp \ + utilitydialog.cpp \ + winshutdownmonitor.cpp + +if ENABLE_WALLET +BITMARK_QT_CPP += \ + addressbookpage.cpp \ + addresstablemodel.cpp \ + askpassphrasedialog.cpp \ + coincontroldialog.cpp \ + coincontroltreewidget.cpp \ + editaddressdialog.cpp \ + openuridialog.cpp \ + overviewpage.cpp \ + paymentrequestplus.cpp \ + paymentserver.cpp \ + receivecoinsdialog.cpp \ + receiverequestdialog.cpp \ + recentrequeststablemodel.cpp \ + sendcoinsdialog.cpp \ + sendcoinsentry.cpp \ + signverifymessagedialog.cpp \ + transactiondesc.cpp \ + transactiondescdialog.cpp \ + transactionfilterproxy.cpp \ + transactionrecord.cpp \ + transactiontablemodel.cpp \ + transactionview.cpp \ + walletframe.cpp \ + walletmodel.cpp \ + walletmodeltransaction.cpp \ + walletview.cpp +endif + +RES_IMAGES = \ + res/images/about.png \ + res/images/splash.png \ + res/images/splash_testnet.png + +RES_MOVIES = $(wildcard res/movies/spinner-*.png) + +BITMARK_RC = res/bitmark-qt-res.rc + +libbitmarkqt_a_CPPFLAGS = $(AM_CPPFLAGS) $(QT_INCLUDES) \ + -I$(top_srcdir)/src/qt/forms $(QT_DBUS_INCLUDES) +libbitmarkqt_a_SOURCES = $(BITMARK_QT_CPP) $(BITMARK_QT_H) $(QT_FORMS_UI) \ + $(QT_QRC) $(QT_TS) $(PROTOBUF_PROTO) $(RES_ICONS) $(RES_IMAGES) $(RES_MOVIES) + +nodist_libbitmarkqt_a_SOURCES = $(QT_MOC_CPP) $(QT_MOC) $(PROTOBUF_CC) \ + $(PROTOBUF_H) $(QT_QRC_CPP) + +BUILT_SOURCES = $(nodist_libbitmarkqt_a_SOURCES) + +#Generating these with a half-written protobuf header leads to wacky results. +#This makes sure it's done. +$(QT_MOC): $(PROTOBUF_H) +$(QT_MOC_CPP): $(PROTOBUF_H) + +# gamecredits-qt binary # +gamecredits_qt_CPPFLAGS = $(AM_CPPFLAGS) $(QT_INCLUDES) \ + -I$(top_srcdir)/src/qt/forms +gamecredits_qt_SOURCES = bitmark.cpp +if TARGET_DARWIN + gamecredits_qt_SOURCES += $(BITMARK_MM) +endif +if TARGET_WINDOWS + gamecredits_qt_SOURCES += $(BITMARK_RC) +endif +gamecredits_qt_LDADD = libbitmarkqt.a $(LIBBITMARK_SERVER) +if ENABLE_WALLET +gamecredits_qt_LDADD += $(LIBBITMARK_WALLET) +endif +gamecredits_qt_LDADD += $(LIBBITMARK_CLI) $(LIBBITMARK_COMMON) $(LIBLEVELDB) $(LIBMEMENV) \ + $(BOOST_LIBS) $(QT_LIBS) $(QT_DBUS_LIBS) $(QR_LIBS) $(PROTOBUF_LIBS) $(BDB_LIBS) +gamecredits_qt_LDFLAGS = $(QT_LDFLAGS) + +# forms/foo.h -> forms/ui_foo.h +QT_FORMS_H=$(join $(dir $(QT_FORMS_UI)),$(addprefix ui_, $(notdir $(QT_FORMS_UI:.ui=.h)))) + +#locale/foo.ts -> locale/foo.qm +QT_QM=$(QT_TS:.ts=.qm) + +.PHONY: FORCE +.SECONDARY: $(QT_QM) + +bitmarkstrings.cpp: FORCE + $(MAKE) -C $(top_srcdir)/src qt/bitmarkstrings.cpp + +translate: bitmarkstrings.cpp $(QT_FORMS_UI) $(QT_FORMS_UI) $(BITMARK_QT_CPP) $(BITMARK_QT_H) $(BITMARK_MM) + @test -n $(LUPDATE) || echo "lupdate is required for updating translations" + @QT_SELECT=$(QT_SELECT) $(LUPDATE) $^ -locations relative -no-obsolete -ts locale/bitmark_en.ts + +$(QT_QRC_CPP): $(QT_QRC) $(QT_QM) $(QT_FORMS_H) $(RES_ICONS) $(RES_IMAGES) $(RES_MOVIES) $(PROTOBUF_H) + @cd $(abs_srcdir); test -f $(RCC) && QT_SELECT=$(QT_SELECT) $(RCC) -name bitmark -o $(abs_builddir)/$@ $< || \ + echo error: could not build $@ + $(SED) -e '/^\*\*.*Created:/d' $@ > $@.n && mv $@{.n,} + $(SED) -e '/^\*\*.*by:/d' $@ > $@.n && mv $@{.n,} + +CLEANFILES = $(BUILT_SOURCES) $(QT_QM) $(QT_FORMS_H) *.gcda *.gcno diff --git a/src/qt/addressbookpage.cpp b/src/qt/addressbookpage.cpp index 983da07..7e5856e 100644 --- a/src/qt/addressbookpage.cpp +++ b/src/qt/addressbookpage.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -66,7 +66,7 @@ AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) : ui->deleteAddress->setVisible(true); break; case ReceivingTab: - ui->labelExplanation->setText(tr("These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction.")); + ui->labelExplanation->setText(tr("These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction.")); ui->deleteAddress->setVisible(false); break; } diff --git a/src/qt/addressbookpage.cpp~ b/src/qt/addressbookpage.cpp~ new file mode 100644 index 0000000..a1027ad --- /dev/null +++ b/src/qt/addressbookpage.cpp~ @@ -0,0 +1,309 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmark-config.h" +#endif + +#include "addressbookpage.h" +#include "ui_addressbookpage.h" + +#include "addresstablemodel.h" +#include "bitmarkgui.h" +#include "csvmodelwriter.h" +#include "editaddressdialog.h" +#include "guiutil.h" + +#include +#include +#include +#include + +AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) : + QDialog(parent), + ui(new Ui::AddressBookPage), + model(0), + mode(mode), + tab(tab) +{ + ui->setupUi(this); + +#ifdef Q_OS_MAC // Icons on push buttons are very uncommon on Mac + ui->newAddress->setIcon(QIcon()); + ui->copyAddress->setIcon(QIcon()); + ui->deleteAddress->setIcon(QIcon()); + ui->exportButton->setIcon(QIcon()); +#endif + + switch(mode) + { + 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: + switch(tab) + { + case SendingTab: setWindowTitle(tr("Sending addresses")); break; + case ReceivingTab: setWindowTitle(tr("Receiving addresses")); break; + } + break; + } + switch(tab) + { + case SendingTab: + ui->labelExplanation->setText(tr("These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins.")); + ui->deleteAddress->setVisible(true); + break; + case ReceivingTab: + ui->labelExplanation->setText(tr("These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction.")); + ui->deleteAddress->setVisible(false); + break; + } + + // Context menu actions + QAction *copyAddressAction = new QAction(tr("&Copy Address"), this); + QAction *copyLabelAction = new QAction(tr("Copy &Label"), this); + QAction *editAction = new QAction(tr("&Edit"), this); + deleteAction = new QAction(ui->deleteAddress->text(), this); + + // Build context menu + contextMenu = new QMenu(); + contextMenu->addAction(copyAddressAction); + contextMenu->addAction(copyLabelAction); + contextMenu->addAction(editAction); + if(tab == SendingTab) + contextMenu->addAction(deleteAction); + contextMenu->addSeparator(); + + // 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(ui->tableView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextualMenu(QPoint))); + + connect(ui->closeButton, SIGNAL(clicked()), this, SLOT(accept())); +} + +AddressBookPage::~AddressBookPage() +{ + delete ui; +} + +void AddressBookPage::setModel(AddressTableModel *model) +{ + this->model = model; + if(!model) + return; + + proxyModel = new QSortFilterProxyModel(this); + proxyModel->setSourceModel(model); + proxyModel->setDynamicSortFilter(true); + proxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); + proxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive); + switch(tab) + { + case ReceivingTab: + // Receive filter + proxyModel->setFilterRole(AddressTableModel::TypeRole); + proxyModel->setFilterFixedString(AddressTableModel::Receive); + break; + case SendingTab: + // Send filter + proxyModel->setFilterRole(AddressTableModel::TypeRole); + proxyModel->setFilterFixedString(AddressTableModel::Send); + break; + } + ui->tableView->setModel(proxyModel); + ui->tableView->sortByColumn(0, Qt::AscendingOrder); + + // Set column widths +#if QT_VERSION < 0x050000 + ui->tableView->horizontalHeader()->setResizeMode(AddressTableModel::Label, QHeaderView::Stretch); + ui->tableView->horizontalHeader()->setResizeMode(AddressTableModel::Address, QHeaderView::ResizeToContents); +#else + ui->tableView->horizontalHeader()->setSectionResizeMode(AddressTableModel::Label, QHeaderView::Stretch); + ui->tableView->horizontalHeader()->setSectionResizeMode(AddressTableModel::Address, QHeaderView::ResizeToContents); +#endif + + connect(ui->tableView->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), + this, SLOT(selectionChanged())); + + // Select row for newly created address + connect(model, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(selectNewAddress(QModelIndex,int,int))); + + selectionChanged(); +} + +void AddressBookPage::on_copyAddress_clicked() +{ + GUIUtil::copyEntryData(ui->tableView, AddressTableModel::Address); +} + +void AddressBookPage::onCopyLabelAction() +{ + GUIUtil::copyEntryData(ui->tableView, AddressTableModel::Label); +} + +void AddressBookPage::onEditAction() +{ + if(!model) + return; + + if(!ui->tableView->selectionModel()) + return; + QModelIndexList indexes = ui->tableView->selectionModel()->selectedRows(); + if(indexes.isEmpty()) + return; + + EditAddressDialog dlg( + 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_newAddress_clicked() +{ + if(!model) + return; + + EditAddressDialog dlg( + tab == SendingTab ? + EditAddressDialog::NewSendingAddress : + EditAddressDialog::NewReceivingAddress, this); + dlg.setModel(model); + if(dlg.exec()) + { + newAddressToSelect = dlg.getAddress(); + } +} + +void AddressBookPage::on_deleteAddress_clicked() +{ + QTableView *table = ui->tableView; + if(!table->selectionModel()) + return; + + QModelIndexList indexes = table->selectionModel()->selectedRows(); + if(!indexes.isEmpty()) + { + table->model()->removeRow(indexes.at(0).row()); + } +} + +void AddressBookPage::selectionChanged() +{ + // Set button states based on selected tab and selection + QTableView *table = ui->tableView; + if(!table->selectionModel()) + return; + + if(table->selectionModel()->hasSelection()) + { + switch(tab) + { + case SendingTab: + // In sending tab, allow deletion of selection + ui->deleteAddress->setEnabled(true); + ui->deleteAddress->setVisible(true); + deleteAction->setEnabled(true); + break; + case ReceivingTab: + // Deleting receiving addresses, however, is not allowed + ui->deleteAddress->setEnabled(false); + ui->deleteAddress->setVisible(false); + deleteAction->setEnabled(false); + break; + } + ui->copyAddress->setEnabled(true); + } + else + { + ui->deleteAddress->setEnabled(false); + ui->copyAddress->setEnabled(false); + } +} + +void AddressBookPage::done(int retval) +{ + QTableView *table = ui->tableView; + if(!table->selectionModel() || !table->model()) + return; + + // Figure out which address was selected, and return it + QModelIndexList indexes = table->selectionModel()->selectedRows(AddressTableModel::Address); + + foreach (QModelIndex index, indexes) + { + QVariant address = table->model()->data(index); + returnValue = address.toString(); + } + + if(returnValue.isEmpty()) + { + // If no address entry selected, return rejected + retval = Rejected; + } + + QDialog::done(retval); +} + +void AddressBookPage::on_exportButton_clicked() +{ + // CSV is currently the only supported format + QString filename = GUIUtil::getSaveFileName(this, + tr("Export Address List"), QString(), + tr("Comma separated file (*.csv)"), NULL); + + if (filename.isNull()) + return; + + CSVModelWriter writer(filename); + + // name, column, role + writer.setModel(proxyModel); + writer.addColumn("Label", AddressTableModel::Label, Qt::EditRole); + writer.addColumn("Address", AddressTableModel::Address, Qt::EditRole); + + 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::contextualMenu(const QPoint &point) +{ + QModelIndex index = ui->tableView->indexAt(point); + if(index.isValid()) + { + contextMenu->exec(QCursor::pos()); + } +} + +void AddressBookPage::selectNewAddress(const QModelIndex &parent, int begin, int /*end*/) +{ + QModelIndex idx = proxyModel->mapFromSource(model->index(begin, AddressTableModel::Address, parent)); + if(idx.isValid() && (idx.data(Qt::EditRole).toString() == newAddressToSelect)) + { + // Select row of newly created address, once + ui->tableView->setFocus(); + ui->tableView->selectRow(idx.row()); + newAddressToSelect.clear(); + } +} diff --git a/src/qt/addressbookpage.h b/src/qt/addressbookpage.h index 1739a68..afb03d4 100644 --- a/src/qt/addressbookpage.h +++ b/src/qt/addressbookpage.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/addressbookpage.h~ b/src/qt/addressbookpage.h~ new file mode 100644 index 0000000..b45dc5f --- /dev/null +++ b/src/qt/addressbookpage.h~ @@ -0,0 +1,88 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +class AddressTableModel; +class OptionsModel; + +namespace Ui { + class AddressBookPage; +} + +QT_BEGIN_NAMESPACE +class QItemSelection; +class QMenu; +class QModelIndex; +class QSortFilterProxyModel; +class QTableView; +QT_END_NAMESPACE + +/** Widget that shows a list of sending or receiving addresses. + */ +class AddressBookPage : public QDialog +{ + Q_OBJECT + +public: + enum Tabs { + SendingTab = 0, + ReceivingTab = 1 + }; + + enum Mode { + ForSelection, /**< Open address book to pick address */ + ForEditing /**< Open address book for editing */ + }; + + explicit AddressBookPage(Mode mode, Tabs tab, QWidget *parent); + ~AddressBookPage(); + + void setModel(AddressTableModel *model); + const QString &getReturnValue() const { return returnValue; } + +public slots: + void done(int retval); + +private: + Ui::AddressBookPage *ui; + AddressTableModel *model; + Mode mode; + Tabs tab; + QString returnValue; + QSortFilterProxyModel *proxyModel; + QMenu *contextMenu; + QAction *deleteAction; // to be able to explicitly disable it + QString newAddressToSelect; + +private slots: + /** Delete currently selected address entry */ + void on_deleteAddress_clicked(); + /** Create a new address for receiving coins and / or add a new address book entry */ + void on_newAddress_clicked(); + /** Copy address of currently selected address entry to clipboard */ + void on_copyAddress_clicked(); + /** Copy label of currently selected address entry to clipboard (no button) */ + void onCopyLabelAction(); + /** Edit currently selected address entry (no button) */ + void onEditAction(); + /** Export button clicked */ + void on_exportButton_clicked(); + + /** Set button states based on selected tab and selection */ + void selectionChanged(); + /** Spawn contextual menu (right mouse menu) for address book entry */ + void contextualMenu(const QPoint &point); + /** New entry/entries were added to address table */ + void selectNewAddress(const QModelIndex &parent, int begin, int /*end*/); + +signals: + void sendCoins(QString addr); +}; + +#endif // ADDRESSBOOKPAGE_H diff --git a/src/qt/addresstablemodel.cpp b/src/qt/addresstablemodel.cpp index f262e0f..004a490 100644 --- a/src/qt/addresstablemodel.cpp +++ b/src/qt/addresstablemodel.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -337,7 +337,7 @@ QModelIndex AddressTableModel::index(int row, int column, const QModelIndex &par void AddressTableModel::updateEntry(const QString &address, const QString &label, bool isMine, const QString &purpose, int status) { - // Update address book model from Pfennig core + // Update address book model from pfennig core priv->updateEntry(address, label, isMine, purpose, status); } diff --git a/src/qt/addresstablemodel.cpp~ b/src/qt/addresstablemodel.cpp~ new file mode 100644 index 0000000..e8dca9b --- /dev/null +++ b/src/qt/addresstablemodel.cpp~ @@ -0,0 +1,453 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "base58.h" +#include "wallet.h" + +#include +#include + +const QString AddressTableModel::Send = "S"; +const QString AddressTableModel::Receive = "R"; + +struct AddressTableEntry +{ + enum Type { + Sending, + Receiving, + Hidden /* QSortFilterProxyModel will filter these out */ + }; + + Type type; + QString label; + QString address; + + AddressTableEntry() {} + AddressTableEntry(Type type, const QString &label, const QString &address): + type(type), label(label), address(address) {} +}; + +struct AddressTableEntryLessThan +{ + bool operator()(const AddressTableEntry &a, const AddressTableEntry &b) const + { + return a.address < b.address; + } + bool operator()(const AddressTableEntry &a, const QString &b) const + { + return a.address < b; + } + bool operator()(const QString &a, const AddressTableEntry &b) const + { + return a < b.address; + } +}; + +/* 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 +{ +public: + CWallet *wallet; + QList cachedAddressTable; + AddressTableModel *parent; + + AddressTablePriv(CWallet *wallet, AddressTableModel *parent): + wallet(wallet), parent(parent) {} + + void refreshAddressTable() + { + cachedAddressTable.clear(); + { + LOCK(wallet->cs_wallet); + BOOST_FOREACH(const PAIRTYPE(CTxDestination, CAddressBookData)& item, wallet->mapAddressBook) + { + const CBitmarkAddress& address = item.first; + bool fMine = IsMine(*wallet, address.Get()); + 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, const QString &purpose, int status) + { + // Find address / label in model + QList::iterator lower = qLowerBound( + cachedAddressTable.begin(), cachedAddressTable.end(), address, AddressTableEntryLessThan()); + QList::iterator upper = qUpperBound( + cachedAddressTable.begin(), cachedAddressTable.end(), address, AddressTableEntryLessThan()); + int lowerIndex = (lower - cachedAddressTable.begin()); + int upperIndex = (upper - cachedAddressTable.begin()); + bool inModel = (lower != upper); + AddressTableEntry::Type newEntryType = translateTransactionType(purpose, isMine); + + switch(status) + { + case CT_NEW: + if(inModel) + { + qDebug() << "AddressTablePriv::updateEntry : Warning: Got CT_NEW, but entry is already in model"; + break; + } + parent->beginInsertRows(QModelIndex(), lowerIndex, lowerIndex); + cachedAddressTable.insert(lowerIndex, AddressTableEntry(newEntryType, label, address)); + parent->endInsertRows(); + break; + case CT_UPDATED: + if(!inModel) + { + qDebug() << "AddressTablePriv::updateEntry : Warning: Got CT_UPDATED, but entry is not in model"; + break; + } + lower->type = newEntryType; + lower->label = label; + parent->emitDataChanged(lowerIndex); + break; + case CT_DELETED: + if(!inModel) + { + qDebug() << "AddressTablePriv::updateEntry : Warning: Got CT_DELETED, but entry is not in model"; + break; + } + parent->beginRemoveRows(QModelIndex(), lowerIndex, upperIndex-1); + cachedAddressTable.erase(lower, upper); + parent->endRemoveRows(); + break; + } + } + + int size() + { + return cachedAddressTable.size(); + } + + AddressTableEntry *index(int idx) + { + if(idx >= 0 && idx < cachedAddressTable.size()) + { + return &cachedAddressTable[idx]; + } + else + { + return 0; + } + } +}; + +AddressTableModel::AddressTableModel(CWallet *wallet, WalletModel *parent) : + QAbstractTableModel(parent),walletModel(parent),wallet(wallet),priv(0) +{ + columns << tr("Label") << tr("Address"); + priv = new AddressTablePriv(wallet, this); + priv->refreshAddressTable(); +} + +AddressTableModel::~AddressTableModel() +{ + delete priv; +} + +int AddressTableModel::rowCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return priv->size(); +} + +int AddressTableModel::columnCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return columns.length(); +} + +QVariant AddressTableModel::data(const QModelIndex &index, int role) const +{ + if(!index.isValid()) + return QVariant(); + + AddressTableEntry *rec = static_cast(index.internalPointer()); + + if(role == Qt::DisplayRole || role == Qt::EditRole) + { + switch(index.column()) + { + case Label: + if(rec->label.isEmpty() && role == Qt::DisplayRole) + { + return tr("(no label)"); + } + else + { + return rec->label; + } + case Address: + return rec->address; + } + } + else if (role == Qt::FontRole) + { + QFont font; + if(index.column() == Address) + { + font = GUIUtil::bitmarkAddressFont(); + } + return font; + } + else if (role == TypeRole) + { + switch(rec->type) + { + case AddressTableEntry::Sending: + return Send; + case AddressTableEntry::Receiving: + return Receive; + default: break; + } + } + return QVariant(); +} + +bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value, int role) +{ + 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) + { + LOCK(wallet->cs_wallet); /* For SetAddressBook / DelAddressBook */ + CTxDestination curAddress = CBitmarkAddress(rec->address.toStdString()).Get(); + if(index.column() == Label) + { + // Do nothing, if old label == new label + if(rec->label == value.toString()) + { + editStatus = NO_CHANGES; + return false; + } + wallet->SetAddressBook(curAddress, value.toString().toStdString(), strPurpose); + } else if(index.column() == Address) { + CTxDestination newAddress = CBitmarkAddress(value.toString().toStdString()).Get(); + // Refuse to set invalid address, set error status and return false + 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(newAddress)) + { + editStatus = DUPLICATE_ADDRESS; + return false; + } + // Double-check that we're not overwriting a receiving address + else if(rec->type == AddressTableEntry::Sending) + { + // Remove old entry + wallet->DelAddressBook(curAddress); + // Add new entry with new address + wallet->SetAddressBook(newAddress, rec->label.toStdString(), strPurpose); + } + } + return true; + } + return false; +} + +QVariant AddressTableModel::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(); +} + +Qt::ItemFlags AddressTableModel::flags(const QModelIndex &index) const +{ + if(!index.isValid()) + return 0; + AddressTableEntry *rec = static_cast(index.internalPointer()); + + Qt::ItemFlags retval = Qt::ItemIsSelectable | Qt::ItemIsEnabled; + // Can edit address and label for sending addresses, + // and only label for receiving addresses. + if(rec->type == AddressTableEntry::Sending || + (rec->type == AddressTableEntry::Receiving && index.column()==Label)) + { + retval |= Qt::ItemIsEditable; + } + return retval; +} + +QModelIndex AddressTableModel::index(int row, int column, const QModelIndex &parent) const +{ + Q_UNUSED(parent); + AddressTableEntry *data = priv->index(row); + if(data) + { + return createIndex(row, column, priv->index(row)); + } + else + { + return QModelIndex(); + } +} + +void AddressTableModel::updateEntry(const QString &address, + const QString &label, bool isMine, const QString &purpose, int status) +{ + // Update address book model from pfennig core + priv->updateEntry(address, label, isMine, purpose, status); +} + +QString AddressTableModel::addRow(const QString &type, const QString &label, const QString &address) +{ + std::string strLabel = label.toStdString(); + std::string strAddress = address.toStdString(); + + editStatus = OK; + + if(type == Send) + { + if(!walletModel->validateAddress(address)) + { + editStatus = INVALID_ADDRESS; + return QString(); + } + // Check for duplicate addresses + { + LOCK(wallet->cs_wallet); + if(wallet->mapAddressBook.count(CBitmarkAddress(strAddress).Get())) + { + editStatus = DUPLICATE_ADDRESS; + return QString(); + } + } + } + else if(type == Receive) + { + // Generate a new address to associate with given label + CPubKey newKey; + if(!wallet->GetKeyFromPool(newKey)) + { + 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 = CBitmarkAddress(newKey.GetID()).ToString(); + } + else + { + return QString(); + } + + // Add entry + { + LOCK(wallet->cs_wallet); + wallet->SetAddressBook(CBitmarkAddress(strAddress).Get(), strLabel, + (type == Send ? "send" : "receive")); + } + return QString::fromStdString(strAddress); +} + +bool AddressTableModel::removeRows(int row, int count, const QModelIndex &parent) +{ + Q_UNUSED(parent); + AddressTableEntry *rec = priv->index(row); + if(count != 1 || !rec || rec->type == AddressTableEntry::Receiving) + { + // Can only remove one row at a time, and cannot remove rows not in model. + // Also refuse to remove receiving addresses. + return false; + } + { + LOCK(wallet->cs_wallet); + wallet->DelAddressBook(CBitmarkAddress(rec->address.toStdString()).Get()); + } + return true; +} + +/* Look up label for address in address book, if not found return empty string. + */ +QString AddressTableModel::labelForAddress(const QString &address) const +{ + { + LOCK(wallet->cs_wallet); + CBitmarkAddress address_parsed(address.toStdString()); + std::map::iterator mi = wallet->mapAddressBook.find(address_parsed.Get()); + if (mi != wallet->mapAddressBook.end()) + { + return QString::fromStdString(mi->second.name); + } + } + return QString(); +} + +int AddressTableModel::lookupAddress(const QString &address) const +{ + QModelIndexList lst = match(index(0, Address, QModelIndex()), + Qt::EditRole, address, 1, Qt::MatchExactly); + if(lst.isEmpty()) + { + return -1; + } + else + { + return lst.at(0).row(); + } +} + +void AddressTableModel::emitDataChanged(int idx) +{ + emit dataChanged(index(idx, 0, QModelIndex()), index(idx, columns.length()-1, QModelIndex())); +} diff --git a/src/qt/addresstablemodel.h b/src/qt/addresstablemodel.h index 4fcd4a7..883bd58 100644 --- a/src/qt/addresstablemodel.h +++ b/src/qt/addresstablemodel.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -27,7 +27,7 @@ class AddressTableModel : public QAbstractTableModel enum ColumnIndex { Label = 0, /**< User specified label */ - Address = 1 /**< Pfennig address */ + Address = 1 /**< pfennig address */ }; enum RoleIndex { diff --git a/src/qt/addresstablemodel.h~ b/src/qt/addresstablemodel.h~ new file mode 100644 index 0000000..a4912bc --- /dev/null +++ b/src/qt/addresstablemodel.h~ @@ -0,0 +1,96 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +#include +#include + +class AddressTablePriv; +class WalletModel; + +class CWallet; + +/** + Qt model of the address book in the core. This allows views to access and modify the address book. + */ +class AddressTableModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + explicit AddressTableModel(CWallet *wallet, WalletModel *parent = 0); + ~AddressTableModel(); + + enum ColumnIndex { + Label = 0, /**< User specified label */ + Address = 1 /**< pfennig address */ + }; + + enum RoleIndex { + TypeRole = Qt::UserRole /**< Type of address (#Send or #Receive) */ + }; + + /** Return status of edit/insert operation */ + enum EditStatus { + OK, /**< Everything ok */ + NO_CHANGES, /**< No changes were made during edit operation */ + INVALID_ADDRESS, /**< Unparseable address */ + DUPLICATE_ADDRESS, /**< Address already in address book */ + WALLET_UNLOCK_FAILURE, /**< Wallet could not be unlocked to create new receiving address */ + KEY_GENERATION_FAILURE /**< Generating a new public key for a receiving address failed */ + }; + + static const QString Send; /**< Specifies send address */ + static const QString Receive; /**< Specifies receive address */ + + /** @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; + /*@}*/ + + /* Add an address to the model. + Returns the added address on success, and an empty string otherwise. + */ + QString addRow(const QString &type, const QString &label, const QString &address); + + /* Look up label for address in address book, if not found return empty string. + */ + QString labelForAddress(const QString &address) const; + + /* Look up row index of an address in the model. + Return -1 if not found. + */ + int lookupAddress(const QString &address) const; + + EditStatus getEditStatus() const { return editStatus; } + +private: + WalletModel *walletModel; + CWallet *wallet; + AddressTablePriv *priv; + QStringList columns; + EditStatus editStatus; + + /** Notify listeners that data changed. */ + void emitDataChanged(int index); + +public slots: + /* Update address list from core. + */ + void updateEntry(const QString &address, const QString &label, bool isMine, const QString &purpose, int status); + + friend class AddressTablePriv; +}; + +#endif // ADDRESSTABLEMODEL_H diff --git a/src/qt/askpassphrasedialog.cpp b/src/qt/askpassphrasedialog.cpp index 774d304..e98046e 100644 --- a/src/qt/askpassphrasedialog.cpp +++ b/src/qt/askpassphrasedialog.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -106,7 +106,7 @@ void AskPassphraseDialog::accept() break; } QMessageBox::StandardButton retval = QMessageBox::question(this, tr("Confirm wallet encryption"), - tr("Warning: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR BITMARKS!") + "

" + tr("Are you sure you wish to encrypt your wallet?"), + tr("Warning: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR PFENNIGS!") + "

" + tr("Are you sure you wish to encrypt your wallet?"), QMessageBox::Yes|QMessageBox::Cancel, QMessageBox::Cancel); if(retval == QMessageBox::Yes) @@ -117,9 +117,9 @@ void AskPassphraseDialog::accept() { QMessageBox::warning(this, tr("Wallet encrypted"), "" + - tr("Pfennig will close now to finish the encryption process. " + tr("pfennig will close now to finish the encryption process. " "Remember that encrypting your wallet cannot fully protect " - "your bitmarks from being stolen by malware infecting your computer.") + + "your pfennigs from being stolen by malware infecting your computer.") + "

" + tr("IMPORTANT: Any previous backups you have made of your wallet file " "should be replaced with the newly generated, encrypted wallet file. " diff --git a/src/qt/askpassphrasedialog.cpp~ b/src/qt/askpassphrasedialog.cpp~ new file mode 100644 index 0000000..9d02ebb --- /dev/null +++ b/src/qt/askpassphrasedialog.cpp~ @@ -0,0 +1,256 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +AskPassphraseDialog::AskPassphraseDialog(Mode mode, QWidget *parent) : + QDialog(parent), + ui(new Ui::AskPassphraseDialog), + mode(mode), + model(0), + fCapsLock(false) +{ + ui->setupUi(this); + + ui->passEdit1->setMaxLength(MAX_PASSPHRASE_SIZE); + ui->passEdit2->setMaxLength(MAX_PASSPHRASE_SIZE); + ui->passEdit3->setMaxLength(MAX_PASSPHRASE_SIZE); + + // Setup Caps Lock detection. + ui->passEdit1->installEventFilter(this); + ui->passEdit2->installEventFilter(this); + ui->passEdit3->installEventFilter(this); + + switch(mode) + { + case Encrypt: // Ask passphrase x2 + ui->passLabel1->hide(); + ui->passEdit1->hide(); + ui->warningLabel->setText(tr("Enter the new passphrase to the wallet.
Please use a passphrase of 10 or more random characters, or eight or more words.")); + setWindowTitle(tr("Encrypt wallet")); + break; + case Unlock: // Ask passphrase + ui->warningLabel->setText(tr("This operation needs your wallet passphrase to unlock the wallet.")); + ui->passLabel2->hide(); + ui->passEdit2->hide(); + ui->passLabel3->hide(); + ui->passEdit3->hide(); + setWindowTitle(tr("Unlock wallet")); + break; + case Decrypt: // Ask passphrase + ui->warningLabel->setText(tr("This operation needs your wallet passphrase to decrypt the wallet.")); + ui->passLabel2->hide(); + ui->passEdit2->hide(); + ui->passLabel3->hide(); + ui->passEdit3->hide(); + setWindowTitle(tr("Decrypt wallet")); + break; + case ChangePass: // Ask old passphrase + new passphrase x2 + setWindowTitle(tr("Change passphrase")); + ui->warningLabel->setText(tr("Enter the old and new passphrase to the wallet.")); + break; + } + + textChanged(); + connect(ui->passEdit1, SIGNAL(textChanged(QString)), this, SLOT(textChanged())); + connect(ui->passEdit2, SIGNAL(textChanged(QString)), this, SLOT(textChanged())); + connect(ui->passEdit3, SIGNAL(textChanged(QString)), this, SLOT(textChanged())); +} + +AskPassphraseDialog::~AskPassphraseDialog() +{ + // Attempt to overwrite text so that they do not linger around in memory + ui->passEdit1->setText(QString(" ").repeated(ui->passEdit1->text().size())); + ui->passEdit2->setText(QString(" ").repeated(ui->passEdit2->text().size())); + ui->passEdit3->setText(QString(" ").repeated(ui->passEdit3->text().size())); + delete ui; +} + +void AskPassphraseDialog::setModel(WalletModel *model) +{ + this->model = model; +} + +void AskPassphraseDialog::accept() +{ + SecureString oldpass, newpass1, newpass2; + if(!model) + return; + oldpass.reserve(MAX_PASSPHRASE_SIZE); + newpass1.reserve(MAX_PASSPHRASE_SIZE); + newpass2.reserve(MAX_PASSPHRASE_SIZE); + // TODO: get rid of this .c_str() by implementing SecureString::operator=(std::string) + // Alternately, find a way to make this input mlock()'d to begin with. + oldpass.assign(ui->passEdit1->text().toStdString().c_str()); + newpass1.assign(ui->passEdit2->text().toStdString().c_str()); + newpass2.assign(ui->passEdit3->text().toStdString().c_str()); + + switch(mode) + { + case Encrypt: { + if(newpass1.empty() || newpass2.empty()) + { + // Cannot encrypt with empty passphrase + break; + } + QMessageBox::StandardButton retval = QMessageBox::question(this, tr("Confirm wallet encryption"), + tr("Warning: If you encrypt your wallet and lose your passphrase, you will LOSE ALL OF YOUR PFENNIGS!") + "

" + tr("Are you sure you wish to encrypt your wallet?"), + QMessageBox::Yes|QMessageBox::Cancel, + QMessageBox::Cancel); + if(retval == QMessageBox::Yes) + { + if(newpass1 == newpass2) + { + if(model->setWalletEncrypted(true, newpass1)) + { + QMessageBox::warning(this, tr("Wallet encrypted"), + "" + + tr("pfennig will close now to finish the encryption process. " + "Remember that encrypting your wallet cannot fully protect " + "your pfennigs from being stolen by malware infecting your computer.") + + "

" + + tr("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.") + + "
"); + QApplication::quit(); + } + else + { + QMessageBox::critical(this, tr("Wallet encryption failed"), + tr("Wallet encryption failed due to an internal error. Your wallet was not encrypted.")); + } + QDialog::accept(); // Success + } + else + { + QMessageBox::critical(this, tr("Wallet encryption failed"), + tr("The supplied passphrases do not match.")); + } + } + else + { + QDialog::reject(); // Cancelled + } + } break; + case Unlock: + if(!model->setWalletLocked(false, oldpass)) + { + QMessageBox::critical(this, tr("Wallet unlock failed"), + tr("The passphrase entered for the wallet decryption was incorrect.")); + } + else + { + QDialog::accept(); // Success + } + break; + case Decrypt: + if(!model->setWalletEncrypted(false, oldpass)) + { + QMessageBox::critical(this, tr("Wallet decryption failed"), + tr("The passphrase entered for the wallet decryption was incorrect.")); + } + else + { + QDialog::accept(); // Success + } + break; + case ChangePass: + if(newpass1 == newpass2) + { + if(model->changePassphrase(oldpass, newpass1)) + { + QMessageBox::information(this, tr("Wallet encrypted"), + tr("Wallet passphrase was successfully changed.")); + QDialog::accept(); // Success + } + else + { + QMessageBox::critical(this, tr("Wallet encryption failed"), + tr("The passphrase entered for the wallet decryption was incorrect.")); + } + } + else + { + QMessageBox::critical(this, tr("Wallet encryption failed"), + tr("The supplied passphrases do not match.")); + } + break; + } +} + +void AskPassphraseDialog::textChanged() +{ + // Validate input, set Ok button to enabled when acceptable + bool acceptable = false; + switch(mode) + { + case Encrypt: // New passphrase x2 + acceptable = !ui->passEdit2->text().isEmpty() && !ui->passEdit3->text().isEmpty(); + break; + case Unlock: // Old passphrase x1 + case Decrypt: + acceptable = !ui->passEdit1->text().isEmpty(); + break; + case ChangePass: // Old passphrase x1, new passphrase x2 + acceptable = !ui->passEdit1->text().isEmpty() && !ui->passEdit2->text().isEmpty() && !ui->passEdit3->text().isEmpty(); + break; + } + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(acceptable); +} + +bool AskPassphraseDialog::event(QEvent *event) +{ + // Detect Caps Lock key press. + if (event->type() == QEvent::KeyPress) { + QKeyEvent *ke = static_cast(event); + if (ke->key() == Qt::Key_CapsLock) { + fCapsLock = !fCapsLock; + } + if (fCapsLock) { + ui->capsLabel->setText(tr("Warning: The Caps Lock key is on!")); + } else { + ui->capsLabel->clear(); + } + } + return QWidget::event(event); +} + +bool AskPassphraseDialog::eventFilter(QObject *object, QEvent *event) +{ + /* Detect Caps Lock. + * There is no good OS-independent way to check a key state in Qt, but we + * can detect Caps Lock by checking for the following condition: + * Shift key is down and the result is a lower case character, or + * Shift key is not down and the result is an upper case character. + */ + if (event->type() == QEvent::KeyPress) { + QKeyEvent *ke = static_cast(event); + QString str = ke->text(); + if (str.length() != 0) { + const QChar *psz = str.unicode(); + bool fShift = (ke->modifiers() & Qt::ShiftModifier) != 0; + if ((fShift && *psz >= 'a' && *psz <= 'z') || (!fShift && *psz >= 'A' && *psz <= 'Z')) { + fCapsLock = true; + ui->capsLabel->setText(tr("Warning: The Caps Lock key is on!")); + } else if (psz->isLetter()) { + fCapsLock = false; + ui->capsLabel->clear(); + } + } + } + return QDialog::eventFilter(object, event); +} diff --git a/src/qt/askpassphrasedialog.h b/src/qt/askpassphrasedialog.h index 5312b5e..e1ab9da 100644 --- a/src/qt/askpassphrasedialog.h +++ b/src/qt/askpassphrasedialog.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/askpassphrasedialog.h~ b/src/qt/askpassphrasedialog.h~ new file mode 100644 index 0000000..0cf47c9 --- /dev/null +++ b/src/qt/askpassphrasedialog.h~ @@ -0,0 +1,52 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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; +} + +/** Multifunctional dialog to ask for passphrases. Used for encryption, unlocking, and changing the passphrase. + */ +class AskPassphraseDialog : public QDialog +{ + Q_OBJECT + +public: + enum Mode { + Encrypt, /**< Ask passphrase twice and encrypt */ + Unlock, /**< Ask passphrase and unlock */ + ChangePass, /**< Ask old passphrase + new passphrase twice */ + Decrypt /**< Ask passphrase and decrypt wallet */ + }; + + explicit AskPassphraseDialog(Mode mode, QWidget *parent); + ~AskPassphraseDialog(); + + void accept(); + + void setModel(WalletModel *model); + +private: + Ui::AskPassphraseDialog *ui; + Mode mode; + WalletModel *model; + bool fCapsLock; + +private slots: + void textChanged(); + +protected: + bool event(QEvent *event); + bool eventFilter(QObject *object, QEvent *event); +}; + +#endif // ASKPASSPHRASEDIALOG_H diff --git a/src/qt/bitmark.cpp b/src/qt/bitmark.cpp index 62aced0..86af457 100644 --- a/src/qt/bitmark.cpp +++ b/src/qt/bitmark.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -445,7 +445,7 @@ void BitmarkApplication::shutdownResult(int retval) void BitmarkApplication::handleRunawayException(const QString &message) { - QMessageBox::critical(0, "Runaway exception", BitmarkGUI::tr("A fatal error occurred. Pfennig can no longer continue safely and will quit.") + QString("\n\n") + message); + QMessageBox::critical(0, "Runaway exception", BitmarkGUI::tr("A fatal error occurred. pfennig can no longer continue safely and will quit.") + QString("\n\n") + message); ::exit(1); } @@ -517,18 +517,18 @@ int main(int argc, char *argv[]) // User language is set up: pick a data directory Intro::pickDataDirectory(); - /// 6. Determine availability of data directory and parse bitmark.conf + /// 6. Determine availability of data directory and parse pfennig.conf /// - Do not call GetDataDir(true) before this step finishes if (!boost::filesystem::is_directory(GetDataDir(false))) { - QMessageBox::critical(0, QObject::tr("Pfennig"), + QMessageBox::critical(0, QObject::tr("pfennig"), 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("Pfennig"), + QMessageBox::critical(0, QObject::tr("pfennig"), QObject::tr("Error: Cannot parse configuration file: %1. Only use key=value syntax.").arg(e.what())); return false; } @@ -541,7 +541,7 @@ int main(int argc, char *argv[]) // Check for -testnet or -regtest parameter (Params() calls are only valid after this clause) if (!SelectParamsFromCommandLine()) { - QMessageBox::critical(0, QObject::tr("Pfennig"), QObject::tr("Error: Invalid combination of -regtest and -testnet.")); + QMessageBox::critical(0, QObject::tr("pfennig"), QObject::tr("Error: Invalid combination of -regtest and -testnet.")); return 1; } #ifdef ENABLE_WALLET @@ -601,7 +601,7 @@ int main(int argc, char *argv[]) app.createWindow(isaTestNet); app.requestInitialize(); #if defined(Q_OS_WIN) && QT_VERSION >= 0x050000 - WinShutdownMonitor::registerShutdownBlockReason(QObject::tr("Pfennig Core didn't yet exit safely..."), (HWND)app.getMainWinId()); + WinShutdownMonitor::registerShutdownBlockReason(QObject::tr("pfennig Core didn't yet exit safely..."), (HWND)app.getMainWinId()); #endif app.exec(); app.requestShutdown(); diff --git a/src/qt/bitmark.cpp~ b/src/qt/bitmark.cpp~ new file mode 100644 index 0000000..fd3fa1f --- /dev/null +++ b/src/qt/bitmark.cpp~ @@ -0,0 +1,618 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmark-config.h" +#endif + +#include "bitmarkgui.h" + +#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 + +#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*) + +static void InitMessage(const std::string &message) +{ + LogPrintf("init message: %s\n", message); +} + +/* + Translate string to current locale using Qt. + */ +static std::string Translate(const char* psz) +{ + return QCoreApplication::translate("bitmark-core", psz).toStdString(); +} + +/** 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(); + // 2) Language from QSettings + QString lang_territory_qsettings = settings.value("language", "").toString(); + if(!lang_territory_qsettings.isEmpty()) + lang_territory = lang_territory_qsettings; + // 3) -lang command line argument + lang_territory = QString::fromStdString(GetArg("-lang", lang_territory.toStdString())); + + // Convert to "de" only by truncating "_DE" + QString lang = lang_territory; + lang.truncate(lang_territory.lastIndexOf('_')); + + // Load language files for configured locale: + // - First load the translator for the base language, without territory + // - Then load the more specific locale translator + + // Load e.g. qt_de.qm + if (qtTranslatorBase.load("qt_" + lang, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) + QApplication::installTranslator(&qtTranslatorBase); + + // Load e.g. qt_de_DE.qm + if (qtTranslator.load("qt_" + lang_territory, QLibraryInfo::location(QLibraryInfo::TranslationsPath))) + QApplication::installTranslator(&qtTranslator); + + // Load e.g. bitmark_de.qm (shortcut "de" needs to be defined in bitmark.qrc) + if (translatorBase.load(lang, ":/translations/")) + QApplication::installTranslator(&translatorBase); + + // Load e.g. bitmark_de_DE.qm (shortcut "de_DE" needs to be defined in bitmark.qrc) + if (translator.load(lang_territory, ":/translations/")) + 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 Bitmark Core startup and shutdown. + * Allows running startup and shutdown in a different thread from the UI thread. + */ +class BitmarkCore: public QObject +{ + Q_OBJECT +public: + explicit BitmarkCore(); + +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 Bitmark application object */ +class BitmarkApplication: public QApplication +{ + Q_OBJECT +public: + explicit BitmarkApplication(int &argc, char **argv); + ~BitmarkApplication(); + +#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 (BitmarkGUI) + 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; + BitmarkGUI *window; + QTimer *pollShutdownTimer; +#ifdef ENABLE_WALLET + PaymentServer* paymentServer; + WalletModel *walletModel; +#endif + int returnValue; + + void startThread(); +}; + +#include "bitmark.moc" + +BitmarkCore::BitmarkCore(): + QObject() +{ +} + +void BitmarkCore::handleRunawayException(std::exception *e) +{ + PrintExceptionContinue(e, "Runaway exception"); + emit runawayException(QString::fromStdString(strMiscWarning)); +} + +void BitmarkCore::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 BitmarkCore::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); + } +} + +BitmarkApplication::BitmarkApplication(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(); +} + +BitmarkApplication::~BitmarkApplication() +{ + 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 BitmarkApplication::createPaymentServer() +{ + paymentServer = new PaymentServer(this); +} +#endif + +void BitmarkApplication::createOptionsModel() +{ + optionsModel = new OptionsModel(); +} + +void BitmarkApplication::createWindow(bool isaTestNet) +{ + window = new BitmarkGUI(isaTestNet, 0); + + pollShutdownTimer = new QTimer(window); + connect(pollShutdownTimer, SIGNAL(timeout()), window, SLOT(detectShutdown())); + pollShutdownTimer->start(200); +} + +void BitmarkApplication::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 BitmarkApplication::startThread() +{ + coreThread = new QThread(this); + BitmarkCore *executor = new BitmarkCore(); + 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 BitmarkApplication::requestInitialize() +{ + LogPrintf("Requesting initialize\n"); + emit requestedInitialize(); +} + +void BitmarkApplication::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 BitmarkApplication::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 + // bitmark: 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 BitmarkApplication::shutdownResult(int retval) +{ + LogPrintf("Shutdown result: %i\n", retval); + quit(); // Exit main loop after shutdown finished +} + +void BitmarkApplication::handleRunawayException(const QString &message) +{ + QMessageBox::critical(0, "Runaway exception", BitmarkGUI::tr("A fatal error occurred. pfennig can no longer continue safely and will quit.") + QString("\n\n") + message); + ::exit(1); +} + +WId BitmarkApplication::getMainWinId() const +{ + if (!window) + return 0; + + return window->winId(); +} + +#ifndef BITMARK_QT_TEST +int main(int argc, char *argv[]) +{ + 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")); + QTextCodec::setCodecForCStrings(QTextCodec::codecForTr()); +#endif + + Q_INIT_RESOURCE(bitmark); + + GUIUtil::SubstituteFonts(); + + BitmarkApplication 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* >(); + + /// 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); + 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")) + { + HelpMessageDialog help(NULL); + help.showOrPrint(); + return 1; + } + + /// 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 pfennig.conf + /// - Do not call GetDataDir(true) before this step finishes + if (!boost::filesystem::is_directory(GetDataDir(false))) + { + QMessageBox::critical(0, QObject::tr("pfennig"), + 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("pfennig"), + QObject::tr("Error: Cannot parse configuration file: %1. Only use key=value syntax.").arg(e.what())); + return 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("pfennig"), 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 + // bitmark: 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 + { + app.createWindow(isaTestNet); + app.requestInitialize(); +#if defined(Q_OS_WIN) && QT_VERSION >= 0x050000 + WinShutdownMonitor::registerShutdownBlockReason(QObject::tr("pfennig Core didn't yet exit safely..."), (HWND)app.getMainWinId()); +#endif + app.exec(); + app.requestShutdown(); + app.exec(); + } catch (std::exception& e) { + PrintExceptionContinue(&e, "Runaway exception"); + app.handleRunawayException(QString::fromStdString(strMiscWarning)); + } catch (...) { + PrintExceptionContinue(NULL, "Runaway exception"); + app.handleRunawayException(QString::fromStdString(strMiscWarning)); + } + return app.getReturnValue(); +} +#endif // BITMARK_QT_TEST diff --git a/src/qt/bitmarkaddressvalidator.cpp b/src/qt/bitmarkaddressvalidator.cpp index 036aad0..44b23ea 100644 --- a/src/qt/bitmarkaddressvalidator.cpp +++ b/src/qt/bitmarkaddressvalidator.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -89,7 +89,7 @@ BitmarkAddressCheckValidator::BitmarkAddressCheckValidator(QObject *parent) : QValidator::State BitmarkAddressCheckValidator::validate(QString &input, int &pos) const { Q_UNUSED(pos); - // Validate the passed Pfennig address + // Validate the passed pfennig address CBitmarkAddress addr(input.toStdString()); if (addr.IsValid()) return QValidator::Acceptable; diff --git a/src/qt/bitmarkaddressvalidator.cpp~ b/src/qt/bitmarkaddressvalidator.cpp~ new file mode 100644 index 0000000..60018e9 --- /dev/null +++ b/src/qt/bitmarkaddressvalidator.cpp~ @@ -0,0 +1,98 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "bitmarkaddressvalidator.h" + +#include "base58.h" + +/* Base58 characters are: + "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" + + This is: + - All numbers except for '0' + - All upper-case letters except for 'I' and 'O' + - All lower-case letters except for 'l' +*/ + +BitmarkAddressEntryValidator::BitmarkAddressEntryValidator(QObject *parent) : + QValidator(parent) +{ +} + +QValidator::State BitmarkAddressEntryValidator::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 < input.size();) + { + bool removeChar = false; + QChar ch = input.at(idx); + // Corrections made are very conservative on purpose, to avoid + // users unexpectedly getting away with typos that would normally + // be detected, and thus sending to the wrong address. + switch(ch.unicode()) + { + // Qt categorizes these as "Other_Format" not "Separator_Space" + case 0x200B: // ZERO WIDTH SPACE + case 0xFEFF: // ZERO WIDTH NO-BREAK SPACE + removeChar = true; + break; + default: + break; + } + + // Remove whitespace + if (ch.isSpace()) + removeChar = true; + + // To next character + if (removeChar) + input.remove(idx, 1); + else + ++idx; + } + + // Validation + QValidator::State state = QValidator::Acceptable; + for (int idx = 0; idx < input.size(); ++idx) + { + int ch = input.at(idx).unicode(); + + 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 + } + else + { + state = QValidator::Invalid; + } + } + + return state; +} + +BitmarkAddressCheckValidator::BitmarkAddressCheckValidator(QObject *parent) : + QValidator(parent) +{ +} + +QValidator::State BitmarkAddressCheckValidator::validate(QString &input, int &pos) const +{ + Q_UNUSED(pos); + // Validate the passed pfennig address + CBitmarkAddress addr(input.toStdString()); + if (addr.IsValid()) + return QValidator::Acceptable; + + return QValidator::Invalid; +} diff --git a/src/qt/bitmarkaddressvalidator.h b/src/qt/bitmarkaddressvalidator.h index 2ae445b..45a9833 100644 --- a/src/qt/bitmarkaddressvalidator.h +++ b/src/qt/bitmarkaddressvalidator.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/bitmarkaddressvalidator.h~ b/src/qt/bitmarkaddressvalidator.h~ new file mode 100644 index 0000000..f80c6d0 --- /dev/null +++ b/src/qt/bitmarkaddressvalidator.h~ @@ -0,0 +1,36 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARKADDRESSVALIDATOR_H +#define BITMARKADDRESSVALIDATOR_H + +#include + +/** Base58 entry widget validator, checks for valid characters and + * removes some whitespace. + */ +class BitmarkAddressEntryValidator : public QValidator +{ + Q_OBJECT + +public: + explicit BitmarkAddressEntryValidator(QObject *parent); + + State validate(QString &input, int &pos) const; +}; + +/** Bitmark address widget validator, checks for a valid bitmark address. + */ +class BitmarkAddressCheckValidator : public QValidator +{ + Q_OBJECT + +public: + explicit BitmarkAddressCheckValidator(QObject *parent); + + State validate(QString &input, int &pos) const; +}; + +#endif // BITMARKADDRESSVALIDATOR_H diff --git a/src/qt/bitmarkamountfield.cpp b/src/qt/bitmarkamountfield.cpp index 7917b46..e9cfa66 100644 --- a/src/qt/bitmarkamountfield.cpp +++ b/src/qt/bitmarkamountfield.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/bitmarkamountfield.cpp~ b/src/qt/bitmarkamountfield.cpp~ new file mode 100644 index 0000000..f511c32 --- /dev/null +++ b/src/qt/bitmarkamountfield.cpp~ @@ -0,0 +1,187 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "bitmarkamountfield.h" + +#include "bitmarkunits.h" +#include "guiconstants.h" +#include "qvaluecombobox.h" + +#include +#include +#include +#include +#include // for qPow() + +BitmarkAmountField::BitmarkAmountField(QWidget *parent) : + QWidget(parent), + amount(0), + currentUnit(-1) +{ + nSingleStep = 100000; // satoshis + + amount = new QDoubleSpinBox(this); + amount->setLocale(QLocale::c()); + amount->installEventFilter(this); + amount->setMaximumWidth(170); + + QHBoxLayout *layout = new QHBoxLayout(this); + layout->addWidget(amount); + unit = new QValueComboBox(this); + unit->setModel(new BitmarkUnits(this)); + layout->addWidget(unit); + layout->addStretch(1); + layout->setContentsMargins(0,0,0,0); + + setLayout(layout); + + setFocusPolicy(Qt::TabFocus); + setFocusProxy(amount); + + // If one if the widgets changes, the combined content changes as well + connect(amount, SIGNAL(valueChanged(QString)), this, SIGNAL(textChanged())); + connect(unit, SIGNAL(currentIndexChanged(int)), this, SLOT(unitChanged(int))); + + // Set default based on configuration + unitChanged(unit->currentIndex()); +} + +void BitmarkAmountField::setText(const QString &text) +{ + if (text.isEmpty()) + amount->clear(); + else + amount->setValue(text.toDouble()); +} + +void BitmarkAmountField::clear() +{ + amount->clear(); + unit->setCurrentIndex(0); +} + +bool BitmarkAmountField::validate() +{ + bool valid = true; + if (amount->value() == 0.0) + valid = false; + else if (!BitmarkUnits::parse(currentUnit, text(), 0)) + valid = false; + else if (amount->value() > BitmarkUnits::maxAmount(currentUnit)) + valid = false; + + setValid(valid); + + return valid; +} + +void BitmarkAmountField::setValid(bool valid) +{ + if (valid) + amount->setStyleSheet(""); + else + amount->setStyleSheet(STYLE_INVALID); +} + +QString BitmarkAmountField::text() const +{ + if (amount->text().isEmpty()) + return QString(); + else + return amount->text(); +} + +bool BitmarkAmountField::eventFilter(QObject *object, QEvent *event) +{ + if (event->type() == QEvent::FocusIn) + { + // Clear invalid flag on focus + setValid(true); + } + else if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) + { + QKeyEvent *keyEvent = static_cast(event); + if (keyEvent->key() == Qt::Key_Comma) + { + // Translate a comma into a period + QKeyEvent periodKeyEvent(event->type(), Qt::Key_Period, keyEvent->modifiers(), ".", keyEvent->isAutoRepeat(), keyEvent->count()); + QApplication::sendEvent(object, &periodKeyEvent); + return true; + } + } + return QWidget::eventFilter(object, event); +} + +QWidget *BitmarkAmountField::setupTabChain(QWidget *prev) +{ + QWidget::setTabOrder(prev, amount); + QWidget::setTabOrder(amount, unit); + return unit; +} + +qint64 BitmarkAmountField::value(bool *valid_out) const +{ + qint64 val_out = 0; + bool valid = BitmarkUnits::parse(currentUnit, text(), &val_out); + if (valid_out) + { + *valid_out = valid; + } + return val_out; +} + +void BitmarkAmountField::setValue(qint64 value) +{ + setText(BitmarkUnits::format(currentUnit, value)); +} + +void BitmarkAmountField::setReadOnly(bool fReadOnly) +{ + amount->setReadOnly(fReadOnly); + unit->setEnabled(!fReadOnly); +} + +void BitmarkAmountField::unitChanged(int idx) +{ + // Use description tooltip for current unit for the combobox + unit->setToolTip(unit->itemData(idx, Qt::ToolTipRole).toString()); + + // Determine new unit ID + int newUnit = unit->itemData(idx, BitmarkUnits::UnitRole).toInt(); + + // Parse current value and convert to new unit + bool valid = false; + qint64 currentValue = value(&valid); + + currentUnit = newUnit; + + // Set max length after retrieving the value, to prevent truncation + amount->setDecimals(BitmarkUnits::decimals(currentUnit)); + amount->setMaximum(qPow(10, BitmarkUnits::amountDigits(currentUnit)) - qPow(10, -amount->decimals())); + amount->setSingleStep((double)nSingleStep / (double)BitmarkUnits::factor(currentUnit)); + + if (valid) + { + // If value was valid, re-place it in the widget with the new unit + setValue(currentValue); + } + else + { + // If current value is invalid, just clear field + setText(""); + } + setValid(true); +} + +void BitmarkAmountField::setDisplayUnit(int newUnit) +{ + unit->setValue(newUnit); +} + +void BitmarkAmountField::setSingleStep(qint64 step) +{ + nSingleStep = step; + unitChanged(unit->currentIndex()); +} diff --git a/src/qt/bitmarkamountfield.h b/src/qt/bitmarkamountfield.h index 67a3a65..dcb368e 100644 --- a/src/qt/bitmarkamountfield.h +++ b/src/qt/bitmarkamountfield.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/bitmarkamountfield.h~ b/src/qt/bitmarkamountfield.h~ new file mode 100644 index 0000000..6b98ca7 --- /dev/null +++ b/src/qt/bitmarkamountfield.h~ @@ -0,0 +1,73 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARKAMOUNTFIELD_H +#define BITMARKAMOUNTFIELD_H + +#include + +QT_BEGIN_NAMESPACE +class QDoubleSpinBox; +class QValueComboBox; +QT_END_NAMESPACE + +/** Widget for entering bitmark amounts. + */ +class BitmarkAmountField: public QWidget +{ + Q_OBJECT + + Q_PROPERTY(qint64 value READ value WRITE setValue NOTIFY textChanged USER true) + +public: + explicit BitmarkAmountField(QWidget *parent = 0); + + 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. */ + bool validate(); + + /** Change unit used to display amount. */ + void setDisplayUnit(int unit); + + /** Make field empty and ready for new input. */ + void clear(); + + /** Qt messes up the tab chain by default in some cases (issue https://bugreports.qt-project.org/browse/QTBUG-10907), + in these cases we have to set it up manually. + */ + QWidget *setupTabChain(QWidget *prev); + +signals: + void textChanged(); + +protected: + /** Intercept focus-in event and ',' key presses */ + bool eventFilter(QObject *object, QEvent *event); + +private: + QDoubleSpinBox *amount; + QValueComboBox *unit; + int currentUnit; + qint64 nSingleStep; + + void setText(const QString &text); + QString text() const; + +private slots: + void unitChanged(int idx); + +}; + +#endif // BITMARKAMOUNTFIELD_H diff --git a/src/qt/bitmarkgui.cpp b/src/qt/bitmarkgui.cpp index 3c0ca53..c5cfa1a 100644 --- a/src/qt/bitmarkgui.cpp +++ b/src/qt/bitmarkgui.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -73,7 +73,7 @@ BitmarkGUI::BitmarkGUI(bool fIsTestnet, QWidget *parent) : { GUIUtil::restoreWindowGeometry("nWindow", QSize(850, 550), this); - QString windowTitle = tr("Pfennig Core") + " - "; + QString windowTitle = tr("pfennig Core") + " - "; #ifdef ENABLE_WALLET /* if compiled with wallet support, -disablewallet can still disable the wallet */ bool enableWallet = !GetBoolArg("-disablewallet", false); @@ -228,7 +228,7 @@ void BitmarkGUI::createActions(bool fIsTestnet) tabGroup->addAction(overviewAction); sendCoinsAction = new QAction(QIcon(":/icons/send"), tr("&Send"), this); - sendCoinsAction->setStatusTip(tr("Send coins to a Pfennig address")); + sendCoinsAction->setStatusTip(tr("Send coins to a pfennig address")); sendCoinsAction->setToolTip(sendCoinsAction->statusTip()); sendCoinsAction->setCheckable(true); sendCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_2)); @@ -264,10 +264,10 @@ void BitmarkGUI::createActions(bool fIsTestnet) quitAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q)); quitAction->setMenuRole(QAction::QuitRole); if (!fIsTestnet) - aboutAction = new QAction(QIcon(":/icons/bitmark"), tr("&About Pfennig Core"), this); + aboutAction = new QAction(QIcon(":/icons/bitmark"), tr("&About pfennig Core"), this); else - aboutAction = new QAction(QIcon(":/icons/bitmark_testnet"), tr("&About Pfennig Core"), this); - aboutAction->setStatusTip(tr("Show information about Pfennig")); + aboutAction = new QAction(QIcon(":/icons/bitmark_testnet"), tr("&About pfennig Core"), this); + aboutAction->setStatusTip(tr("Show information about pfennig")); aboutAction->setMenuRole(QAction::AboutRole); #if QT_VERSION < 0x050000 aboutQtAction = new QAction(QIcon(":/trolltech/qmessagebox/images/qtlogo-64.png"), tr("About &Qt"), this); @@ -277,7 +277,7 @@ void BitmarkGUI::createActions(bool fIsTestnet) aboutQtAction->setStatusTip(tr("Show information about Qt")); aboutQtAction->setMenuRole(QAction::AboutQtRole); optionsAction = new QAction(QIcon(":/icons/options"), tr("&Options..."), this); - optionsAction->setStatusTip(tr("Modify configuration options for Pfennig")); + optionsAction->setStatusTip(tr("Modify configuration options for pfennig")); optionsAction->setMenuRole(QAction::PreferencesRole); if (!fIsTestnet) toggleHideAction = new QAction(QIcon(":/icons/bitmark"), tr("&Show / Hide"), this); @@ -293,9 +293,9 @@ void BitmarkGUI::createActions(bool fIsTestnet) changePassphraseAction = new QAction(QIcon(":/icons/key"), tr("&Change Passphrase..."), this); changePassphraseAction->setStatusTip(tr("Change the passphrase used for wallet encryption")); signMessageAction = new QAction(QIcon(":/icons/edit"), tr("Sign &message..."), this); - signMessageAction->setStatusTip(tr("Sign messages with your Pfennig addresses to prove you own them")); + signMessageAction->setStatusTip(tr("Sign messages with your pfennig addresses to prove you own them")); verifyMessageAction = new QAction(QIcon(":/icons/transaction_0"), tr("&Verify message..."), this); - verifyMessageAction->setStatusTip(tr("Verify messages to ensure they were signed with specified Pfennig addresses")); + verifyMessageAction->setStatusTip(tr("Verify messages to ensure they were signed with specified pfennig addresses")); openRPCConsoleAction = new QAction(QIcon(":/icons/debugwindow"), tr("&Debug window"), this); openRPCConsoleAction->setStatusTip(tr("Open debugging and diagnostic console")); @@ -309,7 +309,7 @@ void BitmarkGUI::createActions(bool fIsTestnet) openAction->setStatusTip(tr("Open a bitmark: URI or payment request")); showHelpMessageAction = new QAction(QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation), tr("&Command-line options"), this); - showHelpMessageAction->setStatusTip(tr("Show the Pfennig Core help message to get a list with possible Bitmark command-line options")); + showHelpMessageAction->setStatusTip(tr("Show the pfennig Core help message to get a list with possible Bitmark command-line options")); connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit())); connect(aboutAction, SIGNAL(triggered()), this, SLOT(aboutClicked())); @@ -468,12 +468,12 @@ void BitmarkGUI::createTrayIcon(bool fIsTestnet) if (!fIsTestnet) { - trayIcon->setToolTip(tr("Pfennig client")); + trayIcon->setToolTip(tr("pfennig client")); trayIcon->setIcon(QIcon(":/icons/toolbar")); } else { - trayIcon->setToolTip(tr("Pfennig client") + " " + tr("[testnet]")); + trayIcon->setToolTip(tr("pfennig client") + " " + tr("[testnet]")); trayIcon->setIcon(QIcon(":/icons/toolbar_testnet")); } @@ -615,7 +615,7 @@ void BitmarkGUI::setNumConnections(int count) default: icon = ":/icons/connect_4"; break; } labelConnectionsIcon->setPixmap(QIcon(icon).pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); - labelConnectionsIcon->setToolTip(tr("%n active connection(s) to Pfennig network", "", count)); + labelConnectionsIcon->setToolTip(tr("%n active connection(s) to pfennig network", "", count)); } void BitmarkGUI::setNumBlocks(int count) @@ -727,7 +727,7 @@ void BitmarkGUI::setNumBlocks(int count) void BitmarkGUI::message(const QString &title, const QString &message, unsigned int style, bool *ret) { - QString strTitle = tr("Pfennig"); // default title + QString strTitle = tr("pfennig"); // default title // Default to information icon int nMBoxIcon = QMessageBox::Information; int nNotifyIcon = Notificator::Information; @@ -753,7 +753,7 @@ void BitmarkGUI::message(const QString &title, const QString &message, unsigned break; } } - // Append title to "Pfennig - " + // Append title to "pfennig - " if (!msgType.isEmpty()) strTitle += " - " + msgType; diff --git a/src/qt/bitmarkgui.cpp~ b/src/qt/bitmarkgui.cpp~ new file mode 100644 index 0000000..71e02fa --- /dev/null +++ b/src/qt/bitmarkgui.cpp~ @@ -0,0 +1,977 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "bitmarkgui.h" + +#include "bitmarkunits.h" +#include "clientmodel.h" +#include "guiconstants.h" +#include "guiutil.h" +#include "notificator.h" +#include "openuridialog.h" +#include "optionsdialog.h" +#include "optionsmodel.h" +#include "rpcconsole.h" +#include "utilitydialog.h" +#ifdef ENABLE_WALLET +#include "walletframe.h" +#include "walletmodel.h" +#endif + +#ifdef Q_OS_MAC +#include "macdockiconhandler.h" +#endif + +#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 BitmarkGUI::DEFAULT_WALLET = "~Default"; + +BitmarkGUI::BitmarkGUI(bool fIsTestnet, QWidget *parent) : + QMainWindow(parent), + clientModel(0), + walletFrame(0), + encryptWalletAction(0), + changePassphraseAction(0), + aboutQtAction(0), + trayIcon(0), + notificator(0), + rpcConsole(0), + prevBlocks(0), + spinnerFrame(0) +{ + GUIUtil::restoreWindowGeometry("nWindow", QSize(850, 550), this); + + QString windowTitle = tr("pfennig 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"); + } + + if (!fIsTestnet) + { +#ifndef Q_OS_MAC + QApplication::setWindowIcon(QIcon(":icons/bitmark")); + setWindowIcon(QIcon(":icons/bitmark")); +#else + MacDockIconHandler::instance()->setIcon(QIcon(":icons/bitmark")); +#endif + } + else + { + windowTitle += " " + tr("[testnet]"); +#ifndef Q_OS_MAC + QApplication::setWindowIcon(QIcon(":icons/bitmark_testnet")); + setWindowIcon(QIcon(":icons/bitmark_testnet")); +#else + MacDockIconHandler::instance()->setIcon(QIcon(":icons/bitmark_testnet")); +#endif + } + setWindowTitle(windowTitle); + +#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); + + // Create actions for the toolbar, menu bar and tray/dock icon + // Needs walletFrame to be initialized + createActions(fIsTestnet); + + // Create application menu bar + createMenuBar(); + + // Create the toolbars + createToolBars(); + + // Create system tray icon and notification + createTrayIcon(fIsTestnet); + + // Create status bar + statusBar(); + + // Status bar notification icons + QFrame *frameBlocks = new QFrame(); + frameBlocks->setContentsMargins(0,0,0,0); + frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); + QHBoxLayout *frameBlocksLayout = new QHBoxLayout(frameBlocks); + frameBlocksLayout->setContentsMargins(3,0,3,0); + frameBlocksLayout->setSpacing(3); + labelEncryptionIcon = new QLabel(); + labelConnectionsIcon = new QLabel(); + labelBlocksIcon = new QLabel(); + frameBlocksLayout->addStretch(); + frameBlocksLayout->addWidget(labelEncryptionIcon); + frameBlocksLayout->addStretch(); + frameBlocksLayout->addWidget(labelConnectionsIcon); + frameBlocksLayout->addStretch(); + frameBlocksLayout->addWidget(labelBlocksIcon); + frameBlocksLayout->addStretch(); + + // Progress bar and label for blocks download + progressBarLabel = new QLabel(); + progressBarLabel->setVisible(false); + progressBar = new QProgressBar(); + progressBar->setAlignment(Qt::AlignCenter); + progressBar->setVisible(false); + + // Override style sheet for progress bar for styles that have a segmented progress bar, + // as they make the text unreadable (workaround for issue #1071) + // See https://qt-project.org/doc/qt-4.8/gallery.html + QString curStyle = QApplication::style()->metaObject()->className(); + if(curStyle == "QWindowsStyle" || curStyle == "QWindowsXPStyle") + { + progressBar->setStyleSheet("QProgressBar { background-color: #e8e8e8; border: 1px solid grey; border-radius: 7px; padding: 1px; text-align: center; } QProgressBar::chunk { background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #FF8000, stop: 1 orange); border-radius: 7px; margin: 0px; }"); + } + + statusBar()->addWidget(progressBarLabel); + statusBar()->addWidget(progressBar); + statusBar()->addPermanentWidget(frameBlocks); + + 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(); +} + +BitmarkGUI::~BitmarkGUI() +{ + // 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 + delete appMenuBar; + MacDockIconHandler::instance()->setMainWindow(NULL); +#endif +} + +void BitmarkGUI::createActions(bool fIsTestnet) +{ + QActionGroup *tabGroup = new QActionGroup(this); + + overviewAction = new QAction(QIcon(":/icons/overview"), tr("&Overview"), this); + overviewAction->setStatusTip(tr("Show general overview of wallet")); + overviewAction->setToolTip(overviewAction->statusTip()); + overviewAction->setCheckable(true); + overviewAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_1)); + tabGroup->addAction(overviewAction); + + sendCoinsAction = new QAction(QIcon(":/icons/send"), tr("&Send"), this); + sendCoinsAction->setStatusTip(tr("Send coins to a pfennig address")); + sendCoinsAction->setToolTip(sendCoinsAction->statusTip()); + sendCoinsAction->setCheckable(true); + sendCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_2)); + tabGroup->addAction(sendCoinsAction); + + receiveCoinsAction = new QAction(QIcon(":/icons/receiving_addresses"), tr("&Receive"), this); + receiveCoinsAction->setStatusTip(tr("Request payments (generates QR codes and bitmark: URIs)")); + receiveCoinsAction->setToolTip(receiveCoinsAction->statusTip()); + receiveCoinsAction->setCheckable(true); + receiveCoinsAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_3)); + tabGroup->addAction(receiveCoinsAction); + + historyAction = new QAction(QIcon(":/icons/history"), tr("&Transactions"), this); + historyAction->setStatusTip(tr("Browse transaction history")); + historyAction->setToolTip(historyAction->statusTip()); + historyAction->setCheckable(true); + historyAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_4)); + tabGroup->addAction(historyAction); + + // 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())); + connect(sendCoinsAction, SIGNAL(triggered()), this, SLOT(gotoSendCoinsPage())); + connect(receiveCoinsAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); + connect(receiveCoinsAction, SIGNAL(triggered()), this, SLOT(gotoReceiveCoinsPage())); + connect(historyAction, SIGNAL(triggered()), this, SLOT(showNormalIfMinimized())); + connect(historyAction, SIGNAL(triggered()), this, SLOT(gotoHistoryPage())); + + 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/bitmark"), tr("&About pfennig Core"), this); + else + aboutAction = new QAction(QIcon(":/icons/bitmark_testnet"), tr("&About pfennig Core"), this); + aboutAction->setStatusTip(tr("Show information about pfennig")); + 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); + optionsAction->setStatusTip(tr("Modify configuration options for pfennig")); + optionsAction->setMenuRole(QAction::PreferencesRole); + if (!fIsTestnet) + toggleHideAction = new QAction(QIcon(":/icons/bitmark"), tr("&Show / Hide"), this); + else + toggleHideAction = new QAction(QIcon(":/icons/bitmark_testnet"), tr("&Show / Hide"), this); + toggleHideAction->setStatusTip(tr("Show or hide the main Window")); + + encryptWalletAction = new QAction(QIcon(":/icons/lock_closed"), tr("&Encrypt Wallet..."), this); + encryptWalletAction->setStatusTip(tr("Encrypt the private keys that belong to your wallet")); + encryptWalletAction->setCheckable(true); + backupWalletAction = new QAction(QIcon(":/icons/filesave"), tr("&Backup Wallet..."), this); + backupWalletAction->setStatusTip(tr("Backup wallet to another location")); + changePassphraseAction = new QAction(QIcon(":/icons/key"), tr("&Change Passphrase..."), this); + changePassphraseAction->setStatusTip(tr("Change the passphrase used for wallet encryption")); + signMessageAction = new QAction(QIcon(":/icons/edit"), tr("Sign &message..."), this); + signMessageAction->setStatusTip(tr("Sign messages with your pfennig addresses to prove you own them")); + verifyMessageAction = new QAction(QIcon(":/icons/transaction_0"), tr("&Verify message..."), this); + verifyMessageAction->setStatusTip(tr("Verify messages to ensure they were signed with specified pfennig addresses")); + + 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 bitmark: URI or payment request")); + + showHelpMessageAction = new QAction(QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation), tr("&Command-line options"), this); + showHelpMessageAction->setStatusTip(tr("Show the pfennig Core help message to get a list with possible Bitmark 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(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 BitmarkGUI::createMenuBar() +{ +#ifdef Q_OS_MAC + // Create a decoupled menu bar on Mac which stays even if the window is closed + appMenuBar = new QMenuBar(); +#else + // Get the main window's menu bar on other platforms + appMenuBar = menuBar(); +#endif + + // Configure the menus + QMenu *file = appMenuBar->addMenu(tr("&File")); + 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")); + if(walletFrame) + { + settings->addAction(encryptWalletAction); + settings->addAction(changePassphraseAction); + settings->addSeparator(); + } + settings->addAction(optionsAction); + + QMenu *help = appMenuBar->addMenu(tr("&Help")); + if(walletFrame) + { + help->addAction(openRPCConsoleAction); + } + help->addAction(showHelpMessageAction); + help->addSeparator(); + help->addAction(aboutAction); + help->addAction(aboutQtAction); +} + +void BitmarkGUI::createToolBars() +{ + 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 BitmarkGUI::setClientModel(ClientModel *clientModel) +{ + this->clientModel = clientModel; + if(clientModel) + { + // Create system tray menu (or setup the dock menu) that late to prevent users from calling actions, + // while the client has not yet fully loaded + createTrayIconMenu(); + + // Keep up to date with client + setNumConnections(clientModel->getNumConnections()); + connect(clientModel, SIGNAL(numConnectionsChanged(int)), this, SLOT(setNumConnections(int))); + + setNumBlocks(clientModel->getNumBlocks()); + connect(clientModel, SIGNAL(numBlocksChanged(int)), this, SLOT(setNumBlocks(int))); + + // 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); +#ifdef ENABLE_WALLET + if(walletFrame) + { + walletFrame->setClientModel(clientModel); + } +#endif + } +} + +#ifdef ENABLE_WALLET +bool BitmarkGUI::addWallet(const QString& name, WalletModel *walletModel) +{ + if(!walletFrame) + return false; + setWalletActionsEnabled(true); + return walletFrame->addWallet(name, walletModel); +} + +bool BitmarkGUI::setCurrentWallet(const QString& name) +{ + if(!walletFrame) + return false; + return walletFrame->setCurrentWallet(name); +} + +void BitmarkGUI::removeAllWallets() +{ + if(!walletFrame) + return; + setWalletActionsEnabled(false); + walletFrame->removeAllWallets(); +} +#endif + +void BitmarkGUI::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 BitmarkGUI::createTrayIcon(bool fIsTestnet) +{ +#ifndef Q_OS_MAC + trayIcon = new QSystemTrayIcon(this); + + if (!fIsTestnet) + { + trayIcon->setToolTip(tr("pfennig client")); + trayIcon->setIcon(QIcon(":/icons/toolbar")); + } + else + { + trayIcon->setToolTip(tr("pfennig client") + " " + tr("[testnet]")); + trayIcon->setIcon(QIcon(":/icons/toolbar_testnet")); + } + + trayIcon->show(); +#endif + + notificator = new Notificator(QApplication::applicationName(), trayIcon, this); +} + +void BitmarkGUI::createTrayIconMenu() +{ + QMenu *trayIconMenu; +#ifndef Q_OS_MAC + // return if trayIcon is unset (only on non-Mac OSes) + if (!trayIcon) + return; + + trayIconMenu = new QMenu(this); + trayIcon->setContextMenu(trayIconMenu); + + connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), + this, SLOT(trayIconActivated(QSystemTrayIcon::ActivationReason))); +#else + // Note: On Mac, the dock icon is used to provide the tray's functionality. + MacDockIconHandler *dockIconHandler = MacDockIconHandler::instance(); + dockIconHandler->setMainWindow((QMainWindow *)this); + trayIconMenu = dockIconHandler->dockMenu(); +#endif + + // Configuration of the tray icon (or dock icon) icon menu + trayIconMenu->addAction(toggleHideAction); + trayIconMenu->addSeparator(); + trayIconMenu->addAction(sendCoinsAction); + trayIconMenu->addAction(receiveCoinsAction); + trayIconMenu->addSeparator(); + trayIconMenu->addAction(signMessageAction); + trayIconMenu->addAction(verifyMessageAction); + trayIconMenu->addSeparator(); + trayIconMenu->addAction(optionsAction); + trayIconMenu->addAction(openRPCConsoleAction); +#ifndef Q_OS_MAC // This is built-in on Mac + trayIconMenu->addSeparator(); + trayIconMenu->addAction(quitAction); +#endif +} + +#ifndef Q_OS_MAC +void BitmarkGUI::trayIconActivated(QSystemTrayIcon::ActivationReason reason) +{ + if(reason == QSystemTrayIcon::Trigger) + { + // Click on system tray icon triggers show/hide of the main window + toggleHideAction->trigger(); + } +} +#endif + +void BitmarkGUI::optionsClicked() +{ + if(!clientModel || !clientModel->getOptionsModel()) + return; + + OptionsDialog dlg(this); + dlg.setModel(clientModel->getOptionsModel()); + dlg.exec(); +} + +void BitmarkGUI::aboutClicked() +{ + if(!clientModel) + return; + + AboutDialog dlg(this); + dlg.setModel(clientModel); + dlg.exec(); +} + +void BitmarkGUI::showHelpMessageClicked() +{ + HelpMessageDialog *help = new HelpMessageDialog(this); + help->setAttribute(Qt::WA_DeleteOnClose); + help->show(); +} + +#ifdef ENABLE_WALLET +void BitmarkGUI::openClicked() +{ + OpenURIDialog dlg(this); + if(dlg.exec()) + { + emit receivedURI(dlg.getURI()); + } +} + +void BitmarkGUI::gotoOverviewPage() +{ + overviewAction->setChecked(true); + if (walletFrame) walletFrame->gotoOverviewPage(); +} + +void BitmarkGUI::gotoHistoryPage() +{ + historyAction->setChecked(true); + if (walletFrame) walletFrame->gotoHistoryPage(); +} + +void BitmarkGUI::gotoReceiveCoinsPage() +{ + receiveCoinsAction->setChecked(true); + if (walletFrame) walletFrame->gotoReceiveCoinsPage(); +} + +void BitmarkGUI::gotoSendCoinsPage(QString addr) +{ + sendCoinsAction->setChecked(true); + if (walletFrame) walletFrame->gotoSendCoinsPage(addr); +} + +void BitmarkGUI::gotoSignMessageTab(QString addr) +{ + if (walletFrame) walletFrame->gotoSignMessageTab(addr); +} + +void BitmarkGUI::gotoVerifyMessageTab(QString addr) +{ + if (walletFrame) walletFrame->gotoVerifyMessageTab(addr); +} +#endif + +void BitmarkGUI::setNumConnections(int count) +{ + QString icon; + switch(count) + { + case 0: icon = ":/icons/connect_0"; break; + case 1: case 2: case 3: icon = ":/icons/connect_1"; break; + case 4: case 5: case 6: icon = ":/icons/connect_2"; break; + case 7: case 8: case 9: icon = ":/icons/connect_3"; break; + default: icon = ":/icons/connect_4"; break; + } + labelConnectionsIcon->setPixmap(QIcon(icon).pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); + labelConnectionsIcon->setToolTip(tr("%n active connection(s) to pfennig network", "", count)); +} + +void BitmarkGUI::setNumBlocks(int count) +{ + // Prevent orphan statusbar messages (e.g. hover Quit in main menu, wait until chain-sync starts -> garbelled text) + statusBar()->clearMessage(); + + // Acquire current block source + enum BlockSource blockSource = clientModel->getBlockSource(); + switch (blockSource) { + case BLOCK_SOURCE_NETWORK: + progressBarLabel->setText(tr("Synchronizing with network...")); + break; + case BLOCK_SOURCE_DISK: + progressBarLabel->setText(tr("Importing blocks from disk...")); + break; + case BLOCK_SOURCE_REINDEX: + progressBarLabel->setText(tr("Reindexing blocks on disk...")); + break; + case BLOCK_SOURCE_NONE: + // Case: not Importing, not Reindexing and no network connection + progressBarLabel->setText(tr("No block source available...")); + break; + } + + QString tooltip; + + QDateTime lastBlockDate = clientModel->getLastBlockDate(); + QDateTime currentDate = QDateTime::currentDateTime(); + int secs = lastBlockDate.secsTo(currentDate); + + tooltip = tr("Processed %1 blocks of transaction history.").arg(count); + + // Set icon state: spinning if catching up, tick otherwise + if(secs < 90*60) + { + tooltip = tr("Up to date") + QString(".
") + tooltip; + labelBlocksIcon->setPixmap(QIcon(":/icons/synced").pixmap(STATUSBAR_ICONSIZE, STATUSBAR_ICONSIZE)); + +#ifdef ENABLE_WALLET + if(walletFrame) + walletFrame->showOutOfSyncWarning(false); +#endif + + progressBarLabel->setVisible(false); + progressBar->setVisible(false); + } + else + { + // Represent time from last generated block in human readable text + QString timeBehindText; + 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/HOUR_IN_SECONDS); + } + else if(secs < 2*WEEK_IN_SECONDS) + { + 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 + { + 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); + progressBar->setFormat(tr("%1 behind").arg(timeBehindText)); + progressBar->setMaximum(1000000000); + progressBar->setValue(clientModel->getVerificationProgress() * 1000000000.0 + 0.5); + progressBar->setVisible(true); + + tooltip = tr("Catching up...") + QString("
") + tooltip; + if(count != prevBlocks) + { + 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; + +#ifdef ENABLE_WALLET + if(walletFrame) + walletFrame->showOutOfSyncWarning(true); +#endif + + tooltip += QString("
"); + tooltip += tr("Last received block was generated %1 ago.").arg(timeBehindText); + tooltip += QString("
"); + tooltip += tr("Transactions after this will not yet be visible."); + } + + // Don't word-wrap this (fixed-width) tooltip + tooltip = QString("") + tooltip + QString(""); + + labelBlocksIcon->setToolTip(tooltip); + progressBarLabel->setToolTip(tooltip); + progressBar->setToolTip(tooltip); +} + +void BitmarkGUI::message(const QString &title, const QString &message, unsigned int style, bool *ret) +{ + QString strTitle = tr("pfennig"); // default title + // Default to information icon + int nMBoxIcon = QMessageBox::Information; + int nNotifyIcon = Notificator::Information; + + QString msgType; + + // 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 "pfennig - " + if (!msgType.isEmpty()) + strTitle += " - " + msgType; + + // Check for error/warning icon + if (style & CClientUIInterface::ICON_ERROR) { + nMBoxIcon = QMessageBox::Critical; + nNotifyIcon = Notificator::Critical; + } + else if (style & CClientUIInterface::ICON_WARNING) { + nMBoxIcon = QMessageBox::Warning; + nNotifyIcon = Notificator::Warning; + } + + // Display message + if (style & CClientUIInterface::MODAL) { + // Check for buttons, use OK as default, if none was supplied + QMessageBox::StandardButton buttons; + if (!(buttons = (QMessageBox::StandardButton)(style & CClientUIInterface::BTN_MASK))) + buttons = QMessageBox::Ok; + + // 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; + } + else + notificator->notify((Notificator::Class)nNotifyIcon, strTitle, message); +} + +void BitmarkGUI::changeEvent(QEvent *e) +{ + QMainWindow::changeEvent(e); +#ifndef Q_OS_MAC // Ignored on Mac + if(e->type() == QEvent::WindowStateChange) + { + if(clientModel && clientModel->getOptionsModel()->getMinimizeToTray()) + { + QWindowStateChangeEvent *wsevt = static_cast(e); + if(!(wsevt->oldState() & Qt::WindowMinimized) && isMinimized()) + { + QTimer::singleShot(0, this, SLOT(hide())); + e->ignore(); + } + } + } +#endif +} + +void BitmarkGUI::closeEvent(QCloseEvent *event) +{ + if(clientModel) + { +#ifndef Q_OS_MAC // Ignored on Mac + if(!clientModel->getOptionsModel()->getMinimizeToTray() && + !clientModel->getOptionsModel()->getMinimizeOnClose()) + { + QApplication::quit(); + } +#endif + } + QMainWindow::closeEvent(event); +} + +#ifdef ENABLE_WALLET +void BitmarkGUI::incomingTransaction(const QString& date, int unit, qint64 amount, const QString& type, const QString& address) +{ + // On new transaction, make an info balloon + message((amount)<0 ? tr("Sent transaction") : tr("Incoming transaction"), + tr("Date: %1\n" + "Amount: %2\n" + "Type: %3\n" + "Address: %4\n") + .arg(date) + .arg(BitmarkUnits::formatWithUnit(unit, amount, true)) + .arg(type) + .arg(address), CClientUIInterface::MSG_INFORMATION); +} +#endif + +void BitmarkGUI::dragEnterEvent(QDragEnterEvent *event) +{ + // Accept only URIs + if(event->mimeData()->hasUrls()) + event->acceptProposedAction(); +} + +void BitmarkGUI::dropEvent(QDropEvent *event) +{ + if(event->mimeData()->hasUrls()) + { + foreach(const QUrl &uri, event->mimeData()->urls()) + { + emit receivedURI(uri.toString()); + } + } + event->acceptProposedAction(); +} + +bool BitmarkGUI::eventFilter(QObject *object, QEvent *event) +{ + // Catch status tip events + if (event->type() == QEvent::StatusTip) + { + // Prevent adding text from setStatusTip(), if we currently use the status bar for displaying other stuff + if (progressBarLabel->isVisible() || progressBar->isVisible()) + return true; + } + return QMainWindow::eventFilter(object, event); +} + +#ifdef ENABLE_WALLET +bool BitmarkGUI::handlePaymentRequest(const SendCoinsRecipient& recipient) +{ + // URI has to be valid + if (walletFrame && walletFrame->handlePaymentRequest(recipient)) + { + showNormalIfMinimized(); + gotoSendCoinsPage(); + return true; + } + else + return false; +} + +void BitmarkGUI::setEncryptionStatus(int status) +{ + switch(status) + { + case WalletModel::Unencrypted: + labelEncryptionIcon->hide(); + encryptWalletAction->setChecked(false); + changePassphraseAction->setEnabled(false); + encryptWalletAction->setEnabled(true); + break; + case WalletModel::Unlocked: + labelEncryptionIcon->show(); + labelEncryptionIcon->setPixmap(QIcon(":/icons/lock_open").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); + labelEncryptionIcon->setToolTip(tr("Wallet is encrypted and currently unlocked")); + encryptWalletAction->setChecked(true); + changePassphraseAction->setEnabled(true); + encryptWalletAction->setEnabled(false); // TODO: decrypt currently not supported + break; + case WalletModel::Locked: + labelEncryptionIcon->show(); + labelEncryptionIcon->setPixmap(QIcon(":/icons/lock_closed").pixmap(STATUSBAR_ICONSIZE,STATUSBAR_ICONSIZE)); + labelEncryptionIcon->setToolTip(tr("Wallet is encrypted and currently locked")); + encryptWalletAction->setChecked(true); + changePassphraseAction->setEnabled(true); + encryptWalletAction->setEnabled(false); // TODO: decrypt currently not supported + break; + } +} +#endif + +void BitmarkGUI::showNormalIfMinimized(bool fToggleHidden) +{ + // activateWindow() (sometimes) helps with keyboard focus on Windows + if (isHidden()) + { + show(); + activateWindow(); + } + else if (isMinimized()) + { + showNormal(); + activateWindow(); + } + else if (GUIUtil::isObscured(this)) + { + raise(); + activateWindow(); + } + else if(fToggleHidden) + hide(); +} + +void BitmarkGUI::toggleHidden() +{ + showNormalIfMinimized(true); +} + +void BitmarkGUI::detectShutdown() +{ + if (ShutdownRequested()) + { + if(rpcConsole) + rpcConsole->hide(); + qApp->quit(); + } +} + +static bool ThreadSafeMessageBox(BitmarkGUI *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 BitmarkGUI::subscribeToCoreSignals() +{ + // Connect signals to client + uiInterface.ThreadSafeMessageBox.connect(boost::bind(ThreadSafeMessageBox, this, _1, _2, _3)); +} + +void BitmarkGUI::unsubscribeFromCoreSignals() +{ + // Disconnect signals from client + uiInterface.ThreadSafeMessageBox.disconnect(boost::bind(ThreadSafeMessageBox, this, _1, _2, _3)); +} diff --git a/src/qt/bitmarkgui.h b/src/qt/bitmarkgui.h index e626c70..1722d83 100644 --- a/src/qt/bitmarkgui.h +++ b/src/qt/bitmarkgui.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/bitmarkgui.h~ b/src/qt/bitmarkgui.h~ new file mode 100644 index 0000000..e9e416b --- /dev/null +++ b/src/qt/bitmarkgui.h~ @@ -0,0 +1,197 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARKGUI_H +#define BITMARKGUI_H + +#if defined(HAVE_CONFIG_H) +#include "bitmark-config.h" +#endif + +#include +#include +#include + +class ClientModel; +class Notificator; +class RPCConsole; +class SendCoinsRecipient; +class WalletFrame; +class WalletModel; + +class CWallet; + +QT_BEGIN_NAMESPACE +class QAction; +class QLabel; +class QProgressBar; +QT_END_NAMESPACE + +/** + Bitmark GUI main class. This class represents the main window of the Bitmark UI. It communicates with both the client and + wallet models to give the user an up-to-date view of the current core state. +*/ +class BitmarkGUI : public QMainWindow +{ + Q_OBJECT + +public: + static const QString DEFAULT_WALLET; + + explicit BitmarkGUI(bool fIsTestnet = false, QWidget *parent = 0); + ~BitmarkGUI(); + + /** Set the client model. + 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 bitmark 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(); +#endif + +protected: + void changeEvent(QEvent *e); + void closeEvent(QCloseEvent *event); + void dragEnterEvent(QDragEnterEvent *event); + void dropEvent(QDropEvent *event); + bool eventFilter(QObject *object, QEvent *event); + +private: + ClientModel *clientModel; + WalletFrame *walletFrame; + + QLabel *labelEncryptionIcon; + QLabel *labelConnectionsIcon; + QLabel *labelBlocksIcon; + QLabel *progressBarLabel; + QProgressBar *progressBar; + + QMenuBar *appMenuBar; + QAction *overviewAction; + QAction *historyAction; + QAction *quitAction; + QAction *sendCoinsAction; + QAction *usedSendingAddressesAction; + QAction *usedReceivingAddressesAction; + QAction *signMessageAction; + QAction *verifyMessageAction; + QAction *aboutAction; + QAction *receiveCoinsAction; + QAction *optionsAction; + QAction *toggleHideAction; + QAction *encryptWalletAction; + QAction *backupWalletAction; + QAction *changePassphraseAction; + QAction *aboutQtAction; + QAction *openRPCConsoleAction; + QAction *openAction; + QAction *showHelpMessageAction; + + QSystemTrayIcon *trayIcon; + Notificator *notificator; + RPCConsole *rpcConsole; + + /** Keep track of previous number of blocks, to detect progress */ + int prevBlocks; + int spinnerFrame; + + /** Create the main UI actions. */ + void createActions(bool fIsTestnet); + /** Create the menu bar and sub-menus. */ + void createMenuBar(); + /** Create the toolbars */ + void createToolBars(); + /** Create system tray icon and notification */ + void createTrayIcon(bool fIsTestnet); + /** Create system tray menu (or setup the dock menu) */ + void createTrayIconMenu(); + + /** 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); + + /** Notify the user of an event from the core network or transaction handling code. + @param[in] title the message box / notification title + @param[in] message the displayed text + @param[in] style modality and style definitions (icon and used buttons - buttons only for message boxes) + @see CClientUIInterface::MessageBoxFlags + @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); + +#ifdef ENABLE_WALLET + /** Set the encryption status as shown in the UI. + @param[in] status current encryption status + @see WalletModel::EncryptionStatus + */ + 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 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 = ""); + + /** 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); +#endif + + /** Show window if hidden, unminimize when minimized, rise when obscured or show if hidden and fToggleHidden is true */ + void showNormalIfMinimized(bool fToggleHidden = false); + /** Simply calls showNormalIfMinimized(true) for use in SLOT() macro */ + void toggleHidden(); + + /** called by a timer to check if fRequestShutdown has been set **/ + void detectShutdown(); +}; + +#endif // BITMARKGUI_H diff --git a/src/qt/bitmarkstrings.cpp b/src/qt/bitmarkstrings.cpp index faaa22d..c2e4c60 100644 --- a/src/qt/bitmarkstrings.cpp +++ b/src/qt/bitmarkstrings.cpp @@ -9,274 +9,274 @@ #define UNUSED #endif static const char UNUSED *bitmark_strings[] = { -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "%s, you must set a rpcpassword in the configuration file:\n" "%s\n" "It is recommended you use the following random password:\n" -"rpcuser=bitmarkrpc\n" +"rpcuser=pfennigrpc\n" "rpcpassword=%s\n" "(you do not need to remember this password)\n" "The username and password MUST NOT be the same.\n" "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 \"Pfennig Alert\" admin@foo.com\n"), -QT_TRANSLATE_NOOP("bitmark-core", "" +"for example: alertnotify=echo %%s | mail -s \"pfennig Alert\" admin@foo.com\n"), +QT_TRANSLATE_NOOP("pfennig-core", "" "Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!" "3DES:@STRENGTH)"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "An error occurred while setting up the RPC port %u for listening on IPv4: %s"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "An error occurred while setting up the RPC port %u for listening on IPv6, " "falling back to IPv4: %s"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "Bind to given address and always listen on it. Use [host]:port notation for " "IPv6"), -QT_TRANSLATE_NOOP("bitmark-core", "" -"Cannot obtain a lock on data directory %s. Pfennig Core is probably already " +QT_TRANSLATE_NOOP("pfennig-core", "" +"Cannot obtain a lock on data directory %s. pfennig Core is probably already " "running."), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "Continuously rate-limit free transactions to *1000 bytes per minute " "(default:15)"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-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("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "Enter regression test mode, which uses a special chain in which blocks can " "be solved instantly."), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "Error: Listening for incoming connections failed (listen returned error %d)"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-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."), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-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("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "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("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "Execute command when a wallet transaction changes (%s in cmd is replaced by " "TxID)"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "Execute command when the best block changes (%s in cmd is replaced by block " "hash)"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "Fees smaller than this are considered zero fee (for transaction creation) " "(default:"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "Flush database activity from memory pool to disk log every megabytes " "(default: 100)"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "How thorough the block verification of -checkblocks is (0-4, default: 3)"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "In this mode -genproclimit controls how many blocks are generated " "immediately."), -QT_TRANSLATE_NOOP("bitmark-core", "" -"Listen for JSON-RPC connections on (default: RPCPORT or testnet: 1RPCPORT)"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" +"Listen for JSON-RPC connections on (default: 40001 or testnet: 50000)"), +QT_TRANSLATE_NOOP("pfennig-core", "" "Number of seconds to keep misbehaving peers from reconnecting (default: " "86400)"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "Output debugging information (default: 0, supplying is optional)"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "Set maximum size of high-priority/low-fee transactions in bytes (default: %d)"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "Set the number of script verification threads (%u to %d, 0 = auto, <0 = " "leave that many cores free, default: %d)"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "Set the processor limit for when generation is on (-1 = unlimited, default: " "-1)"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "This is a pre-release test build - use at your own risk - do not use for " "mining or merchant applications"), -QT_TRANSLATE_NOOP("bitmark-core", "" -"Unable to bind to %s on this computer. Pfennig Core is probably already " +QT_TRANSLATE_NOOP("pfennig-core", "" +"Unable to bind to %s on this computer. pfennig Core is probably already " "running."), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -" "proxy)"), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "Warning: -paytxfee is set very high! This is the transaction fee you will " "pay if you send a transaction."), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "Warning: Please check that your computer's date and time are correct! If " -"your clock is wrong Pfennig will not work properly."), -QT_TRANSLATE_NOOP("bitmark-core", "" +"your clock is wrong pfennig will not work properly."), +QT_TRANSLATE_NOOP("pfennig-core", "" "Warning: The network does not appear to fully agree! Some miners appear to " "be experiencing issues."), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-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("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-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("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "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."), -QT_TRANSLATE_NOOP("bitmark-core", "" +QT_TRANSLATE_NOOP("pfennig-core", "" "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."), -QT_TRANSLATE_NOOP("bitmark-core", "(default: 1)"), -QT_TRANSLATE_NOOP("bitmark-core", "(default: wallet.dat)"), -QT_TRANSLATE_NOOP("bitmark-core", " can be:"), -QT_TRANSLATE_NOOP("bitmark-core", "Accept command line and JSON-RPC commands"), -QT_TRANSLATE_NOOP("bitmark-core", "Accept connections from outside (default: 1 if no -proxy or -connect)"), -QT_TRANSLATE_NOOP("bitmark-core", "Add a node to connect to and attempt to keep the connection open"), -QT_TRANSLATE_NOOP("bitmark-core", "Allow DNS lookups for -addnode, -seednode and -connect"), -QT_TRANSLATE_NOOP("bitmark-core", "Allow JSON-RPC connections from specified IP address"), -QT_TRANSLATE_NOOP("bitmark-core", "Attempt to recover private keys from a corrupt wallet.dat"), -QT_TRANSLATE_NOOP("bitmark-core", "Pfennig Core Daemon"), -QT_TRANSLATE_NOOP("bitmark-core", "Pfennig Core RPC client version"), -QT_TRANSLATE_NOOP("bitmark-core", "Block creation options:"), -QT_TRANSLATE_NOOP("bitmark-core", "Cannot downgrade wallet"), -QT_TRANSLATE_NOOP("bitmark-core", "Cannot resolve -bind address: '%s'"), -QT_TRANSLATE_NOOP("bitmark-core", "Cannot resolve -externalip address: '%s'"), -QT_TRANSLATE_NOOP("bitmark-core", "Cannot write default address"), -QT_TRANSLATE_NOOP("bitmark-core", "Clear list of wallet transactions (diagnostic tool; implies -rescan)"), -QT_TRANSLATE_NOOP("bitmark-core", "Connect only to the specified node(s)"), -QT_TRANSLATE_NOOP("bitmark-core", "Connect through SOCKS proxy"), -QT_TRANSLATE_NOOP("bitmark-core", "Connect to JSON-RPC on (default: RPCPORT or testnet: 1RPCPORT)"), -QT_TRANSLATE_NOOP("bitmark-core", "Connect to a node to retrieve peer addresses, and disconnect"), -QT_TRANSLATE_NOOP("bitmark-core", "Connection options:"), -QT_TRANSLATE_NOOP("bitmark-core", "Corrupted block database detected"), -QT_TRANSLATE_NOOP("bitmark-core", "Debugging/Testing options:"), -QT_TRANSLATE_NOOP("bitmark-core", "Disable safemode, override a real safe mode event (default: 0)"), -QT_TRANSLATE_NOOP("bitmark-core", "Discover own IP address (default: 1 when listening and no -externalip)"), -QT_TRANSLATE_NOOP("bitmark-core", "Do not load the wallet and disable wallet RPC calls"), -QT_TRANSLATE_NOOP("bitmark-core", "Do you want to rebuild the block database now?"), -QT_TRANSLATE_NOOP("bitmark-core", "Done loading"), -QT_TRANSLATE_NOOP("bitmark-core", "Error initializing block database"), -QT_TRANSLATE_NOOP("bitmark-core", "Error initializing wallet database environment %s!"), -QT_TRANSLATE_NOOP("bitmark-core", "Error loading block database"), -QT_TRANSLATE_NOOP("bitmark-core", "Error loading wallet.dat"), -QT_TRANSLATE_NOOP("bitmark-core", "Error loading wallet.dat: Wallet corrupted"), -QT_TRANSLATE_NOOP("bitmark-core", "Error loading wallet.dat: Wallet requires newer version of Pfennig"), -QT_TRANSLATE_NOOP("bitmark-core", "Error opening block database"), -QT_TRANSLATE_NOOP("bitmark-core", "Error"), -QT_TRANSLATE_NOOP("bitmark-core", "Error: Disk space is low!"), -QT_TRANSLATE_NOOP("bitmark-core", "Error: Wallet locked, unable to create transaction!"), -QT_TRANSLATE_NOOP("bitmark-core", "Error: system error: "), -QT_TRANSLATE_NOOP("bitmark-core", "Failed to listen on any port. Use -listen=0 if you want this."), -QT_TRANSLATE_NOOP("bitmark-core", "Failed to read block info"), -QT_TRANSLATE_NOOP("bitmark-core", "Failed to read block"), -QT_TRANSLATE_NOOP("bitmark-core", "Failed to sync block index"), -QT_TRANSLATE_NOOP("bitmark-core", "Failed to write block index"), -QT_TRANSLATE_NOOP("bitmark-core", "Failed to write block info"), -QT_TRANSLATE_NOOP("bitmark-core", "Failed to write block"), -QT_TRANSLATE_NOOP("bitmark-core", "Failed to write file info"), -QT_TRANSLATE_NOOP("bitmark-core", "Failed to write to coin database"), -QT_TRANSLATE_NOOP("bitmark-core", "Failed to write transaction index"), -QT_TRANSLATE_NOOP("bitmark-core", "Failed to write undo data"), -QT_TRANSLATE_NOOP("bitmark-core", "Fee per kB to add to transactions you send"), -QT_TRANSLATE_NOOP("bitmark-core", "Fees smaller than this are considered zero fee (for relaying) (default:"), -QT_TRANSLATE_NOOP("bitmark-core", "Find peers using DNS lookup (default: 1 unless -connect)"), -QT_TRANSLATE_NOOP("bitmark-core", "Force safe mode (default: 0)"), -QT_TRANSLATE_NOOP("bitmark-core", "Generate coins (default: 0)"), -QT_TRANSLATE_NOOP("bitmark-core", "Get help for a command"), -QT_TRANSLATE_NOOP("bitmark-core", "How many blocks to check at startup (default: 288, 0 = all)"), -QT_TRANSLATE_NOOP("bitmark-core", "If is not supplied, output all debugging information."), -QT_TRANSLATE_NOOP("bitmark-core", "Importing..."), -QT_TRANSLATE_NOOP("bitmark-core", "Imports blocks from external blk000??.dat file"), -QT_TRANSLATE_NOOP("bitmark-core", "Incorrect or no genesis block found. Wrong datadir for network?"), -QT_TRANSLATE_NOOP("bitmark-core", "Information"), -QT_TRANSLATE_NOOP("bitmark-core", "Insufficient funds"), -QT_TRANSLATE_NOOP("bitmark-core", "Invalid -onion address: '%s'"), -QT_TRANSLATE_NOOP("bitmark-core", "Invalid -proxy address: '%s'"), -QT_TRANSLATE_NOOP("bitmark-core", "Invalid amount for -minrelaytxfee=: '%s'"), -QT_TRANSLATE_NOOP("bitmark-core", "Invalid amount for -mintxfee=: '%s'"), -QT_TRANSLATE_NOOP("bitmark-core", "Invalid amount for -paytxfee=: '%s'"), -QT_TRANSLATE_NOOP("bitmark-core", "Invalid amount"), -QT_TRANSLATE_NOOP("bitmark-core", "Limit size of signature cache to entries (default: 50000)"), -QT_TRANSLATE_NOOP("bitmark-core", "List commands"), -QT_TRANSLATE_NOOP("bitmark-core", "Listen for connections on (default: P2PPORT or testnet: 1P2PPORT)"), -QT_TRANSLATE_NOOP("bitmark-core", "Loading addresses..."), -QT_TRANSLATE_NOOP("bitmark-core", "Loading block index..."), -QT_TRANSLATE_NOOP("bitmark-core", "Loading wallet..."), -QT_TRANSLATE_NOOP("bitmark-core", "Log transaction priority and fee per kB when mining blocks (default: 0)"), -QT_TRANSLATE_NOOP("bitmark-core", "Maintain a full transaction index (default: 0)"), -QT_TRANSLATE_NOOP("bitmark-core", "Maintain at most connections to peers (default: 125)"), -QT_TRANSLATE_NOOP("bitmark-core", "Maximum per-connection receive buffer, *1000 bytes (default: 5000)"), -QT_TRANSLATE_NOOP("bitmark-core", "Maximum per-connection send buffer, *1000 bytes (default: 1000)"), -QT_TRANSLATE_NOOP("bitmark-core", "Not enough file descriptors available."), -QT_TRANSLATE_NOOP("bitmark-core", "Only accept block chain matching built-in checkpoints (default: 1)"), -QT_TRANSLATE_NOOP("bitmark-core", "Only connect to nodes in network (IPv4, IPv6 or Tor)"), -QT_TRANSLATE_NOOP("bitmark-core", "Options:"), -QT_TRANSLATE_NOOP("bitmark-core", "Password for JSON-RPC connections"), -QT_TRANSLATE_NOOP("bitmark-core", "Prepend debug output with timestamp (default: 1)"), -QT_TRANSLATE_NOOP("bitmark-core", "Print block on startup, if found in block index"), -QT_TRANSLATE_NOOP("bitmark-core", "Print block tree on startup (default: 0)"), -QT_TRANSLATE_NOOP("bitmark-core", "RPC SSL options: (see the Bitmark Wiki for SSL setup instructions)"), -QT_TRANSLATE_NOOP("bitmark-core", "RPC client options:"), -QT_TRANSLATE_NOOP("bitmark-core", "RPC server options:"), -QT_TRANSLATE_NOOP("bitmark-core", "Randomly drop 1 of every network messages"), -QT_TRANSLATE_NOOP("bitmark-core", "Randomly fuzz 1 of every network messages"), -QT_TRANSLATE_NOOP("bitmark-core", "Rebuild block chain index from current blk000??.dat files"), -QT_TRANSLATE_NOOP("bitmark-core", "Rescan the block chain for missing wallet transactions"), -QT_TRANSLATE_NOOP("bitmark-core", "Rescanning..."), -QT_TRANSLATE_NOOP("bitmark-core", "Run a thread to flush wallet periodically (default: 1)"), -QT_TRANSLATE_NOOP("bitmark-core", "Run in the background as a daemon and accept commands"), -QT_TRANSLATE_NOOP("bitmark-core", "SSL options: (see the Bitmark Wiki for SSL setup instructions)"), -QT_TRANSLATE_NOOP("bitmark-core", "Select SOCKS version for -proxy (4 or 5, default: 5)"), -QT_TRANSLATE_NOOP("bitmark-core", "Send command to Pfennig Core"), -QT_TRANSLATE_NOOP("bitmark-core", "Send commands to node running on (default: 127.0.0.1)"), -QT_TRANSLATE_NOOP("bitmark-core", "Send trace/debug info to console instead of debug.log file"), -QT_TRANSLATE_NOOP("bitmark-core", "Server certificate file (default: server.cert)"), -QT_TRANSLATE_NOOP("bitmark-core", "Server private key (default: server.pem)"), -QT_TRANSLATE_NOOP("bitmark-core", "Set database cache size in megabytes (%d to %d, default: %d)"), -QT_TRANSLATE_NOOP("bitmark-core", "Set key pool size to (default: 100)"), -QT_TRANSLATE_NOOP("bitmark-core", "Set maximum block size in bytes (default: %d)"), -QT_TRANSLATE_NOOP("bitmark-core", "Set minimum block size in bytes (default: 0)"), -QT_TRANSLATE_NOOP("bitmark-core", "Set the number of threads to service RPC calls (default: 4)"), -QT_TRANSLATE_NOOP("bitmark-core", "Sets the DB_PRIVATE flag in the wallet db environment (default: 1)"), -QT_TRANSLATE_NOOP("bitmark-core", "Show all debugging options (usage: --help -help-debug)"), -QT_TRANSLATE_NOOP("bitmark-core", "Show benchmark information (default: 0)"), -QT_TRANSLATE_NOOP("bitmark-core", "Shrink debug.log file on client startup (default: 1 when no -debug)"), -QT_TRANSLATE_NOOP("bitmark-core", "Signing transaction failed"), -QT_TRANSLATE_NOOP("bitmark-core", "Specify configuration file (default: bitmark.conf)"), -QT_TRANSLATE_NOOP("bitmark-core", "Specify connection timeout in milliseconds (default: 5000)"), -QT_TRANSLATE_NOOP("bitmark-core", "Specify data directory"), -QT_TRANSLATE_NOOP("bitmark-core", "Specify pid file (default: pfennigd.pid)"), -QT_TRANSLATE_NOOP("bitmark-core", "Specify wallet file (within data directory)"), -QT_TRANSLATE_NOOP("bitmark-core", "Specify your own public address"), -QT_TRANSLATE_NOOP("bitmark-core", "Spend unconfirmed change when sending transactions (default: 1)"), -QT_TRANSLATE_NOOP("bitmark-core", "Start Pfennig Core Daemon"), -QT_TRANSLATE_NOOP("bitmark-core", "System error: "), -QT_TRANSLATE_NOOP("bitmark-core", "This help message"), -QT_TRANSLATE_NOOP("bitmark-core", "This is intended for regression testing tools and app development."), -QT_TRANSLATE_NOOP("bitmark-core", "Threshold for disconnecting misbehaving peers (default: 100)"), -QT_TRANSLATE_NOOP("bitmark-core", "To use the %s option"), -QT_TRANSLATE_NOOP("bitmark-core", "Transaction amount too small"), -QT_TRANSLATE_NOOP("bitmark-core", "Transaction amounts must be positive"), -QT_TRANSLATE_NOOP("bitmark-core", "Transaction too large"), -QT_TRANSLATE_NOOP("bitmark-core", "Unable to bind to %s on this computer (bind returned error %d, %s)"), -QT_TRANSLATE_NOOP("bitmark-core", "Unknown -socks proxy version requested: %i"), -QT_TRANSLATE_NOOP("bitmark-core", "Unknown network specified in -onlynet: '%s'"), -QT_TRANSLATE_NOOP("bitmark-core", "Upgrade wallet to latest format"), -QT_TRANSLATE_NOOP("bitmark-core", "Usage (deprecated, use pfennig-cli):"), -QT_TRANSLATE_NOOP("bitmark-core", "Usage:"), -QT_TRANSLATE_NOOP("bitmark-core", "Use OpenSSL (https) for JSON-RPC connections"), -QT_TRANSLATE_NOOP("bitmark-core", "Use UPnP to map the listening port (default: 0)"), -QT_TRANSLATE_NOOP("bitmark-core", "Use UPnP to map the listening port (default: 1 when listening)"), -QT_TRANSLATE_NOOP("bitmark-core", "Use the test network"), -QT_TRANSLATE_NOOP("bitmark-core", "Username for JSON-RPC connections"), -QT_TRANSLATE_NOOP("bitmark-core", "Verifying blocks..."), -QT_TRANSLATE_NOOP("bitmark-core", "Verifying wallet..."), -QT_TRANSLATE_NOOP("bitmark-core", "Wait for RPC server to start"), -QT_TRANSLATE_NOOP("bitmark-core", "Wallet %s resides outside data directory %s"), -QT_TRANSLATE_NOOP("bitmark-core", "Wallet needed to be rewritten: restart Pfennig to complete"), -QT_TRANSLATE_NOOP("bitmark-core", "Wallet options:"), -QT_TRANSLATE_NOOP("bitmark-core", "Warning"), -QT_TRANSLATE_NOOP("bitmark-core", "Warning: Deprecated argument -debugnet ignored, use -debug=net"), -QT_TRANSLATE_NOOP("bitmark-core", "Warning: This version is obsolete, upgrade required!"), -QT_TRANSLATE_NOOP("bitmark-core", "You need to rebuild the database using -reindex to change -txindex"), -QT_TRANSLATE_NOOP("bitmark-core", "Zapping all transactions from wallet..."), -QT_TRANSLATE_NOOP("bitmark-core", "on startup"), -QT_TRANSLATE_NOOP("bitmark-core", "version"), -QT_TRANSLATE_NOOP("bitmark-core", "wallet.dat corrupt, salvage failed"), +QT_TRANSLATE_NOOP("pfennig-core", "(default: 1)"), +QT_TRANSLATE_NOOP("pfennig-core", "(default: wallet.dat)"), +QT_TRANSLATE_NOOP("pfennig-core", " can be:"), +QT_TRANSLATE_NOOP("pfennig-core", "Accept command line and JSON-RPC commands"), +QT_TRANSLATE_NOOP("pfennig-core", "Accept connections from outside (default: 1 if no -proxy or -connect)"), +QT_TRANSLATE_NOOP("pfennig-core", "Add a node to connect to and attempt to keep the connection open"), +QT_TRANSLATE_NOOP("pfennig-core", "Allow DNS lookups for -addnode, -seednode and -connect"), +QT_TRANSLATE_NOOP("pfennig-core", "Allow JSON-RPC connections from specified IP address"), +QT_TRANSLATE_NOOP("pfennig-core", "Attempt to recover private keys from a corrupt wallet.dat"), +QT_TRANSLATE_NOOP("pfennig-core", "pfennig Core Daemon"), +QT_TRANSLATE_NOOP("pfennig-core", "pfennig Core RPC client version"), +QT_TRANSLATE_NOOP("pfennig-core", "Block creation options:"), +QT_TRANSLATE_NOOP("pfennig-core", "Cannot downgrade wallet"), +QT_TRANSLATE_NOOP("pfennig-core", "Cannot resolve -bind address: '%s'"), +QT_TRANSLATE_NOOP("pfennig-core", "Cannot resolve -externalip address: '%s'"), +QT_TRANSLATE_NOOP("pfennig-core", "Cannot write default address"), +QT_TRANSLATE_NOOP("pfennig-core", "Clear list of wallet transactions (diagnostic tool; implies -rescan)"), +QT_TRANSLATE_NOOP("pfennig-core", "Connect only to the specified node(s)"), +QT_TRANSLATE_NOOP("pfennig-core", "Connect through SOCKS proxy"), +QT_TRANSLATE_NOOP("pfennig-core", "Connect to JSON-RPC on (default: 40001 or testnet: 50000)"), +QT_TRANSLATE_NOOP("pfennig-core", "Connect to a node to retrieve peer addresses, and disconnect"), +QT_TRANSLATE_NOOP("pfennig-core", "Connection options:"), +QT_TRANSLATE_NOOP("pfennig-core", "Corrupted block database detected"), +QT_TRANSLATE_NOOP("pfennig-core", "Debugging/Testing options:"), +QT_TRANSLATE_NOOP("pfennig-core", "Disable safemode, override a real safe mode event (default: 0)"), +QT_TRANSLATE_NOOP("pfennig-core", "Discover own IP address (default: 1 when listening and no -externalip)"), +QT_TRANSLATE_NOOP("pfennig-core", "Do not load the wallet and disable wallet RPC calls"), +QT_TRANSLATE_NOOP("pfennig-core", "Do you want to rebuild the block database now?"), +QT_TRANSLATE_NOOP("pfennig-core", "Done loading"), +QT_TRANSLATE_NOOP("pfennig-core", "Error initializing block database"), +QT_TRANSLATE_NOOP("pfennig-core", "Error initializing wallet database environment %s!"), +QT_TRANSLATE_NOOP("pfennig-core", "Error loading block database"), +QT_TRANSLATE_NOOP("pfennig-core", "Error loading wallet.dat"), +QT_TRANSLATE_NOOP("pfennig-core", "Error loading wallet.dat: Wallet corrupted"), +QT_TRANSLATE_NOOP("pfennig-core", "Error loading wallet.dat: Wallet requires newer version of pfennig"), +QT_TRANSLATE_NOOP("pfennig-core", "Error opening block database"), +QT_TRANSLATE_NOOP("pfennig-core", "Error"), +QT_TRANSLATE_NOOP("pfennig-core", "Error: Disk space is low!"), +QT_TRANSLATE_NOOP("pfennig-core", "Error: Wallet locked, unable to create transaction!"), +QT_TRANSLATE_NOOP("pfennig-core", "Error: system error: "), +QT_TRANSLATE_NOOP("pfennig-core", "Failed to listen on any port. Use -listen=0 if you want this."), +QT_TRANSLATE_NOOP("pfennig-core", "Failed to read block info"), +QT_TRANSLATE_NOOP("pfennig-core", "Failed to read block"), +QT_TRANSLATE_NOOP("pfennig-core", "Failed to sync block index"), +QT_TRANSLATE_NOOP("pfennig-core", "Failed to write block index"), +QT_TRANSLATE_NOOP("pfennig-core", "Failed to write block info"), +QT_TRANSLATE_NOOP("pfennig-core", "Failed to write block"), +QT_TRANSLATE_NOOP("pfennig-core", "Failed to write file info"), +QT_TRANSLATE_NOOP("pfennig-core", "Failed to write to coin database"), +QT_TRANSLATE_NOOP("pfennig-core", "Failed to write transaction index"), +QT_TRANSLATE_NOOP("pfennig-core", "Failed to write undo data"), +QT_TRANSLATE_NOOP("pfennig-core", "Fee per kB to add to transactions you send"), +QT_TRANSLATE_NOOP("pfennig-core", "Fees smaller than this are considered zero fee (for relaying) (default:"), +QT_TRANSLATE_NOOP("pfennig-core", "Find peers using DNS lookup (default: 1 unless -connect)"), +QT_TRANSLATE_NOOP("pfennig-core", "Force safe mode (default: 0)"), +QT_TRANSLATE_NOOP("pfennig-core", "Generate coins (default: 0)"), +QT_TRANSLATE_NOOP("pfennig-core", "Get help for a command"), +QT_TRANSLATE_NOOP("pfennig-core", "How many blocks to check at startup (default: 288, 0 = all)"), +QT_TRANSLATE_NOOP("pfennig-core", "If is not supplied, output all debugging information."), +QT_TRANSLATE_NOOP("pfennig-core", "Importing..."), +QT_TRANSLATE_NOOP("pfennig-core", "Imports blocks from external blk000??.dat file"), +QT_TRANSLATE_NOOP("pfennig-core", "Incorrect or no genesis block found. Wrong datadir for network?"), +QT_TRANSLATE_NOOP("pfennig-core", "Information"), +QT_TRANSLATE_NOOP("pfennig-core", "Insufficient funds"), +QT_TRANSLATE_NOOP("pfennig-core", "Invalid -onion address: '%s'"), +QT_TRANSLATE_NOOP("pfennig-core", "Invalid -proxy address: '%s'"), +QT_TRANSLATE_NOOP("pfennig-core", "Invalid amount for -minrelaytxfee=: '%s'"), +QT_TRANSLATE_NOOP("pfennig-core", "Invalid amount for -mintxfee=: '%s'"), +QT_TRANSLATE_NOOP("pfennig-core", "Invalid amount for -paytxfee=: '%s'"), +QT_TRANSLATE_NOOP("pfennig-core", "Invalid amount"), +QT_TRANSLATE_NOOP("pfennig-core", "Limit size of signature cache to entries (default: 50000)"), +QT_TRANSLATE_NOOP("pfennig-core", "List commands"), +QT_TRANSLATE_NOOP("pfennig-core", "Listen for connections on (default: 40002 or testnet: 50001)"), +QT_TRANSLATE_NOOP("pfennig-core", "Loading addresses..."), +QT_TRANSLATE_NOOP("pfennig-core", "Loading block index..."), +QT_TRANSLATE_NOOP("pfennig-core", "Loading wallet..."), +QT_TRANSLATE_NOOP("pfennig-core", "Log transaction priority and fee per kB when mining blocks (default: 0)"), +QT_TRANSLATE_NOOP("pfennig-core", "Maintain a full transaction index (default: 0)"), +QT_TRANSLATE_NOOP("pfennig-core", "Maintain at most connections to peers (default: 125)"), +QT_TRANSLATE_NOOP("pfennig-core", "Maximum per-connection receive buffer, *1000 bytes (default: 5000)"), +QT_TRANSLATE_NOOP("pfennig-core", "Maximum per-connection send buffer, *1000 bytes (default: 1000)"), +QT_TRANSLATE_NOOP("pfennig-core", "Not enough file descriptors available."), +QT_TRANSLATE_NOOP("pfennig-core", "Only accept block chain matching built-in checkpoints (default: 1)"), +QT_TRANSLATE_NOOP("pfennig-core", "Only connect to nodes in network (IPv4, IPv6 or Tor)"), +QT_TRANSLATE_NOOP("pfennig-core", "Options:"), +QT_TRANSLATE_NOOP("pfennig-core", "Password for JSON-RPC connections"), +QT_TRANSLATE_NOOP("pfennig-core", "Prepend debug output with timestamp (default: 1)"), +QT_TRANSLATE_NOOP("pfennig-core", "Print block on startup, if found in block index"), +QT_TRANSLATE_NOOP("pfennig-core", "Print block tree on startup (default: 0)"), +QT_TRANSLATE_NOOP("pfennig-core", "RPC SSL options: (see the Pfennig Wiki for SSL setup instructions)"), +QT_TRANSLATE_NOOP("pfennig-core", "RPC client options:"), +QT_TRANSLATE_NOOP("pfennig-core", "RPC server options:"), +QT_TRANSLATE_NOOP("pfennig-core", "Randomly drop 1 of every network messages"), +QT_TRANSLATE_NOOP("pfennig-core", "Randomly fuzz 1 of every network messages"), +QT_TRANSLATE_NOOP("pfennig-core", "Rebuild block chain index from current blk000??.dat files"), +QT_TRANSLATE_NOOP("pfennig-core", "Rescan the block chain for missing wallet transactions"), +QT_TRANSLATE_NOOP("pfennig-core", "Rescanning..."), +QT_TRANSLATE_NOOP("pfennig-core", "Run a thread to flush wallet periodically (default: 1)"), +QT_TRANSLATE_NOOP("pfennig-core", "Run in the background as a daemon and accept commands"), +QT_TRANSLATE_NOOP("pfennig-core", "SSL options: (see the Pfennig Wiki for SSL setup instructions)"), +QT_TRANSLATE_NOOP("pfennig-core", "Select SOCKS version for -proxy (4 or 5, default: 5)"), +QT_TRANSLATE_NOOP("pfennig-core", "Send command to pfennig Core"), +QT_TRANSLATE_NOOP("pfennig-core", "Send commands to node running on (default: 127.0.0.1)"), +QT_TRANSLATE_NOOP("pfennig-core", "Send trace/debug info to console instead of debug.log file"), +QT_TRANSLATE_NOOP("pfennig-core", "Server certificate file (default: server.cert)"), +QT_TRANSLATE_NOOP("pfennig-core", "Server private key (default: server.pem)"), +QT_TRANSLATE_NOOP("pfennig-core", "Set database cache size in megabytes (%d to %d, default: %d)"), +QT_TRANSLATE_NOOP("pfennig-core", "Set key pool size to (default: 100)"), +QT_TRANSLATE_NOOP("pfennig-core", "Set maximum block size in bytes (default: %d)"), +QT_TRANSLATE_NOOP("pfennig-core", "Set minimum block size in bytes (default: 0)"), +QT_TRANSLATE_NOOP("pfennig-core", "Set the number of threads to service RPC calls (default: 4)"), +QT_TRANSLATE_NOOP("pfennig-core", "Sets the DB_PRIVATE flag in the wallet db environment (default: 1)"), +QT_TRANSLATE_NOOP("pfennig-core", "Show all debugging options (usage: --help -help-debug)"), +QT_TRANSLATE_NOOP("pfennig-core", "Show benchmark information (default: 0)"), +QT_TRANSLATE_NOOP("pfennig-core", "Shrink debug.log file on client startup (default: 1 when no -debug)"), +QT_TRANSLATE_NOOP("pfennig-core", "Signing transaction failed"), +QT_TRANSLATE_NOOP("pfennig-core", "Specify configuration file (default: pfennig.conf)"), +QT_TRANSLATE_NOOP("pfennig-core", "Specify connection timeout in milliseconds (default: 5000)"), +QT_TRANSLATE_NOOP("pfennig-core", "Specify data directory"), +QT_TRANSLATE_NOOP("pfennig-core", "Specify pid file (default: pfennigd.pid)"), +QT_TRANSLATE_NOOP("pfennig-core", "Specify wallet file (within data directory)"), +QT_TRANSLATE_NOOP("pfennig-core", "Specify your own public address"), +QT_TRANSLATE_NOOP("pfennig-core", "Spend unconfirmed change when sending transactions (default: 1)"), +QT_TRANSLATE_NOOP("pfennig-core", "Start pfennig Core Daemon"), +QT_TRANSLATE_NOOP("pfennig-core", "System error: "), +QT_TRANSLATE_NOOP("pfennig-core", "This help message"), +QT_TRANSLATE_NOOP("pfennig-core", "This is intended for regression testing tools and app development."), +QT_TRANSLATE_NOOP("pfennig-core", "Threshold for disconnecting misbehaving peers (default: 100)"), +QT_TRANSLATE_NOOP("pfennig-core", "To use the %s option"), +QT_TRANSLATE_NOOP("pfennig-core", "Transaction amount too small"), +QT_TRANSLATE_NOOP("pfennig-core", "Transaction amounts must be positive"), +QT_TRANSLATE_NOOP("pfennig-core", "Transaction too large"), +QT_TRANSLATE_NOOP("pfennig-core", "Unable to bind to %s on this computer (bind returned error %d, %s)"), +QT_TRANSLATE_NOOP("pfennig-core", "Unknown -socks proxy version requested: %i"), +QT_TRANSLATE_NOOP("pfennig-core", "Unknown network specified in -onlynet: '%s'"), +QT_TRANSLATE_NOOP("pfennig-core", "Upgrade wallet to latest format"), +QT_TRANSLATE_NOOP("pfennig-core", "Usage (deprecated, use pfennig-cli):"), +QT_TRANSLATE_NOOP("pfennig-core", "Usage:"), +QT_TRANSLATE_NOOP("pfennig-core", "Use OpenSSL (https) for JSON-RPC connections"), +QT_TRANSLATE_NOOP("pfennig-core", "Use UPnP to map the listening port (default: 0)"), +QT_TRANSLATE_NOOP("pfennig-core", "Use UPnP to map the listening port (default: 1 when listening)"), +QT_TRANSLATE_NOOP("pfennig-core", "Use the test network"), +QT_TRANSLATE_NOOP("pfennig-core", "Username for JSON-RPC connections"), +QT_TRANSLATE_NOOP("pfennig-core", "Verifying blocks..."), +QT_TRANSLATE_NOOP("pfennig-core", "Verifying wallet..."), +QT_TRANSLATE_NOOP("pfennig-core", "Wait for RPC server to start"), +QT_TRANSLATE_NOOP("pfennig-core", "Wallet %s resides outside data directory %s"), +QT_TRANSLATE_NOOP("pfennig-core", "Wallet needed to be rewritten: restart pfennig to complete"), +QT_TRANSLATE_NOOP("pfennig-core", "Wallet options:"), +QT_TRANSLATE_NOOP("pfennig-core", "Warning"), +QT_TRANSLATE_NOOP("pfennig-core", "Warning: Deprecated argument -debugnet ignored, use -debug=net"), +QT_TRANSLATE_NOOP("pfennig-core", "Warning: This version is obsolete, upgrade required!"), +QT_TRANSLATE_NOOP("pfennig-core", "You need to rebuild the database using -reindex to change -txindex"), +QT_TRANSLATE_NOOP("pfennig-core", "Zapping all transactions from wallet..."), +QT_TRANSLATE_NOOP("pfennig-core", "on startup"), +QT_TRANSLATE_NOOP("pfennig-core", "version"), +QT_TRANSLATE_NOOP("pfennig-core", "wallet.dat corrupt, salvage failed"), }; diff --git a/src/qt/bitmarkstrings.cpp~ b/src/qt/bitmarkstrings.cpp~ new file mode 100644 index 0000000..bbeabb8 --- /dev/null +++ b/src/qt/bitmarkstrings.cpp~ @@ -0,0 +1,282 @@ + + +#include + +// Automatically generated by extract_strings.py +#ifdef __GNUC__ +#define UNUSED __attribute__((unused)) +#else +#define UNUSED +#endif +static const char UNUSED *bitmark_strings[] = { +QT_TRANSLATE_NOOP("gamecredits-core", "" +"%s, you must set a rpcpassword in the configuration file:\n" +"%s\n" +"It is recommended you use the following random password:\n" +"rpcuser=gamecreditsrpc\n" +"rpcpassword=%s\n" +"(you do not need to remember this password)\n" +"The username and password MUST NOT be the same.\n" +"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 \"GameCredits Alert\" admin@foo.com\n"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!" +"3DES:@STRENGTH)"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"An error occurred while setting up the RPC port %u for listening on IPv4: %s"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"An error occurred while setting up the RPC port %u for listening on IPv6, " +"falling back to IPv4: %s"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Bind to given address and always listen on it. Use [host]:port notation for " +"IPv6"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Cannot obtain a lock on data directory %s. GameCredits Core is probably already " +"running."), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Continuously rate-limit free transactions to *1000 bytes per minute " +"(default:15)"), +QT_TRANSLATE_NOOP("gamecredits-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("gamecredits-core", "" +"Enter regression test mode, which uses a special chain in which blocks can " +"be solved instantly."), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Error: Listening for incoming connections failed (listen returned error %d)"), +QT_TRANSLATE_NOOP("gamecredits-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."), +QT_TRANSLATE_NOOP("gamecredits-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("gamecredits-core", "" +"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("gamecredits-core", "" +"Execute command when a wallet transaction changes (%s in cmd is replaced by " +"TxID)"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Execute command when the best block changes (%s in cmd is replaced by block " +"hash)"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Fees smaller than this are considered zero fee (for transaction creation) " +"(default:"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Flush database activity from memory pool to disk log every megabytes " +"(default: 100)"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"How thorough the block verification of -checkblocks is (0-4, default: 3)"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"In this mode -genproclimit controls how many blocks are generated " +"immediately."), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Listen for JSON-RPC connections on (default: 40001 or testnet: 50000)"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Number of seconds to keep misbehaving peers from reconnecting (default: " +"86400)"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Output debugging information (default: 0, supplying is optional)"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Set maximum size of high-priority/low-fee transactions in bytes (default: %d)"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Set the number of script verification threads (%u to %d, 0 = auto, <0 = " +"leave that many cores free, default: %d)"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Set the processor limit for when generation is on (-1 = unlimited, default: " +"-1)"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"This is a pre-release test build - use at your own risk - do not use for " +"mining or merchant applications"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Unable to bind to %s on this computer. GameCredits Core is probably already " +"running."), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -" +"proxy)"), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Warning: -paytxfee is set very high! This is the transaction fee you will " +"pay if you send a transaction."), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Warning: Please check that your computer's date and time are correct! If " +"your clock is wrong GameCredits will not work properly."), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"Warning: The network does not appear to fully agree! Some miners appear to " +"be experiencing issues."), +QT_TRANSLATE_NOOP("gamecredits-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("gamecredits-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("gamecredits-core", "" +"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."), +QT_TRANSLATE_NOOP("gamecredits-core", "" +"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."), +QT_TRANSLATE_NOOP("gamecredits-core", "(default: 1)"), +QT_TRANSLATE_NOOP("gamecredits-core", "(default: wallet.dat)"), +QT_TRANSLATE_NOOP("gamecredits-core", " can be:"), +QT_TRANSLATE_NOOP("gamecredits-core", "Accept command line and JSON-RPC commands"), +QT_TRANSLATE_NOOP("gamecredits-core", "Accept connections from outside (default: 1 if no -proxy or -connect)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Add a node to connect to and attempt to keep the connection open"), +QT_TRANSLATE_NOOP("gamecredits-core", "Allow DNS lookups for -addnode, -seednode and -connect"), +QT_TRANSLATE_NOOP("gamecredits-core", "Allow JSON-RPC connections from specified IP address"), +QT_TRANSLATE_NOOP("gamecredits-core", "Attempt to recover private keys from a corrupt wallet.dat"), +QT_TRANSLATE_NOOP("gamecredits-core", "GameCredits Core Daemon"), +QT_TRANSLATE_NOOP("gamecredits-core", "GameCredits Core RPC client version"), +QT_TRANSLATE_NOOP("gamecredits-core", "Block creation options:"), +QT_TRANSLATE_NOOP("gamecredits-core", "Cannot downgrade wallet"), +QT_TRANSLATE_NOOP("gamecredits-core", "Cannot resolve -bind address: '%s'"), +QT_TRANSLATE_NOOP("gamecredits-core", "Cannot resolve -externalip address: '%s'"), +QT_TRANSLATE_NOOP("gamecredits-core", "Cannot write default address"), +QT_TRANSLATE_NOOP("gamecredits-core", "Clear list of wallet transactions (diagnostic tool; implies -rescan)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Connect only to the specified node(s)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Connect through SOCKS proxy"), +QT_TRANSLATE_NOOP("gamecredits-core", "Connect to JSON-RPC on (default: 40001 or testnet: 50000)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Connect to a node to retrieve peer addresses, and disconnect"), +QT_TRANSLATE_NOOP("gamecredits-core", "Connection options:"), +QT_TRANSLATE_NOOP("gamecredits-core", "Corrupted block database detected"), +QT_TRANSLATE_NOOP("gamecredits-core", "Debugging/Testing options:"), +QT_TRANSLATE_NOOP("gamecredits-core", "Disable safemode, override a real safe mode event (default: 0)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Discover own IP address (default: 1 when listening and no -externalip)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Do not load the wallet and disable wallet RPC calls"), +QT_TRANSLATE_NOOP("gamecredits-core", "Do you want to rebuild the block database now?"), +QT_TRANSLATE_NOOP("gamecredits-core", "Done loading"), +QT_TRANSLATE_NOOP("gamecredits-core", "Error initializing block database"), +QT_TRANSLATE_NOOP("gamecredits-core", "Error initializing wallet database environment %s!"), +QT_TRANSLATE_NOOP("gamecredits-core", "Error loading block database"), +QT_TRANSLATE_NOOP("gamecredits-core", "Error loading wallet.dat"), +QT_TRANSLATE_NOOP("gamecredits-core", "Error loading wallet.dat: Wallet corrupted"), +QT_TRANSLATE_NOOP("gamecredits-core", "Error loading wallet.dat: Wallet requires newer version of GameCredits"), +QT_TRANSLATE_NOOP("gamecredits-core", "Error opening block database"), +QT_TRANSLATE_NOOP("gamecredits-core", "Error"), +QT_TRANSLATE_NOOP("gamecredits-core", "Error: Disk space is low!"), +QT_TRANSLATE_NOOP("gamecredits-core", "Error: Wallet locked, unable to create transaction!"), +QT_TRANSLATE_NOOP("gamecredits-core", "Error: system error: "), +QT_TRANSLATE_NOOP("gamecredits-core", "Failed to listen on any port. Use -listen=0 if you want this."), +QT_TRANSLATE_NOOP("gamecredits-core", "Failed to read block info"), +QT_TRANSLATE_NOOP("gamecredits-core", "Failed to read block"), +QT_TRANSLATE_NOOP("gamecredits-core", "Failed to sync block index"), +QT_TRANSLATE_NOOP("gamecredits-core", "Failed to write block index"), +QT_TRANSLATE_NOOP("gamecredits-core", "Failed to write block info"), +QT_TRANSLATE_NOOP("gamecredits-core", "Failed to write block"), +QT_TRANSLATE_NOOP("gamecredits-core", "Failed to write file info"), +QT_TRANSLATE_NOOP("gamecredits-core", "Failed to write to coin database"), +QT_TRANSLATE_NOOP("gamecredits-core", "Failed to write transaction index"), +QT_TRANSLATE_NOOP("gamecredits-core", "Failed to write undo data"), +QT_TRANSLATE_NOOP("gamecredits-core", "Fee per kB to add to transactions you send"), +QT_TRANSLATE_NOOP("gamecredits-core", "Fees smaller than this are considered zero fee (for relaying) (default:"), +QT_TRANSLATE_NOOP("gamecredits-core", "Find peers using DNS lookup (default: 1 unless -connect)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Force safe mode (default: 0)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Generate coins (default: 0)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Get help for a command"), +QT_TRANSLATE_NOOP("gamecredits-core", "How many blocks to check at startup (default: 288, 0 = all)"), +QT_TRANSLATE_NOOP("gamecredits-core", "If is not supplied, output all debugging information."), +QT_TRANSLATE_NOOP("gamecredits-core", "Importing..."), +QT_TRANSLATE_NOOP("gamecredits-core", "Imports blocks from external blk000??.dat file"), +QT_TRANSLATE_NOOP("gamecredits-core", "Incorrect or no genesis block found. Wrong datadir for network?"), +QT_TRANSLATE_NOOP("gamecredits-core", "Information"), +QT_TRANSLATE_NOOP("gamecredits-core", "Insufficient funds"), +QT_TRANSLATE_NOOP("gamecredits-core", "Invalid -onion address: '%s'"), +QT_TRANSLATE_NOOP("gamecredits-core", "Invalid -proxy address: '%s'"), +QT_TRANSLATE_NOOP("gamecredits-core", "Invalid amount for -minrelaytxfee=: '%s'"), +QT_TRANSLATE_NOOP("gamecredits-core", "Invalid amount for -mintxfee=: '%s'"), +QT_TRANSLATE_NOOP("gamecredits-core", "Invalid amount for -paytxfee=: '%s'"), +QT_TRANSLATE_NOOP("gamecredits-core", "Invalid amount"), +QT_TRANSLATE_NOOP("gamecredits-core", "Limit size of signature cache to entries (default: 50000)"), +QT_TRANSLATE_NOOP("gamecredits-core", "List commands"), +QT_TRANSLATE_NOOP("gamecredits-core", "Listen for connections on (default: 40002 or testnet: 50001)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Loading addresses..."), +QT_TRANSLATE_NOOP("gamecredits-core", "Loading block index..."), +QT_TRANSLATE_NOOP("gamecredits-core", "Loading wallet..."), +QT_TRANSLATE_NOOP("gamecredits-core", "Log transaction priority and fee per kB when mining blocks (default: 0)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Maintain a full transaction index (default: 0)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Maintain at most connections to peers (default: 125)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Maximum per-connection receive buffer, *1000 bytes (default: 5000)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Maximum per-connection send buffer, *1000 bytes (default: 1000)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Not enough file descriptors available."), +QT_TRANSLATE_NOOP("gamecredits-core", "Only accept block chain matching built-in checkpoints (default: 1)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Only connect to nodes in network (IPv4, IPv6 or Tor)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Options:"), +QT_TRANSLATE_NOOP("gamecredits-core", "Password for JSON-RPC connections"), +QT_TRANSLATE_NOOP("gamecredits-core", "Prepend debug output with timestamp (default: 1)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Print block on startup, if found in block index"), +QT_TRANSLATE_NOOP("gamecredits-core", "Print block tree on startup (default: 0)"), +QT_TRANSLATE_NOOP("gamecredits-core", "RPC SSL options: (see the Bitmark Wiki for SSL setup instructions)"), +QT_TRANSLATE_NOOP("gamecredits-core", "RPC client options:"), +QT_TRANSLATE_NOOP("gamecredits-core", "RPC server options:"), +QT_TRANSLATE_NOOP("gamecredits-core", "Randomly drop 1 of every network messages"), +QT_TRANSLATE_NOOP("gamecredits-core", "Randomly fuzz 1 of every network messages"), +QT_TRANSLATE_NOOP("gamecredits-core", "Rebuild block chain index from current blk000??.dat files"), +QT_TRANSLATE_NOOP("gamecredits-core", "Rescan the block chain for missing wallet transactions"), +QT_TRANSLATE_NOOP("gamecredits-core", "Rescanning..."), +QT_TRANSLATE_NOOP("gamecredits-core", "Run a thread to flush wallet periodically (default: 1)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Run in the background as a daemon and accept commands"), +QT_TRANSLATE_NOOP("gamecredits-core", "SSL options: (see the Bitmark Wiki for SSL setup instructions)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Select SOCKS version for -proxy (4 or 5, default: 5)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Send command to GameCredits Core"), +QT_TRANSLATE_NOOP("gamecredits-core", "Send commands to node running on (default: 127.0.0.1)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Send trace/debug info to console instead of debug.log file"), +QT_TRANSLATE_NOOP("gamecredits-core", "Server certificate file (default: server.cert)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Server private key (default: server.pem)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Set database cache size in megabytes (%d to %d, default: %d)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Set key pool size to (default: 100)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Set maximum block size in bytes (default: %d)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Set minimum block size in bytes (default: 0)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Set the number of threads to service RPC calls (default: 4)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Sets the DB_PRIVATE flag in the wallet db environment (default: 1)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Show all debugging options (usage: --help -help-debug)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Show benchmark information (default: 0)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Shrink debug.log file on client startup (default: 1 when no -debug)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Signing transaction failed"), +QT_TRANSLATE_NOOP("gamecredits-core", "Specify configuration file (default: gamecredits.conf)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Specify connection timeout in milliseconds (default: 5000)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Specify data directory"), +QT_TRANSLATE_NOOP("gamecredits-core", "Specify pid file (default: gamecreditsd.pid)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Specify wallet file (within data directory)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Specify your own public address"), +QT_TRANSLATE_NOOP("gamecredits-core", "Spend unconfirmed change when sending transactions (default: 1)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Start GameCredits Core Daemon"), +QT_TRANSLATE_NOOP("gamecredits-core", "System error: "), +QT_TRANSLATE_NOOP("gamecredits-core", "This help message"), +QT_TRANSLATE_NOOP("gamecredits-core", "This is intended for regression testing tools and app development."), +QT_TRANSLATE_NOOP("gamecredits-core", "Threshold for disconnecting misbehaving peers (default: 100)"), +QT_TRANSLATE_NOOP("gamecredits-core", "To use the %s option"), +QT_TRANSLATE_NOOP("gamecredits-core", "Transaction amount too small"), +QT_TRANSLATE_NOOP("gamecredits-core", "Transaction amounts must be positive"), +QT_TRANSLATE_NOOP("gamecredits-core", "Transaction too large"), +QT_TRANSLATE_NOOP("gamecredits-core", "Unable to bind to %s on this computer (bind returned error %d, %s)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Unknown -socks proxy version requested: %i"), +QT_TRANSLATE_NOOP("gamecredits-core", "Unknown network specified in -onlynet: '%s'"), +QT_TRANSLATE_NOOP("gamecredits-core", "Upgrade wallet to latest format"), +QT_TRANSLATE_NOOP("gamecredits-core", "Usage (deprecated, use gamecredits-cli):"), +QT_TRANSLATE_NOOP("gamecredits-core", "Usage:"), +QT_TRANSLATE_NOOP("gamecredits-core", "Use OpenSSL (https) for JSON-RPC connections"), +QT_TRANSLATE_NOOP("gamecredits-core", "Use UPnP to map the listening port (default: 0)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Use UPnP to map the listening port (default: 1 when listening)"), +QT_TRANSLATE_NOOP("gamecredits-core", "Use the test network"), +QT_TRANSLATE_NOOP("gamecredits-core", "Username for JSON-RPC connections"), +QT_TRANSLATE_NOOP("gamecredits-core", "Verifying blocks..."), +QT_TRANSLATE_NOOP("gamecredits-core", "Verifying wallet..."), +QT_TRANSLATE_NOOP("gamecredits-core", "Wait for RPC server to start"), +QT_TRANSLATE_NOOP("gamecredits-core", "Wallet %s resides outside data directory %s"), +QT_TRANSLATE_NOOP("gamecredits-core", "Wallet needed to be rewritten: restart GameCredits to complete"), +QT_TRANSLATE_NOOP("gamecredits-core", "Wallet options:"), +QT_TRANSLATE_NOOP("gamecredits-core", "Warning"), +QT_TRANSLATE_NOOP("gamecredits-core", "Warning: Deprecated argument -debugnet ignored, use -debug=net"), +QT_TRANSLATE_NOOP("gamecredits-core", "Warning: This version is obsolete, upgrade required!"), +QT_TRANSLATE_NOOP("gamecredits-core", "You need to rebuild the database using -reindex to change -txindex"), +QT_TRANSLATE_NOOP("gamecredits-core", "Zapping all transactions from wallet..."), +QT_TRANSLATE_NOOP("gamecredits-core", "on startup"), +QT_TRANSLATE_NOOP("gamecredits-core", "version"), +QT_TRANSLATE_NOOP("gamecredits-core", "wallet.dat corrupt, salvage failed"), +}; diff --git a/src/qt/bitmarkunits.cpp b/src/qt/bitmarkunits.cpp index 8aecb4f..050e8da 100644 --- a/src/qt/bitmarkunits.cpp +++ b/src/qt/bitmarkunits.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -50,9 +50,9 @@ QString BitmarkUnits::description(int unit) { switch(unit) { - case PFG: return QString("Pfennigs"); - case mPFG: return QString("mPfennigs (1 / 1,000)"); - case uPFG: return QString("uPfennigs (1 / 1,000,000)"); + case PFG: return QString("pfennigs"); + case mPFG: return QString("mpfennigs (1 / 1,000)"); + case uPFG: return QString("upfennigs (1 / 1,000,000)"); default: return QString("???"); } } diff --git a/src/qt/bitmarkunits.cpp~ b/src/qt/bitmarkunits.cpp~ new file mode 100644 index 0000000..ebaad3f --- /dev/null +++ b/src/qt/bitmarkunits.cpp~ @@ -0,0 +1,197 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "bitmarkunits.h" + +#include + +BitmarkUnits::BitmarkUnits(QObject *parent): + QAbstractListModel(parent), + unitlist(availableUnits()) +{ +} + +QList BitmarkUnits::availableUnits() +{ + QList unitlist; + unitlist.append(PFG); + unitlist.append(mPFG); + unitlist.append(uPFG); + return unitlist; +} + +bool BitmarkUnits::valid(int unit) +{ + switch(unit) + { + case PFG: + case mPFG: + case uPFG: + return true; + default: + return false; + } +} + +QString BitmarkUnits::name(int unit) +{ + switch(unit) + { + case PFG: return QString("PFG"); + case mPFG: return QString("uPFG"); + case uPFG: return QString::fromUtf8("uPFG"); + default: return QString("???"); + } +} + +QString BitmarkUnits::description(int unit) +{ + switch(unit) + { + case PFG: return QString("pfennigs"); + case mPFG: return QString("mpfennigs (1 / 1,000)"); + case uPFG: return QString("upfennigs (1 / 1,000,000)"); + default: return QString("???"); + } +} + +qint64 BitmarkUnits::factor(int unit) +{ + switch(unit) + { + case PFG: return 100000000; + case mPFG: return 100000; + case uPFG: return 100; + default: return 100000000; + } +} + +qint64 BitmarkUnits::maxAmount(int unit) +{ + switch(unit) + { + case PFG: return Q_INT64_C(21000000); + case mPFG: return Q_INT64_C(21000000000); + case uPFG: return Q_INT64_C(21000000000000); + default: return 0; + } +} + +int BitmarkUnits::amountDigits(int unit) +{ + switch(unit) + { + case PFG: return 8; // 21,000,000 (# digits, without commas) + case mPFG: return 11; // 21,000,000,000 + case uPFG: return 14; // 21,000,000,000,000 + default: return 0; + } +} + +int BitmarkUnits::decimals(int unit) +{ + switch(unit) + { + case PFG: return 8; + case mPFG: return 5; + case uPFG: return 2; + default: return 0; + } +} + +QString BitmarkUnits::format(int unit, qint64 n, bool fPlus) +{ + // Note: not using straight sprintf here because we do NOT want + // localized number formatting. + if(!valid(unit)) + return QString(); // Refuse to format invalid unit + qint64 coin = factor(unit); + int num_decimals = decimals(unit); + qint64 n_abs = (n > 0 ? n : -n); + qint64 quotient = n_abs / coin; + qint64 remainder = n_abs % coin; + QString quotient_str = QString::number(quotient); + QString remainder_str = QString::number(remainder).rightJustified(num_decimals, '0'); + + // Right-trim excess zeros after the decimal point + int nTrim = 0; + for (int i = remainder_str.size()-1; i>=2 && (remainder_str.at(i) == '0'); --i) + ++nTrim; + remainder_str.chop(nTrim); + + if (n < 0) + quotient_str.insert(0, '-'); + else if (fPlus && n > 0) + quotient_str.insert(0, '+'); + return quotient_str + QString(".") + remainder_str; +} + +QString BitmarkUnits::formatWithUnit(int unit, qint64 amount, bool plussign) +{ + return format(unit, amount, plussign) + QString(" ") + name(unit); +} + +bool BitmarkUnits::parse(int unit, const QString &value, qint64 *val_out) +{ + if(!valid(unit) || value.isEmpty()) + return false; // Refuse to parse invalid unit or empty string + int num_decimals = decimals(unit); + QStringList parts = value.split("."); + + if(parts.size() > 2) + { + return false; // More than one dot + } + QString whole = parts[0]; + QString decimals; + + if(parts.size() > 1) + { + decimals = parts[1]; + } + if(decimals.size() > num_decimals) + { + return false; // Exceeds max precision + } + bool ok = false; + QString str = whole + decimals.leftJustified(num_decimals, '0'); + + if(str.size() > 18) + { + return false; // Longer numbers will exceed 63 bits + } + qint64 retvalue = str.toLongLong(&ok); + if(val_out) + { + *val_out = retvalue; + } + return ok; +} + +int BitmarkUnits::rowCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return unitlist.size(); +} + +QVariant BitmarkUnits::data(const QModelIndex &index, int role) const +{ + int row = index.row(); + if(row >= 0 && row < unitlist.size()) + { + Unit unit = unitlist.at(row); + switch(role) + { + case Qt::EditRole: + case Qt::DisplayRole: + return QVariant(name(unit)); + case Qt::ToolTipRole: + return QVariant(description(unit)); + case UnitRole: + return QVariant(static_cast(unit)); + } + } + return QVariant(); +} diff --git a/src/qt/bitmarkunits.h b/src/qt/bitmarkunits.h index 5e77d0e..79a85c0 100644 --- a/src/qt/bitmarkunits.h +++ b/src/qt/bitmarkunits.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/bitmarkunits.h~ b/src/qt/bitmarkunits.h~ new file mode 100644 index 0000000..f91b864 --- /dev/null +++ b/src/qt/bitmarkunits.h~ @@ -0,0 +1,76 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARKUNITS_H +#define BITMARKUNITS_H + +#include +#include + +/** Bitmark unit definitions. Encapsulates parsing and formatting + and serves as list model for drop-down selection boxes. +*/ +class BitmarkUnits: public QAbstractListModel +{ + Q_OBJECT + +public: + explicit BitmarkUnits(QObject *parent); + + /** Bitmark units. + @note Source: https://github.com/coinsolidation/bitmark/wiki/Currency . Please add only sensible ones + */ + enum Unit + { + PFG, + mPFG, + uPFG + }; + + //! @name Static API + //! Unit conversion and formatting + ///@{ + + //! Get list of units, for drop-down box + static QList availableUnits(); + //! Is unit ID valid? + static bool valid(int unit); + //! Short name + static QString name(int unit); + //! Longer description + static QString description(int unit); + //! Number of Satoshis (1e-8) per unit + static qint64 factor(int unit); + //! Max amount per unit + static qint64 maxAmount(int unit); + //! Number of amount digits (to represent max number of coins) + static int amountDigits(int unit); + //! Number of decimals left + static int decimals(int unit); + //! Format as string + static QString format(int unit, qint64 amount, bool plussign=false); + //! Format as string (with unit) + static QString formatWithUnit(int unit, qint64 amount, bool plussign=false); + //! Parse string to coin amount + static bool parse(int unit, const QString &value, qint64 *val_out); + ///@} + + //! @name AbstractListModel implementation + //! List model for unit drop-down selection box. + ///@{ + enum RoleIndex { + /** Unit identifier */ + UnitRole = Qt::UserRole + }; + int rowCount(const QModelIndex &parent) const; + QVariant data(const QModelIndex &index, int role) const; + ///@} + +private: + QList unitlist; +}; +typedef BitmarkUnits::Unit BitmarkUnit; + +#endif // BITMARKUNITS_H diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index 1ba8be5..9e2f9ab 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/clientmodel.cpp~ b/src/qt/clientmodel.cpp~ new file mode 100644 index 0000000..7cfa03c --- /dev/null +++ b/src/qt/clientmodel.cpp~ @@ -0,0 +1,238 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "alert.h" +#include "chainparams.h" +#include "checkpoints.h" +#include "main.h" +#include "net.h" +#include "ui_interface.h" + +#include + +#include +#include +#include + +static const int64_t nClientStartupTime = GetTime(); + +ClientModel::ClientModel(OptionsModel *optionsModel, QObject *parent) : + QObject(parent), optionsModel(optionsModel), + cachedNumBlocks(0), + cachedReindexing(0), cachedImporting(0), + numBlocksAtStartup(-1), pollTimer(0) +{ + pollTimer = new QTimer(this); + connect(pollTimer, SIGNAL(timeout()), this, SLOT(updateTimer())); + pollTimer->start(MODEL_UPDATE_DELAY); + + subscribeToCoreSignals(); +} + +ClientModel::~ClientModel() +{ + unsubscribeFromCoreSignals(); +} + +int ClientModel::getNumConnections(unsigned int flags) const +{ + 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 +{ + LOCK(cs_main); + return chainActive.Height(); +} + +int ClientModel::getNumBlocksAtStartup() +{ + if (numBlocksAtStartup == -1) numBlocksAtStartup = getNumBlocks(); + return numBlocksAtStartup; +} + +quint64 ClientModel::getTotalBytesRecv() const +{ + return CNode::GetTotalBytesRecv(); +} + +quint64 ClientModel::getTotalBytesSent() const +{ + return CNode::GetTotalBytesSent(); +} + +QDateTime ClientModel::getLastBlockDate() const +{ + LOCK(cs_main); + if (chainActive.Tip()) + return QDateTime::fromTime_t(chainActive.Tip()->GetBlockTime()); + else + return QDateTime::fromTime_t(Params().GenesisBlock().nTime); // Genesis block's time of current network +} + +double ClientModel::getVerificationProgress() const +{ + 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(); + + // check for changed number of blocks we have, number of blocks peers claim to have, reindexing state and importing state + if (cachedNumBlocks != newNumBlocks || + cachedReindexing != fReindex || cachedImporting != fImporting) + { + cachedNumBlocks = newNumBlocks; + cachedReindexing = fReindex; + cachedImporting = fImporting; + + emit numBlocksChanged(newNumBlocks); + } + + emit bytesChanged(getTotalBytesRecv(), getTotalBytesSent()); +} + +void ClientModel::updateNumConnections(int numConnections) +{ + emit numConnectionsChanged(numConnections); +} + +void ClientModel::updateAlert(const QString &hash, int status) +{ + // Show error message notification for new alert + if(status == CT_NEW) + { + uint256 hash_256; + hash_256.SetHex(hash.toStdString()); + CAlert alert = CAlert::getAlertByHash(hash_256); + if(!alert.IsNull()) + { + emit message(tr("Network Alert"), QString::fromStdString(alert.strStatusBar), CClientUIInterface::ICON_ERROR); + } + } + + emit alertsChanged(getStatusBarWarnings()); +} + +QString ClientModel::getNetworkName() const +{ + QString netname(QString::fromStdString(Params().DataDir())); + if(netname.isEmpty()) + netname = "main"; + return netname; +} + +bool ClientModel::inInitialBlockDownload() const +{ + return IsInitialBlockDownload(); +} + +enum BlockSource ClientModel::getBlockSource() const +{ + if (fReindex) + return BLOCK_SOURCE_REINDEX; + else if (fImporting) + return BLOCK_SOURCE_DISK; + else if (getNumConnections() > 0) + return BLOCK_SOURCE_NETWORK; + + return BLOCK_SOURCE_NONE; +} + +QString ClientModel::getStatusBarWarnings() const +{ + return QString::fromStdString(GetWarnings("statusbar")); +} + +OptionsModel *ClientModel::getOptionsModel() +{ + return optionsModel; +} + +QString ClientModel::formatFullVersion() const +{ + return QString::fromStdString(FormatFullVersion()); +} + +QString ClientModel::formatBuildDate() const +{ + return QString::fromStdString(CLIENT_DATE); +} + +bool ClientModel::isReleaseVersion() const +{ + return CLIENT_VERSION_IS_RELEASE; +} + +QString ClientModel::clientName() const +{ + return QString::fromStdString(CLIENT_NAME); +} + +QString ClientModel::formatClientStartupTime() const +{ + return QDateTime::fromTime_t(nClientStartupTime).toString(); +} + +// Handlers for core signals +static void NotifyBlocksChanged(ClientModel *clientmodel) +{ + // This notification is too frequent. Don't trigger a signal. + // Don't remove it, though, as it might be useful later. +} + +static void NotifyNumConnectionsChanged(ClientModel *clientmodel, int 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) +{ + 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)); +} + +void ClientModel::subscribeToCoreSignals() +{ + // Connect signals to client + uiInterface.NotifyBlocksChanged.connect(boost::bind(NotifyBlocksChanged, this)); + uiInterface.NotifyNumConnectionsChanged.connect(boost::bind(NotifyNumConnectionsChanged, this, _1)); + uiInterface.NotifyAlertChanged.connect(boost::bind(NotifyAlertChanged, this, _1, _2)); +} + +void ClientModel::unsubscribeFromCoreSignals() +{ + // Disconnect signals from client + uiInterface.NotifyBlocksChanged.disconnect(boost::bind(NotifyBlocksChanged, this)); + uiInterface.NotifyNumConnectionsChanged.disconnect(boost::bind(NotifyNumConnectionsChanged, this, _1)); + uiInterface.NotifyAlertChanged.disconnect(boost::bind(NotifyAlertChanged, this, _1, _2)); +} diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h index 091609b..87c7d8b 100644 --- a/src/qt/clientmodel.h +++ b/src/qt/clientmodel.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/clientmodel.h~ b/src/qt/clientmodel.h~ new file mode 100644 index 0000000..a93fab9 --- /dev/null +++ b/src/qt/clientmodel.h~ @@ -0,0 +1,102 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 AddressTableModel; +class OptionsModel; +class TransactionTableModel; + +class CWallet; + +QT_BEGIN_NAMESPACE +class QDateTime; +class QTimer; +QT_END_NAMESPACE + +enum BlockSource { + BLOCK_SOURCE_NONE, + BLOCK_SOURCE_REINDEX, + BLOCK_SOURCE_DISK, + BLOCK_SOURCE_NETWORK +}; + +enum NumConnections { + CONNECTIONS_NONE = 0, + CONNECTIONS_IN = (1U << 0), + CONNECTIONS_OUT = (1U << 1), + CONNECTIONS_ALL = (CONNECTIONS_IN | CONNECTIONS_OUT), +}; + +/** Model for Bitmark network client. */ +class ClientModel : public QObject +{ + Q_OBJECT + +public: + explicit ClientModel(OptionsModel *optionsModel, QObject *parent = 0); + ~ClientModel(); + + OptionsModel *getOptionsModel(); + + //! 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 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 + enum BlockSource getBlockSource() const; + //! Return warnings to be displayed in status bar + QString getStatusBarWarnings() const; + + QString formatFullVersion() const; + QString formatBuildDate() const; + bool isReleaseVersion() const; + QString clientName() const; + QString formatClientStartupTime() const; + +private: + OptionsModel *optionsModel; + + int cachedNumBlocks; + bool cachedReindexing; + bool cachedImporting; + + int numBlocksAtStartup; + + QTimer *pollTimer; + + void subscribeToCoreSignals(); + void unsubscribeFromCoreSignals(); + +signals: + void numConnectionsChanged(int count); + void numBlocksChanged(int count); + void alertsChanged(const QString &warnings); + void bytesChanged(quint64 totalBytesIn, quint64 totalBytesOut); + + //! Fired when a message should be reported to the user + void message(const QString &title, const QString &message, unsigned int style); + +public slots: + void updateTimer(); + void updateNumConnections(int numConnections); + void updateAlert(const QString &hash, int status); +}; + +#endif // CLIENTMODEL_H diff --git a/src/qt/coincontroldialog.cpp b/src/qt/coincontroldialog.cpp index 40254c3..4ef3bbb 100644 --- a/src/qt/coincontroldialog.cpp +++ b/src/qt/coincontroldialog.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/coincontroldialog.cpp~ b/src/qt/coincontroldialog.cpp~ new file mode 100644 index 0000000..57f3d78 --- /dev/null +++ b/src/qt/coincontroldialog.cpp~ @@ -0,0 +1,795 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmarkunits.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 = BitmarkUnits::PFG; + 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(BitmarkUnits::formatWithUnit(nDisplayUnit, nAmount)); // Amount + l3->setText(BitmarkUnits::formatWithUnit(nDisplayUnit, nPayFee)); // Fee + l4->setText(BitmarkUnits::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(BitmarkUnits::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.01PFG + + // 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(BitmarkUnits::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(BitmarkUnits::formatWithUnit(nDisplayUnit, CTransaction::nMinTxFee)); + + QString toolTip3 = tr("This label turns red, if any recipient receives an amount smaller than %1.").arg(BitmarkUnits::formatWithUnit(nDisplayUnit, CENT)) + "

"; + toolTip3 += tr("This means a fee of at least %1 is required.").arg(BitmarkUnits::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(BitmarkUnits::formatWithUnit(nDisplayUnit, CENT)) + "

"; + toolTip4 += tr("This means a fee of at least %1 is required.").arg(BitmarkUnits::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 = CBitmarkAddress(outputAddress).ToString().c_str(); + + // if listMode or change => show bitmark 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, BitmarkUnits::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, BitmarkUnits::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 index b1c8284..fe41781 100644 --- a/src/qt/coincontroldialog.h +++ b/src/qt/coincontroldialog.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/coincontroldialog.h~ b/src/qt/coincontroldialog.h~ new file mode 100644 index 0000000..9e118f4 --- /dev/null +++ b/src/qt/coincontroldialog.h~ @@ -0,0 +1,123 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 index c1133e3..3b654de 100644 --- a/src/qt/coincontroltreewidget.cpp +++ b/src/qt/coincontroltreewidget.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/coincontroltreewidget.cpp~ b/src/qt/coincontroltreewidget.cpp~ new file mode 100644 index 0000000..b79a20e --- /dev/null +++ b/src/qt/coincontroltreewidget.cpp~ @@ -0,0 +1,33 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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); + } +} diff --git a/src/qt/coincontroltreewidget.h b/src/qt/coincontroltreewidget.h index c4147b4..66f6bd2 100644 --- a/src/qt/coincontroltreewidget.h +++ b/src/qt/coincontroltreewidget.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/coincontroltreewidget.h~ b/src/qt/coincontroltreewidget.h~ new file mode 100644 index 0000000..966419c --- /dev/null +++ b/src/qt/coincontroltreewidget.h~ @@ -0,0 +1,23 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 diff --git a/src/qt/csvmodelwriter.cpp b/src/qt/csvmodelwriter.cpp index 131fa5f..d383a13 100644 --- a/src/qt/csvmodelwriter.cpp +++ b/src/qt/csvmodelwriter.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/csvmodelwriter.cpp~ b/src/qt/csvmodelwriter.cpp~ new file mode 100644 index 0000000..69184cd --- /dev/null +++ b/src/qt/csvmodelwriter.cpp~ @@ -0,0 +1,92 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 +#include +#include + +CSVModelWriter::CSVModelWriter(const QString &filename, QObject *parent) : + QObject(parent), + filename(filename), model(0) +{ +} + +void CSVModelWriter::setModel(const QAbstractItemModel *model) +{ + this->model = model; +} + +void CSVModelWriter::addColumn(const QString &title, int column, int role) +{ + Column col; + col.title = title; + col.column = column; + col.role = role; + + columns.append(col); +} + +static void writeValue(QTextStream &f, const QString &value) +{ + QString escaped = value; + escaped.replace('"', "\"\""); + f << "\"" << escaped << "\""; +} + +static void writeSep(QTextStream &f) +{ + f << ","; +} + +static void writeNewline(QTextStream &f) +{ + f << "\n"; +} + +bool CSVModelWriter::write() +{ + QFile file(filename); + if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) + return false; + QTextStream out(&file); + + int numRows = 0; + if(model) + { + numRows = model->rowCount(); + } + + // Header row + for(int i=0; iindex(j, columns[i].column).data(columns[i].role); + writeValue(out, data.toString()); + } + writeNewline(out); + } + + file.close(); + + return file.error() == QFile::NoError; +} diff --git a/src/qt/csvmodelwriter.h b/src/qt/csvmodelwriter.h index b9a6e42..f29c57f 100644 --- a/src/qt/csvmodelwriter.h +++ b/src/qt/csvmodelwriter.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/csvmodelwriter.h~ b/src/qt/csvmodelwriter.h~ new file mode 100644 index 0000000..ebab323 --- /dev/null +++ b/src/qt/csvmodelwriter.h~ @@ -0,0 +1,47 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +QT_BEGIN_NAMESPACE +class QAbstractItemModel; +QT_END_NAMESPACE + +/** Export a Qt table model to a CSV file. This is useful for analyzing or post-processing the data in + a spreadsheet. + */ +class CSVModelWriter : public QObject +{ + Q_OBJECT + +public: + explicit CSVModelWriter(const QString &filename, QObject *parent = 0); + + void setModel(const QAbstractItemModel *model); + void addColumn(const QString &title, int column, int role=Qt::EditRole); + + /** Perform export of the model to CSV. + @returns true on success, false otherwise + */ + bool write(); + +private: + QString filename; + const QAbstractItemModel *model; + + struct Column + { + QString title; + int column; + int role; + }; + QList columns; +}; + +#endif // CSVMODELWRITER_H diff --git a/src/qt/editaddressdialog.cpp b/src/qt/editaddressdialog.cpp index 877a3b9..1a35cfe 100644 --- a/src/qt/editaddressdialog.cpp +++ b/src/qt/editaddressdialog.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -108,7 +108,7 @@ void EditAddressDialog::accept() break; case AddressTableModel::INVALID_ADDRESS: QMessageBox::warning(this, windowTitle(), - tr("The entered address \"%1\" is not a valid Pfennig address.").arg(ui->addressEdit->text()), + tr("The entered address \"%1\" is not a valid pfennig address.").arg(ui->addressEdit->text()), QMessageBox::Ok, QMessageBox::Ok); break; case AddressTableModel::DUPLICATE_ADDRESS: diff --git a/src/qt/editaddressdialog.cpp~ b/src/qt/editaddressdialog.cpp~ new file mode 100644 index 0000000..eb17260 --- /dev/null +++ b/src/qt/editaddressdialog.cpp~ @@ -0,0 +1,145 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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" + +#include "addresstablemodel.h" +#include "guiutil.h" + +#include +#include + +EditAddressDialog::EditAddressDialog(Mode mode, QWidget *parent) : + QDialog(parent), + ui(new Ui::EditAddressDialog), + mapper(0), + mode(mode), + model(0) +{ + ui->setupUi(this); + + GUIUtil::setupAddressWidget(ui->addressEdit, this); + + switch(mode) + { + case NewReceivingAddress: + setWindowTitle(tr("New receiving address")); + ui->addressEdit->setEnabled(false); + break; + case NewSendingAddress: + setWindowTitle(tr("New sending address")); + break; + case EditReceivingAddress: + setWindowTitle(tr("Edit receiving address")); + ui->addressEdit->setEnabled(false); + break; + case EditSendingAddress: + setWindowTitle(tr("Edit sending address")); + break; + } + + mapper = new QDataWidgetMapper(this); + mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit); +} + +EditAddressDialog::~EditAddressDialog() +{ + delete ui; +} + +void EditAddressDialog::setModel(AddressTableModel *model) +{ + this->model = model; + if(!model) + return; + + mapper->setModel(model); + mapper->addMapping(ui->labelEdit, AddressTableModel::Label); + mapper->addMapping(ui->addressEdit, AddressTableModel::Address); +} + +void EditAddressDialog::loadRow(int row) +{ + mapper->setCurrentIndex(row); +} + +bool EditAddressDialog::saveCurrentRow() +{ + if(!model) + return false; + + switch(mode) + { + case NewReceivingAddress: + case NewSendingAddress: + address = model->addRow( + mode == NewSendingAddress ? AddressTableModel::Send : AddressTableModel::Receive, + ui->labelEdit->text(), + ui->addressEdit->text()); + break; + case EditReceivingAddress: + case EditSendingAddress: + if(mapper->submit()) + { + address = ui->addressEdit->text(); + } + break; + } + return !address.isEmpty(); +} + +void EditAddressDialog::accept() +{ + if(!model) + return; + + if(!saveCurrentRow()) + { + switch(model->getEditStatus()) + { + case AddressTableModel::OK: + // Failed with unknown reason. Just reject. + break; + case AddressTableModel::NO_CHANGES: + // No changes were made during edit operation. Just reject. + break; + case AddressTableModel::INVALID_ADDRESS: + QMessageBox::warning(this, windowTitle(), + tr("The entered address \"%1\" is not a valid pfennig address.").arg(ui->addressEdit->text()), + QMessageBox::Ok, QMessageBox::Ok); + break; + case AddressTableModel::DUPLICATE_ADDRESS: + QMessageBox::warning(this, windowTitle(), + tr("The entered address \"%1\" is already in the address book.").arg(ui->addressEdit->text()), + QMessageBox::Ok, QMessageBox::Ok); + break; + case AddressTableModel::WALLET_UNLOCK_FAILURE: + QMessageBox::critical(this, windowTitle(), + tr("Could not unlock wallet."), + QMessageBox::Ok, QMessageBox::Ok); + break; + case AddressTableModel::KEY_GENERATION_FAILURE: + QMessageBox::critical(this, windowTitle(), + tr("New key generation failed."), + QMessageBox::Ok, QMessageBox::Ok); + break; + + } + return; + } + QDialog::accept(); +} + +QString EditAddressDialog::getAddress() const +{ + return address; +} + +void EditAddressDialog::setAddress(const QString &address) +{ + this->address = address; + ui->addressEdit->setText(address); +} diff --git a/src/qt/editaddressdialog.h b/src/qt/editaddressdialog.h index c2719d3..be1562b 100644 --- a/src/qt/editaddressdialog.h +++ b/src/qt/editaddressdialog.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/editaddressdialog.h~ b/src/qt/editaddressdialog.h~ new file mode 100644 index 0000000..99d3b0f --- /dev/null +++ b/src/qt/editaddressdialog.h~ @@ -0,0 +1,58 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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; +} + +QT_BEGIN_NAMESPACE +class QDataWidgetMapper; +QT_END_NAMESPACE + +/** Dialog for editing an address and associated information. + */ +class EditAddressDialog : public QDialog +{ + Q_OBJECT + +public: + enum Mode { + NewReceivingAddress, + NewSendingAddress, + EditReceivingAddress, + EditSendingAddress + }; + + explicit EditAddressDialog(Mode mode, QWidget *parent); + ~EditAddressDialog(); + + void setModel(AddressTableModel *model); + void loadRow(int row); + + QString getAddress() const; + void setAddress(const QString &address); + +public slots: + void accept(); + +private: + bool saveCurrentRow(); + + Ui::EditAddressDialog *ui; + QDataWidgetMapper *mapper; + Mode mode; + AddressTableModel *model; + + QString address; +}; + +#endif // EDITADDRESSDIALOG_H diff --git a/src/qt/forms/aboutdialog.ui b/src/qt/forms/aboutdialog.ui index edf32e4..a1d9b01 100644 --- a/src/qt/forms/aboutdialog.ui +++ b/src/qt/forms/aboutdialog.ui @@ -11,7 +11,7 @@ - About Pfennig Core + About pfennig Core @@ -50,7 +50,7 @@ IBeamCursor - <b>Pfennig Core</b> version + <b>pfennig Core</b> version Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse @@ -107,7 +107,7 @@ IBeamCursor - Copyright &copy; YYYY The Pfennig Core Developers + Copyright &copy; YYYY The pfennig Core Developers Qt::RichText diff --git a/src/qt/forms/aboutdialog.ui~ b/src/qt/forms/aboutdialog.ui~ new file mode 100644 index 0000000..80c335e --- /dev/null +++ b/src/qt/forms/aboutdialog.ui~ @@ -0,0 +1,205 @@ + + + AboutDialog + + + + 0 + 0 + 593 + 319 + + + + About GameCredits Core + + + + + + + 0 + 0 + + + + :/images/about + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + IBeamCursor + + + <b>GameCredits Core</b> version + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + IBeamCursor + + + 0.3.666-beta + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + IBeamCursor + + + Copyright &copy; YYYY The Bitcoin Core Developers + + + Qt::RichText + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + IBeamCursor + + + Copyright &copy; YYYY The GameCredits Core Developers + + + Qt::RichText + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + IBeamCursor + + + +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. + + + true + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + + + + + + + + + + + buttonBox + accepted() + AboutDialog + accept() + + + 20 + 20 + + + 20 + 20 + + + + + buttonBox + rejected() + AboutDialog + reject() + + + 20 + 20 + + + 20 + 20 + + + + + diff --git a/src/qt/forms/coincontroldialog.ui~ b/src/qt/forms/coincontroldialog.ui~ new file mode 100644 index 0000000..663dc0b --- /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 GMC + + + 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 GMC + + + 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 GMC + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + false + + + + 75 + true + + + + Change: + + + + + + + false + + + IBeamCursor + + + Qt::ActionsContextMenu + + + 0.00 GMC + + + 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/helpmessagedialog.ui b/src/qt/forms/helpmessagedialog.ui index 785e4b0..6bf4c78 100644 --- a/src/qt/forms/helpmessagedialog.ui +++ b/src/qt/forms/helpmessagedialog.ui @@ -16,7 +16,7 @@
- Pfennig Core - Command-line options + pfennig Core - Command-line options diff --git a/src/qt/forms/helpmessagedialog.ui~ b/src/qt/forms/helpmessagedialog.ui~ new file mode 100644 index 0000000..472e6e0 --- /dev/null +++ b/src/qt/forms/helpmessagedialog.ui~ @@ -0,0 +1,128 @@ + + + HelpMessageDialog + + + + 0 + 0 + 800 + 400 + + + + + 10 + + + + GameCredits 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 2e81dc2..095ff5b 100644 --- a/src/qt/forms/intro.ui +++ b/src/qt/forms/intro.ui @@ -20,7 +20,7 @@ QLabel { font-style:italic; } - Welcome to Pfennig Core. + Welcome to pfennig Core. true @@ -46,7 +46,7 @@ - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. true @@ -56,7 +56,7 @@ - Bitmark Core will download and store a copy of the Pfennig 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. + Bitmark Core will download and store a copy of the pfennig 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 diff --git a/src/qt/forms/intro.ui~ b/src/qt/forms/intro.ui~ new file mode 100644 index 0000000..ef21a73 --- /dev/null +++ b/src/qt/forms/intro.ui~ @@ -0,0 +1,266 @@ + + + Intro + + + + 0 + 0 + 674 + 363 + + + + Welcome + + + + + + QLabel { font-style:italic; } + + + Welcome to GameCredits Core. + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Minimum + + + + 20 + 15 + + + + + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + true + + + + + + + Bitmark Core will download and store a copy of the GameCredits 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 + + + + + + + Use the default data directory + + + + + + + Use a custom data directory: + + + + + + + 0 + + + QLayout::SetDefaultConstraint + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 60 + 20 + + + + + + + + QLayout::SetDefaultConstraint + + + + + + + + + + + 0 + 0 + + + + + 30 + 16777215 + + + + + + + false + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + 1 + 0 + + + + + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + 0 + 0 + + + + Qt::RichText + + + true + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + Intro + accept() + + + 20 + 20 + + + 20 + 20 + + + + + buttonBox + rejected() + Intro + reject() + + + 20 + 20 + + + 20 + 20 + + + + + diff --git a/src/qt/forms/optionsdialog.ui b/src/qt/forms/optionsdialog.ui index 1f4f99b..727bec7 100644 --- a/src/qt/forms/optionsdialog.ui +++ b/src/qt/forms/optionsdialog.ui @@ -30,10 +30,10 @@ - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -235,7 +235,7 @@ - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. Map port using &UPnP @@ -245,7 +245,7 @@ - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. &Connect through SOCKS proxy (default proxy): @@ -431,7 +431,7 @@ - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -464,7 +464,7 @@ - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. &Display addresses in transaction list diff --git a/src/qt/forms/optionsdialog.ui~ b/src/qt/forms/optionsdialog.ui~ new file mode 100644 index 0000000..dacc733 --- /dev/null +++ b/src/qt/forms/optionsdialog.ui~ @@ -0,0 +1,668 @@ + + + OptionsDialog + + + + 0 + 0 + 560 + 400 + + + + Options + + + true + + + + + + 0 + + + + &Main + + + + + + Automatically start GameCredits after logging in to the system. + + + &Start GameCredits 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 + + + + + + Optional transaction fee per kB that helps make sure your transactions are processed quickly. Most transactions are 1 kB. + + + Qt::PlainText + + + true + + + + + + + + + Pay transaction &fee + + + Qt::PlainText + + + transactionFee + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + 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 + + + + + + + + + + + &Network + + + + + + Automatically open the GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + + + Map port using &UPnP + + + + + + + Connect to the GameCredits network through a SOCKS proxy. + + + &Connect through SOCKS proxy (default proxy): + + + + + + + + + Proxy &IP: + + + Qt::PlainText + + + proxyIp + + + + + + + + 140 + 0 + + + + + 140 + 16777215 + + + + IP address of the proxy (e.g. IPv4: 127.0.0.1 / IPv6: ::1) + + + + + + + &Port: + + + Qt::PlainText + + + proxyPort + + + + + + + + 55 + 0 + + + + + 55 + 16777215 + + + + Port of the proxy (e.g. 9050) + + + + + + + SOCKS &Version: + + + Qt::PlainText + + + socksVersion + + + + + + + SOCKS version of the proxy (e.g. 5) + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + &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 + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + &Display + + + + + + + + User Interface &language: + + + Qt::PlainText + + + lang + + + + + + + The user interface language can be set here. This setting will take effect after restarting GameCredits. + + + + + + + + + + + &Unit to show amounts in: + + + Qt::PlainText + + + unit + + + + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + + + + + + Whether to show GameCredits addresses in the transaction list or not. + + + &Display addresses in transaction list + + + + + + + + + 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 |. + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + + + 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 + + + + + + + Qt::Horizontal + + + + 40 + 48 + + + + + + + + + 200 + 0 + + + + + 75 + true + + + + + + + Qt::PlainText + + + true + + + + + + + Qt::Horizontal + + + + 40 + 48 + + + + + + + + &OK + + + + + + + &Cancel + + + false + + + + + + + + + + BitmarkAmountField + QLineEdit +
bitmarkamountfield.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 99f56b8..71c67ba 100644 --- a/src/qt/forms/overviewpage.ui +++ b/src/qt/forms/overviewpage.ui @@ -61,7 +61,7 @@ - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. QLabel { color: red; } @@ -292,7 +292,7 @@ - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. QLabel { color: red; } diff --git a/src/qt/forms/overviewpage.ui~ b/src/qt/forms/overviewpage.ui~ new file mode 100644 index 0000000..d244ad7 --- /dev/null +++ b/src/qt/forms/overviewpage.ui~ @@ -0,0 +1,366 @@ + + + OverviewPage + + + + 0 + 0 + 573 + 342 + + + + Form + + + + + + false + + + background-color: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, stop:0 #F0D0A0, stop:1 #F8D488); color:#000000; + + + true + + + 3 + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + + 75 + true + + + + Wallet + + + + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits network after a connection is established, but this process has not completed yet. + + + QLabel { color: red; } + + + (out of sync) + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + QFormLayout::AllNonFixedFieldsGrow + + + 12 + + + 12 + + + + + Available: + + + + + + + + 75 + true + + + + IBeamCursor + + + Your current spendable balance + + + 0 GMC + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Pending: + + + + + + + + 75 + true + + + + IBeamCursor + + + Total of transactions that have yet to be confirmed, and do not yet count toward the spendable balance + + + 0 GMC + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Immature: + + + + + + + + 75 + true + + + + Mined balance that has not yet matured + + + 0 GMC + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Total: + + + + + + + + 75 + true + + + + IBeamCursor + + + Your current total balance + + + 0 GMC + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Qt::Horizontal + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + <b>Recent transactions</b> + + + + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits network after a connection is established, but this process has not completed yet. + + + QLabel { color: red; } + + + (out of sync) + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + QListView { background: transparent; } + + + QFrame::NoFrame + + + Qt::ScrollBarAlwaysOff + + + Qt::ScrollBarAlwaysOff + + + QAbstractItemView::NoSelection + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + diff --git a/src/qt/forms/receivecoinsdialog.ui b/src/qt/forms/receivecoinsdialog.ui index 371dbc4..5fe5d90 100644 --- a/src/qt/forms/receivecoinsdialog.ui +++ b/src/qt/forms/receivecoinsdialog.ui @@ -48,7 +48,7 @@ - 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 Pfennig network. + 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 pfennig network. &Message: @@ -71,7 +71,7 @@ - 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 Pfennig network. + 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 pfennig network. diff --git a/src/qt/forms/receivecoinsdialog.ui~ b/src/qt/forms/receivecoinsdialog.ui~ new file mode 100644 index 0000000..0973162 --- /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 GameCredits 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 GameCredits 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 + + + + + + + + + + + + + + BitmarkAmountField + QLineEdit +
bitmarkamountfield.h
+
+
+ + reqLabel + reqAmount + reqMessage + reuseAddress + receiveButton + clearButton + recentRequestsView + showRequestButton + removeRequestButton + + + + + +
diff --git a/src/qt/forms/rpcconsole.ui b/src/qt/forms/rpcconsole.ui index 977f47f..690fcdd 100644 --- a/src/qt/forms/rpcconsole.ui +++ b/src/qt/forms/rpcconsole.ui @@ -305,7 +305,7 @@ - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. &Open diff --git a/src/qt/forms/rpcconsole.ui~ b/src/qt/forms/rpcconsole.ui~ new file mode 100644 index 0000000..0936978 --- /dev/null +++ b/src/qt/forms/rpcconsole.ui~ @@ -0,0 +1,674 @@ + + + RPCConsole + + + + 0 + 0 + 740 + 450 + + + + Debug window + + + + + + 0 + + + + &Information + + + + 12 + + + + + + 75 + true + + + + General + + + + + + + Client name + + + + + + + IBeamCursor + + + N/A + + + Qt::PlainText + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Client version + + + + + + + IBeamCursor + + + N/A + + + Qt::PlainText + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Using OpenSSL version + + + 10 + + + + + + + IBeamCursor + + + N/A + + + Qt::PlainText + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Build date + + + + + + + IBeamCursor + + + N/A + + + Qt::PlainText + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Startup time + + + + + + + IBeamCursor + + + N/A + + + Qt::PlainText + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + 75 + true + + + + Network + + + + + + + Name + + + + + + + IBeamCursor + + + N/A + + + Qt::PlainText + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Number of connections + + + + + + + IBeamCursor + + + N/A + + + Qt::PlainText + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + 75 + true + + + + Block chain + + + + + + + Current number of blocks + + + + + + + IBeamCursor + + + N/A + + + Qt::PlainText + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Last block time + + + + + + + IBeamCursor + + + N/A + + + Qt::PlainText + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + Qt::Vertical + + + + 20 + 20 + + + + + + + + + 75 + true + + + + Debug log file + + + + + + + Open the GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + &Open + + + false + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + &Console + + + + 3 + + + + + + 0 + 100 + + + + true + + + false + + + 2 + + + + + + + 3 + + + + + > + + + + + + + + + + + 24 + 24 + + + + Clear console + + + + + + + :/icons/remove:/icons/remove + + + Ctrl+L + + + false + + + + + + + + + + &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~ new file mode 100644 index 0000000..e989802 --- /dev/null +++ b/src/qt/forms/sendcoinsdialog.ui~ @@ -0,0 +1,792 @@ + + + SendCoinsDialog + + + + 0 + 0 + 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 GMC + + + 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 GMC + + + 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 GMC + + + Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + 75 + true + + + + Change: + + + + + + + IBeamCursor + + + Qt::ActionsContextMenu + + + 0.00 GMC + + + 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 + + + + + + + + + + + + + true + + + + + 0 + 0 + 830 + 178 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 6 + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + 150 + 0 + + + + Confirm the send action + + + S&end + + + + :/icons/send:/icons/send + + + true + + + + + + + + 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 GMC + + + 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 378a18f..f24b3dd 100644 --- a/src/qt/forms/sendcoinsentry.ui +++ b/src/qt/forms/sendcoinsentry.ui @@ -154,7 +154,7 @@ - A message that was attached to the bitmark: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the bitmark: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. Qt::PlainText diff --git a/src/qt/forms/sendcoinsentry.ui~ b/src/qt/forms/sendcoinsentry.ui~ new file mode 100644 index 0000000..5eb933b --- /dev/null +++ b/src/qt/forms/sendcoinsentry.ui~ @@ -0,0 +1,1236 @@ + + + SendCoinsEntry + + + + 0 + 0 + 729 + 150 + + + + Qt::TabFocus + + + false + + + + This is a normal payment. + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + 12 + + + + + Pay &To: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + payTo + + + + + + + 0 + + + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + + + 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 bitmark: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits 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 + + + + + + + + + QValidatedLineEdit + QLineEdit +
qvalidatedlineedit.h
+
+ + BitmarkAmountField + QLineEdit +
bitmarkamountfield.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 a16af43..17ec3e4 100644 --- a/src/qt/forms/signverifymessagedialog.ui +++ b/src/qt/forms/signverifymessagedialog.ui @@ -149,7 +149,7 @@ - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address Sign &Message @@ -292,7 +292,7 @@ - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address Verify &Message diff --git a/src/qt/forms/signverifymessagedialog.ui~ b/src/qt/forms/signverifymessagedialog.ui~ new file mode 100644 index 0000000..97601bf --- /dev/null +++ b/src/qt/forms/signverifymessagedialog.ui~ @@ -0,0 +1,387 @@ + + + SignVerifyMessageDialog + + + + 0 + 0 + 700 + 380 + + + + Signatures - Sign / Verify a Message + + + true + + + + + + + &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. + + + Qt::PlainText + + + true + + + + + + + 0 + + + + + The address to sign the message with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + + + Choose previously used address + + + + + + + :/icons/address-book:/icons/address-book + + + Alt+A + + + false + + + + + + + Paste address from clipboard + + + + + + + :/icons/editpaste:/icons/editpaste + + + Alt+P + + + false + + + + + + + + + Enter the message you want to sign here + + + + + + + Signature + + + Qt::PlainText + + + + + + + 0 + + + + + + true + + + + true + + + + + + + Copy the current signature to the system clipboard + + + + + + + :/icons/editcopy:/icons/editcopy + + + false + + + + + + + + + + + Sign the message to prove you own this GameCredits address + + + Sign &Message + + + + :/icons/edit:/icons/edit + + + false + + + + + + + Reset all sign message fields + + + Clear &All + + + + :/icons/remove:/icons/remove + + + false + + + + + + + Qt::Horizontal + + + + 40 + 48 + + + + + + + + + 75 + true + + + + + + + true + + + + + + + Qt::Horizontal + + + + 40 + 48 + + + + + + + + + + + &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. + + + Qt::PlainText + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + + 0 + + + + + The address the message was signed with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + + + Choose previously used address + + + + + + + :/icons/address-book:/icons/address-book + + + Alt+A + + + false + + + + + + + + + + + + + + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + Verify &Message + + + + :/icons/transaction_0:/icons/transaction_0 + + + false + + + + + + + Reset all verify message fields + + + Clear &All + + + + :/icons/remove:/icons/remove + + + false + + + + + + + Qt::Horizontal + + + + 40 + 48 + + + + + + + + + 75 + true + + + + + + + true + + + + + + + Qt::Horizontal + + + + 40 + 48 + + + + + + + + + + + + + + + QValidatedLineEdit + QLineEdit +
qvalidatedlineedit.h
+
+
+ + + + +
diff --git a/src/qt/guiconstants.h b/src/qt/guiconstants.h index 3a0e52f..4f1fa8d 100644 --- a/src/qt/guiconstants.h +++ b/src/qt/guiconstants.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -12,7 +12,7 @@ static const int MODEL_UPDATE_DELAY = 250; /* AskPassphraseDialog -- Maximum passphrase length */ static const int MAX_PASSPHRASE_SIZE = 1024; -/* BitmarkGUI -- Size of icons in status bar */ +/* PfennigGUI -- Size of icons in status bar */ static const int STATUSBAR_ICONSIZE = 16; /* Invalid field background style */ @@ -42,9 +42,9 @@ static const int MAX_PAYMENT_REQUEST_SIZE = 50000; // bytes /* Number of frames in spinner animation */ #define SPINNER_FRAMES 35 -#define QAPP_ORG_NAME "Pfennig" -#define QAPP_ORG_DOMAIN "bitmark.org" -#define QAPP_APP_NAME_DEFAULT "Pfennig-Qt" -#define QAPP_APP_NAME_TESTNET "Pfennig-Qt-testnet" +#define QAPP_ORG_NAME "pfennig" +#define QAPP_ORG_DOMAIN "pfennig.org" +#define QAPP_APP_NAME_DEFAULT "pfennig-Qt" +#define QAPP_APP_NAME_TESTNET "pfennig-Qt-testnet" #endif // GUICONSTANTS_H diff --git a/src/qt/guiconstants.h~ b/src/qt/guiconstants.h~ new file mode 100644 index 0000000..108f9c6 --- /dev/null +++ b/src/qt/guiconstants.h~ @@ -0,0 +1,50 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +/* Milliseconds between model updates */ +static const int MODEL_UPDATE_DELAY = 250; + +/* AskPassphraseDialog -- Maximum passphrase length */ +static const int MAX_PASSPHRASE_SIZE = 1024; + +/* PfennigGUI -- Size of icons in status bar */ +static const int STATUSBAR_ICONSIZE = 16; + +/* Invalid field background style */ +#define STYLE_INVALID "background:#FF8080" + +/* Transaction list -- unconfirmed transaction */ +#define COLOR_UNCONFIRMED QColor(128, 128, 128) +/* Transaction list -- negative amount */ +#define COLOR_NEGATIVE QColor(255, 0, 0) +/* Transaction list -- bare address (without label) */ +#define COLOR_BAREADDRESS QColor(140, 140, 140) + +/* Tooltips longer than this (in characters) are converted into rich text, + so that they can be word-wrapped. + */ +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 "pfennig" +#define QAPP_ORG_DOMAIN "pfennig.org" +#define QAPP_APP_NAME_DEFAULT "pfennig-Qt" +#define QAPP_APP_NAME_TESTNET "pfennig-Qt-testnet" + +#endif // GUICONSTANTS_H diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index 7b28e0e..9b48c82 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -98,7 +98,7 @@ void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent) widget->setFont(bitmarkAddressFont()); #if QT_VERSION >= 0x040700 - widget->setPlaceholderText(QObject::tr("Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR)")); + widget->setPlaceholderText(QObject::tr("Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR)")); #endif widget->setValidator(new BitmarkAddressEntryValidator(parent)); widget->setCheckValidator(new BitmarkAddressCheckValidator(parent)); @@ -116,7 +116,7 @@ void setupAmountWidget(QLineEdit *widget, QWidget *parent) bool parseBitmarkURI(const QUrl &uri, SendCoinsRecipient *out) { // return if URI is not valid or is no bitmark: URI - if(!uri.isValid() || uri.scheme() != QString("bitmark")) + if(!uri.isValid() || uri.scheme() != QString("pfennig")) return false; SendCoinsRecipient rv; @@ -172,13 +172,13 @@ bool parseBitmarkURI(const QUrl &uri, SendCoinsRecipient *out) bool parseBitmarkURI(QString uri, SendCoinsRecipient *out) { - // Convert bitmark:// to bitmark: + // Convert pfennig:// to pfennig: // - // Cannot handle this later, because bitmark:// will cause Qt to see the part after // as host, + // Cannot handle this later, because pfennig:// will cause Qt to see the part after // as host, // which will lower-case it (and thus invalidate the address). - if(uri.startsWith("bitmark://", Qt::CaseInsensitive)) + if(uri.startsWith("pfennig://", Qt::CaseInsensitive)) { - uri.replace(0, 10, "bitmark:"); + uri.replace(0, 10, "pfennig:"); } QUrl uriInstance(uri); return parseBitmarkURI(uriInstance, out); @@ -186,7 +186,7 @@ bool parseBitmarkURI(QString uri, SendCoinsRecipient *out) QString formatBitmarkURI(const SendCoinsRecipient &info) { - QString ret = QString("bitmark:%1").arg(info.address); + QString ret = QString("pfennig:%1").arg(info.address); int paramCount = 0; if (info.amount) @@ -538,12 +538,12 @@ TableViewLastColumnResizingFixer::TableViewLastColumnResizingFixer(QTableView* t #ifdef WIN32 boost::filesystem::path static StartupShortcutPath() { - return GetSpecialFolderPath(CSIDL_STARTUP) / "Pfennig.lnk"; + return GetSpecialFolderPath(CSIDL_STARTUP) / "pfennig.lnk"; } bool GetStartOnSystemStartup() { - // check for Pfennig.lnk + // check for pfennig.lnk return boost::filesystem::exists(StartupShortcutPath()); } @@ -620,7 +620,7 @@ boost::filesystem::path static GetAutostartDir() boost::filesystem::path static GetAutostartFilePath() { - return GetAutostartDir() / "bitmark.desktop"; + return GetAutostartDir() / "pfennig.desktop"; } bool GetStartOnSystemStartup() @@ -658,10 +658,10 @@ bool SetStartOnSystemStartup(bool fAutoStart) boost::filesystem::ofstream optionFile(GetAutostartFilePath(), std::ios_base::out|std::ios_base::trunc); if (!optionFile.good()) return false; - // Write a bitmark.desktop file to the autostart directory: + // Write a pfennig.desktop file to the autostart directory: optionFile << "[Desktop Entry]\n"; optionFile << "Type=Application\n"; - optionFile << "Name=Pfennig\n"; + optionFile << "Name=pfennig\n"; optionFile << "Exec=" << pszExePath << " -min\n"; optionFile << "Terminal=false\n"; optionFile << "Hidden=false\n"; @@ -680,7 +680,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 bitmark app + // loop through the list of startup items and try to find the pfennig app CFArrayRef listSnapshot = LSSharedFileListCopySnapshot(list, NULL); for(int i = 0; i < CFArrayGetCount(listSnapshot); i++) { LSSharedFileListItemRef item = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(listSnapshot, i); @@ -714,7 +714,7 @@ bool SetStartOnSystemStartup(bool fAutoStart) LSSharedFileListItemRef foundItem = findStartupItemInList(loginItems, bitmarkAppUrl); if(fAutoStart && !foundItem) { - // add bitmark app to startup item list + // add pfennig app to startup item list LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemBeforeFirst, NULL, NULL, bitmarkAppUrl, NULL, NULL); } else if(!fAutoStart && foundItem) { diff --git a/src/qt/guiutil.cpp~ b/src/qt/guiutil.cpp~ new file mode 100644 index 0000000..e42b9e2 --- /dev/null +++ b/src/qt/guiutil.cpp~ @@ -0,0 +1,785 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmarkaddressvalidator.h" +#include "bitmarkunits.h" +#include "qvalidatedlineedit.h" +#include "walletmodel.h" + +#include "core.h" +#include "init.h" +#include "util.h" + +#ifdef WIN32 +#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 "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 + +#if defined(Q_OS_MAC) +extern double NSAppKitVersionNumber; +#if !defined(NSAppKitVersionNumber10_9) +#define NSAppKitVersionNumber10_9 1265 +#endif +#endif + +namespace GUIUtil { + +QString dateTimeStr(const QDateTime &date) +{ + return date.date().toString(Qt::SystemLocaleShortDate) + QString(" ") + date.toString("hh:mm"); +} + +QString dateTimeStr(qint64 nTime) +{ + return dateTimeStr(QDateTime::fromTime_t((qint32)nTime)); +} + +QFont bitmarkAddressFont() +{ + QFont font("Monospace"); +#if QT_VERSION >= 0x040800 + font.setStyleHint(QFont::Monospace); +#else + font.setStyleHint(QFont::TypeWriter); +#endif + return font; +} + +void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent) +{ + parent->setFocusProxy(widget); + + widget->setFont(bitmarkAddressFont()); +#if QT_VERSION >= 0x040700 + widget->setPlaceholderText(QObject::tr("Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR)")); +#endif + widget->setValidator(new BitmarkAddressEntryValidator(parent)); + widget->setCheckValidator(new BitmarkAddressCheckValidator(parent)); +} + +void setupAmountWidget(QLineEdit *widget, QWidget *parent) +{ + QDoubleValidator *amountValidator = new QDoubleValidator(parent); + amountValidator->setDecimals(8); + amountValidator->setBottom(0.0); + widget->setValidator(amountValidator); + widget->setAlignment(Qt::AlignRight|Qt::AlignVCenter); +} + +bool parseBitmarkURI(const QUrl &uri, SendCoinsRecipient *out) +{ + // return if URI is not valid or is no bitmark: URI + if(!uri.isValid() || uri.scheme() != QString("pfennig")) + return false; + + SendCoinsRecipient rv; + rv.address = uri.path(); + rv.amount = 0; + +#if QT_VERSION < 0x050000 + QList > items = uri.queryItems(); +#else + QUrlQuery uriQuery(uri); + QList > items = uriQuery.queryItems(); +#endif + for (QList >::iterator i = items.begin(); i != items.end(); i++) + { + bool fShouldReturnFalse = false; + if (i->first.startsWith("req-")) + { + i->first.remove(0, 4); + fShouldReturnFalse = true; + } + + if (i->first == "label") + { + 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()) + { + if(!BitmarkUnits::parse(BitmarkUnits::PFG, i->second, &rv.amount)) + { + return false; + } + } + fShouldReturnFalse = false; + } + + if (fShouldReturnFalse) + return false; + } + if(out) + { + *out = rv; + } + return true; +} + +bool parseBitmarkURI(QString uri, SendCoinsRecipient *out) +{ + // Convert pfennig:// to pfennig: + // + // Cannot handle this later, because pfennig:// will cause Qt to see the part after // as host, + // which will lower-case it (and thus invalidate the address). + if(uri.startsWith("pfennig://", Qt::CaseInsensitive)) + { + uri.replace(0, 10, "pfennig:"); + } + QUrl uriInstance(uri); + return parseBitmarkURI(uriInstance, out); +} + +QString formatBitmarkURI(const SendCoinsRecipient &info) +{ + QString ret = QString("pfennig:%1").arg(info.address); + int paramCount = 0; + + if (info.amount) + { + ret += QString("?amount=%1").arg(BitmarkUnits::format(BitmarkUnits::PFG, 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 = CBitmarkAddress(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 + QString escaped = Qt::escape(str); +#else + QString escaped = str.toHtmlEscaped(); +#endif + if(fMultiLine) + { + escaped = escaped.replace("\n", "
\n"); + } + return escaped; +} + +QString HtmlEscape(const std::string& str, bool fMultiLine) +{ + return HtmlEscape(QString::fromStdString(str), fMultiLine); +} + +void copyEntryData(QAbstractItemView *view, int column, int role) +{ + if(!view || !view->selectionModel()) + return; + QModelIndexList selection = view->selectionModel()->selectedRows(column); + + if(!selection.isEmpty()) + { + // 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 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::getSaveFileName(parent, caption, myDir, filter, &selectedFilter)); + + /* 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); + } + + /* Add suffix if needed */ + QFileInfo info(result); + if(!result.isEmpty()) + { + if(info.suffix().isEmpty() && !selectedSuffix.isEmpty()) + { + /* No suffix specified, add selected suffix */ + if(!result.endsWith(".")) + result.append("."); + result.append(selectedSuffix); + } + } + + /* Return selected suffix if asked to */ + if(selectedSuffixOut) + { + *selectedSuffixOut = selectedSuffix; + } + 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()) + { + return Qt::BlockingQueuedConnection; + } + else + { + return Qt::DirectConnection; + } +} + +bool checkPoint(const QPoint &p, const QWidget *w) +{ + QWidget *atW = QApplication::widgetAt(w->mapToGlobal(p)); + if (!atW) return false; + return atW->topLevelWidget() == w; +} + +bool isObscured(QWidget *w) +{ + return !(checkPoint(QPoint(0, 0), w) + && checkPoint(QPoint(w->width() - 1, 0), w) + && checkPoint(QPoint(0, w->height() - 1), w) + && checkPoint(QPoint(w->width() - 1, w->height() - 1), w) + && checkPoint(QPoint(w->width() / 2, w->height() / 2), w)); +} + +void openDebugLogfile() +{ + boost::filesystem::path pathDebug = GetDataDir() / "debug.log"; + + /* Open debug.log with the associated application */ + if (boost::filesystem::exists(pathDebug)) + QDesktopServices::openUrl(QUrl::fromLocalFile(boostPathToQString(pathDebug))); +} + +ToolTipToRichTextFilter::ToolTipToRichTextFilter(int size_threshold, QObject *parent) : + QObject(parent), size_threshold(size_threshold) +{ + +} + +void SubstituteFonts() +{ +#if defined(Q_OS_MAC) +// Background: +// OSX's default font changed in 10.9 and QT is unable to find it with its +// usual fallback methods when building against the 10.7 sdk or lower. +// The 10.8 SDK added a function to let it find the correct fallback font. +// If this fallback is not properly loaded, some characters may fail to +// render correctly. +// +// Solution: If building with the 10.7 SDK or lower and the user's platform +// is 10.9 or higher at runtime, substitute the correct font. This needs to +// happen before the QApplication is created. +#if defined(MAC_OS_X_VERSION_MAX_ALLOWED) && MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_8 + if (floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_9) + QFont::insertSubstitution(".Lucida Grande UI", "Lucida Grande"); +#endif +#endif +} + +bool ToolTipToRichTextFilter::eventFilter(QObject *obj, QEvent *evt) +{ + if(evt->type() == QEvent::ToolTipChange) + { + QWidget *widget = static_cast(obj); + QString tooltip = widget->toolTip(); + if(tooltip.size() > size_threshold && !tooltip.startsWith("
to make sure Qt detects this as rich text + // Escape the current message as HTML and replace \n by
+ tooltip = "" + HtmlEscape(tooltip, true) + ""; + widget->setToolTip(tooltip); + return true; + } + } + 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() +{ + return GetSpecialFolderPath(CSIDL_STARTUP) / "pfennig.lnk"; +} + +bool GetStartOnSystemStartup() +{ + // check for pfennig.lnk + return boost::filesystem::exists(StartupShortcutPath()); +} + +bool SetStartOnSystemStartup(bool fAutoStart) +{ + // If the shortcut exists already, remove it for updating + boost::filesystem::remove(StartupShortcutPath()); + + if (fAutoStart) + { + CoInitialize(NULL); + + // Get a pointer to the IShellLink interface. + IShellLink* psl = NULL; + HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, + CLSCTX_INPROC_SERVER, IID_IShellLink, + reinterpret_cast(&psl)); + + if (SUCCEEDED(hres)) + { + // Get the current executable path + TCHAR pszExePath[MAX_PATH]; + GetModuleFileName(NULL, pszExePath, sizeof(pszExePath)); + + TCHAR pszArgs[5] = TEXT("-min"); + + // Set the path to the shortcut target + psl->SetPath(pszExePath); + PathRemoveFileSpec(pszExePath); + psl->SetWorkingDirectory(pszExePath); + psl->SetShowCmd(SW_SHOWMINNOACTIVE); + psl->SetArguments(pszArgs); + + // Query IShellLink for the IPersistFile interface for + // saving the shortcut in persistent storage. + IPersistFile* ppf = NULL; + hres = psl->QueryInterface(IID_IPersistFile, + reinterpret_cast(&ppf)); + if (SUCCEEDED(hres)) + { + WCHAR pwsz[MAX_PATH]; + // Ensure that the string is ANSI. + MultiByteToWideChar(CP_ACP, 0, StartupShortcutPath().string().c_str(), -1, pwsz, MAX_PATH); + // Save the link by calling IPersistFile::Save. + hres = ppf->Save(pwsz, TRUE); + ppf->Release(); + psl->Release(); + CoUninitialize(); + return true; + } + psl->Release(); + } + CoUninitialize(); + return false; + } + return true; +} + +#elif defined(Q_OS_LINUX) + +// Follow the Desktop Application Autostart Spec: +// http://standards.freedesktop.org/autostart-spec/autostart-spec-latest.html + +boost::filesystem::path static GetAutostartDir() +{ + namespace fs = boost::filesystem; + + char* pszConfigHome = getenv("XDG_CONFIG_HOME"); + if (pszConfigHome) return fs::path(pszConfigHome) / "autostart"; + char* pszHome = getenv("HOME"); + if (pszHome) return fs::path(pszHome) / ".config" / "autostart"; + return fs::path(); +} + +boost::filesystem::path static GetAutostartFilePath() +{ + return GetAutostartDir() / "pfennig.desktop"; +} + +bool GetStartOnSystemStartup() +{ + boost::filesystem::ifstream optionFile(GetAutostartFilePath()); + if (!optionFile.good()) + return false; + // Scan through file for "Hidden=true": + std::string line; + while (!optionFile.eof()) + { + getline(optionFile, line); + if (line.find("Hidden") != std::string::npos && + line.find("true") != std::string::npos) + return false; + } + optionFile.close(); + + return true; +} + +bool SetStartOnSystemStartup(bool fAutoStart) +{ + if (!fAutoStart) + boost::filesystem::remove(GetAutostartFilePath()); + else + { + char pszExePath[MAX_PATH+1]; + memset(pszExePath, 0, sizeof(pszExePath)); + if (readlink("/proc/self/exe", pszExePath, sizeof(pszExePath)-1) == -1) + return false; + + boost::filesystem::create_directories(GetAutostartDir()); + + boost::filesystem::ofstream optionFile(GetAutostartFilePath(), std::ios_base::out|std::ios_base::trunc); + if (!optionFile.good()) + return false; + // Write a pfennig.desktop file to the autostart directory: + optionFile << "[Desktop Entry]\n"; + optionFile << "Type=Application\n"; + optionFile << "Name=pfennig\n"; + optionFile << "Exec=" << pszExePath << " -min\n"; + optionFile << "Terminal=false\n"; + optionFile << "Hidden=false\n"; + optionFile.close(); + } + return true; +} + + +#elif defined(Q_OS_MAC) +// based on: https://github.com/Mozketo/LaunchAtLoginController/blob/master/LaunchAtLoginController.m + +#include +#include + +LSSharedFileListItemRef findStartupItemInList(LSSharedFileListRef list, CFURLRef findUrl); +LSSharedFileListItemRef findStartupItemInList(LSSharedFileListRef list, CFURLRef findUrl) +{ + // loop through the list of startup items and try to find the pfennig app + CFArrayRef listSnapshot = LSSharedFileListCopySnapshot(list, NULL); + for(int i = 0; i < CFArrayGetCount(listSnapshot); i++) { + LSSharedFileListItemRef item = (LSSharedFileListItemRef)CFArrayGetValueAtIndex(listSnapshot, i); + UInt32 resolutionFlags = kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes; + CFURLRef currentItemURL = NULL; + LSSharedFileListItemResolve(item, resolutionFlags, ¤tItemURL, NULL); + if(currentItemURL && CFEqual(currentItemURL, findUrl)) { + // found + CFRelease(currentItemURL); + return item; + } + if(currentItemURL) { + CFRelease(currentItemURL); + } + } + return NULL; +} + +bool GetStartOnSystemStartup() +{ + CFURLRef bitmarkAppUrl = CFBundleCopyBundleURL(CFBundleGetMainBundle()); + LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL); + LSSharedFileListItemRef foundItem = findStartupItemInList(loginItems, bitmarkAppUrl); + return !!foundItem; // return boolified object +} + +bool SetStartOnSystemStartup(bool fAutoStart) +{ + CFURLRef bitmarkAppUrl = CFBundleCopyBundleURL(CFBundleGetMainBundle()); + LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL); + LSSharedFileListItemRef foundItem = findStartupItemInList(loginItems, bitmarkAppUrl); + + if(fAutoStart && !foundItem) { + // add pfennig app to startup item list + LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemBeforeFirst, NULL, NULL, bitmarkAppUrl, NULL, NULL); + } + else if(!fAutoStart && foundItem) { + // remove item + LSSharedFileListItemRemove(loginItems, foundItem); + } + return true; +} +#else + +bool GetStartOnSystemStartup() { return false; } +bool SetStartOnSystemStartup(bool fAutoStart) { return false; } + +#endif + +void saveWindowGeometry(const QString& strSetting, QWidget *parent) +{ + QSettings settings; + settings.setValue(strSetting + "Pos", parent->pos()); + settings.setValue(strSetting + "Size", parent->size()); +} + +void restoreWindowGeometry(const QString& strSetting, const QSize& defaultSize, QWidget *parent) +{ + 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 setClipboard(const QString& str) +{ + 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 +#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 2f8f2af..cbfb7d5 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -26,7 +26,7 @@ class QUrl; class QWidget; QT_END_NAMESPACE -/** Utility functions used by the Bitmark Qt UI. +/** Utility functions used by the Pfennig Qt UI. */ namespace GUIUtil { @@ -34,14 +34,14 @@ namespace GUIUtil QString dateTimeStr(const QDateTime &datetime); QString dateTimeStr(qint64 nTime); - // Render Bitmark addresses in monospace font + // Render Pfennig addresses in monospace font QFont bitmarkAddressFont(); // Set up widgets for address and amounts void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent); void setupAmountWidget(QLineEdit *widget, QWidget *parent); - // Parse "bitmark:" URI into recipient object, return true on successful parsing + // Parse "pfennig:" URI into recipient object, return true on successful parsing bool parseBitmarkURI(const QUrl &uri, SendCoinsRecipient *out); bool parseBitmarkURI(QString uri, SendCoinsRecipient *out); QString formatBitmarkURI(const SendCoinsRecipient &info); diff --git a/src/qt/guiutil.h~ b/src/qt/guiutil.h~ new file mode 100644 index 0000000..6ddf7e0 --- /dev/null +++ b/src/qt/guiutil.h~ @@ -0,0 +1,182 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +class QValidatedLineEdit; +class SendCoinsRecipient; + +QT_BEGIN_NAMESPACE +class QAbstractItemView; +class QDateTime; +class QFont; +class QLineEdit; +class QUrl; +class QWidget; +QT_END_NAMESPACE + +/** Utility functions used by the Pfennig Qt UI. + */ +namespace GUIUtil +{ + // Create human-readable string from date + QString dateTimeStr(const QDateTime &datetime); + QString dateTimeStr(qint64 nTime); + + // Render Pfennig addresses in monospace font + QFont bitmarkAddressFont(); + + // Set up widgets for address and amounts + void setupAddressWidget(QValidatedLineEdit *widget, QWidget *parent); + void setupAmountWidget(QLineEdit *widget, QWidget *parent); + + // Parse "pfennig:" URI into recipient object, return true on successful parsing + bool parseBitmarkURI(const QUrl &uri, SendCoinsRecipient *out); + bool parseBitmarkURI(QString uri, SendCoinsRecipient *out); + QString formatBitmarkURI(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); + QString HtmlEscape(const std::string& str, bool fMultiLine=false); + + /** Copy a field of the currently selected entry of a view to the clipboard. Does nothing if nothing + is selected. + @param[in] column Data column to extract from the model + @param[in] role Data role to extract from the model + @see TransactionView::copyLabel, TransactionView::copyAmount, TransactionView::copyAddress + */ + 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. + + @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 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. + + @returns If called from the GUI thread, return a Qt::DirectConnection. + If called from another thread, return a Qt::BlockingQueuedConnection. + */ + Qt::ConnectionType blockingGUIThreadConnection(); + + // Determine whether a widget is hidden behind other windows + bool isObscured(QWidget *w); + + // Open debug.log + void openDebugLogfile(); + + // Replace invalid default fonts with known good ones + void SubstituteFonts(); + + /** Qt event filter that intercepts ToolTipChange events, and replaces the tooltip with a rich text + representation if needed. This assures that Qt can word-wrap long tooltip messages. + Tooltips longer than the provided size threshold (in characters) are wrapped. + */ + class ToolTipToRichTextFilter : public QObject + { + Q_OBJECT + + public: + explicit ToolTipToRichTextFilter(int size_threshold, QObject *parent = 0); + + protected: + bool eventFilter(QObject *obj, QEvent *evt); + + private: + int size_threshold; + }; + + /** + * 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: + TableViewLastColumnResizingFixer(QTableView* table, int lastColMinimumWidth, int allColsMinimumWidth); + void stretchColumnWidth(int column); + + private: + QTableView* tableView; + int lastColumnMinimumWidth; + int allColumnsMinimumWidth; + int lastColumnIndex; + int columnCount; + int secondToLastColumnIndex; + + 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 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 f9effad..8d6708b 100644 --- a/src/qt/intro.cpp +++ b/src/qt/intro.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -182,7 +182,7 @@ void Intro::pickDataDirectory() TryCreateDirectory(GUIUtil::qstringToBoostPath(dataDir)); break; } catch(fs::filesystem_error &e) { - QMessageBox::critical(0, tr("Pfennig"), + QMessageBox::critical(0, tr("pfennig"), tr("Error: Specified data directory \"%1\" can not be created.").arg(dataDir)); /* fall through, back to choosing screen */ } @@ -191,7 +191,7 @@ void Intro::pickDataDirectory() settings.setValue("strDataDir", dataDir); } /* Only override -datadir if different from the default, to make it possible to - * override -datadir in the bitmark.conf file in the default data directory + * override -datadir in the pfennig.conf file in the default data directory * (to be consistent with pfennigd behavior) */ if(dataDir != getDefaultDataDirectory()) diff --git a/src/qt/intro.cpp~ b/src/qt/intro.cpp~ new file mode 100644 index 0000000..b065514 --- /dev/null +++ b/src/qt/intro.cpp~ @@ -0,0 +1,293 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +/* Minimum free space (in bytes) needed for data directory */ +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. + + Up to one request to check a path is in flight to this thread; when the check() + function runs, the current path is requested from the associated Intro object. + The reply is sent back through a signal. + + This ensures that no queue of checking requests is built up while the user is + still entering the path, and that always the most recently entered path is checked as + soon as the thread becomes available. +*/ +class FreespaceChecker : public QObject +{ + Q_OBJECT + +public: + FreespaceChecker(Intro *intro); + + enum Status { + ST_OK, + ST_ERROR + }; + +public slots: + void check(); + +signals: + void reply(int status, const QString &message, quint64 available); + +private: + Intro *intro; +}; + +#include "intro.moc" + +FreespaceChecker::FreespaceChecker(Intro *intro) +{ + this->intro = intro; +} + +void FreespaceChecker::check() +{ + namespace fs = boost::filesystem; + QString dataDirStr = intro->getPathToCheck(); + 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 { + freeBytesAvailable = fs::space(parentDir).available; + if(fs::exists(dataDir)) + { + if(fs::is_directory(dataDir)) + { + QString separator = "" + QDir::toNativeSeparators("/") + tr("name") + ""; + replyStatus = ST_OK; + 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."); + } + } + } catch(fs::filesystem_error &e) + { + /* Parent directory does not exist or is not accessible */ + replyStatus = ST_ERROR; + replyMessage = tr("Cannot create data directory here."); + } + emit reply(replyStatus, replyMessage, freeBytesAvailable); +} + + +Intro::Intro(QWidget *parent) : + QDialog(parent), + ui(new Ui::Intro), + thread(0), + signalled(false) +{ + ui->setupUi(this); + ui->sizeWarningLabel->setText(ui->sizeWarningLabel->text().arg(BLOCK_CHAIN_SIZE/GB_BYTES)); + startThread(); +} + +Intro::~Intro() +{ + delete ui; + /* Ensure thread is finished before it is deleted */ + emit stopThread(); + thread->wait(); +} + +QString Intro::getDataDirectory() +{ + return ui->dataDirectory->text(); +} + +void Intro::setDataDirectory(const QString &dataDir) +{ + ui->dataDirectory->setText(dataDir); + if(dataDir == getDefaultDataDirectory()) + { + ui->dataDirDefault->setChecked(true); + ui->dataDirectory->setEnabled(false); + ui->ellipsisButton->setEnabled(false); + } else { + ui->dataDirCustom->setChecked(true); + ui->dataDirectory->setEnabled(true); + ui->ellipsisButton->setEnabled(true); + } +} + +QString Intro::getDefaultDataDirectory() +{ + return GUIUtil::boostPathToQString(GetDefaultDataDir()); +} + +void Intro::pickDataDirectory() +{ + namespace fs = boost::filesystem; + QSettings settings; + /* If data directory provided on command line, no need to look at settings + or show a picking dialog */ + if(!GetArg("-datadir", "").empty()) + return; + /* 1) Default data directory for operating system */ + QString dataDir = getDefaultDataDirectory(); + /* 2) Allow QSettings to override default dir */ + dataDir = settings.value("strDataDir", dataDir).toString(); + + 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/bitmark")); + + while(true) + { + if(!intro.exec()) + { + /* Cancel clicked */ + exit(0); + } + dataDir = intro.getDataDirectory(); + try { + TryCreateDirectory(GUIUtil::qstringToBoostPath(dataDir)); + break; + } catch(fs::filesystem_error &e) { + QMessageBox::critical(0, tr("pfennig"), + tr("Error: Specified data directory \"%1\" can not be created.").arg(dataDir)); + /* fall through, back to choosing screen */ + } + } + + settings.setValue("strDataDir", dataDir); + } + /* Only override -datadir if different from the default, to make it possible to + * override -datadir in the pfennig.conf file in the default data directory + * (to be consistent with pfennigd 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) +{ + switch(status) + { + case FreespaceChecker::ST_OK: + ui->errorMessage->setText(message); + ui->errorMessage->setStyleSheet(""); + break; + case FreespaceChecker::ST_ERROR: + ui->errorMessage->setText(tr("Error") + ": " + message); + ui->errorMessage->setStyleSheet("QLabel { color: #800000 }"); + break; + } + /* Indicate number of bytes available */ + if(status == FreespaceChecker::ST_ERROR) + { + ui->freeSpace->setText(""); + } else { + QString freeString = QString::number(bytesAvailable/GB_BYTES) + tr("GB of free space available"); + if(bytesAvailable < BLOCK_CHAIN_SIZE) + { + freeString += " " + tr("(of %1GB needed)").arg(BLOCK_CHAIN_SIZE/GB_BYTES); + ui->freeSpace->setStyleSheet("QLabel { color: #800000 }"); + } else { + ui->freeSpace->setStyleSheet(""); + } + ui->freeSpace->setText(freeString + "."); + } + /* Don't allow confirm in ERROR state */ + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(status != FreespaceChecker::ST_ERROR); +} + +void Intro::on_dataDirectory_textChanged(const QString &dataDirStr) +{ + /* Disable OK button until check result comes in */ + ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); + checkPath(dataDirStr); +} + +void Intro::on_ellipsisButton_clicked() +{ + QString dir = QDir::toNativeSeparators(QFileDialog::getExistingDirectory(0, "Choose data directory", ui->dataDirectory->text())); + if(!dir.isEmpty()) + ui->dataDirectory->setText(dir); +} + +void Intro::on_dataDirDefault_clicked() +{ + setDataDirectory(getDefaultDataDirectory()); +} + +void Intro::on_dataDirCustom_clicked() +{ + ui->dataDirectory->setEnabled(true); + ui->ellipsisButton->setEnabled(true); +} + +void Intro::startThread() +{ + thread = new QThread(this); + FreespaceChecker *executor = new FreespaceChecker(this); + executor->moveToThread(thread); + + connect(executor, SIGNAL(reply(int,QString,quint64)), this, SLOT(setStatus(int,QString,quint64))); + connect(this, SIGNAL(requestCheck()), executor, SLOT(check())); + /* make sure executor object is deleted in its own thread */ + connect(this, SIGNAL(stopThread()), executor, SLOT(deleteLater())); + connect(this, SIGNAL(stopThread()), thread, SLOT(quit())); + + thread->start(); +} + +void Intro::checkPath(const QString &dataDir) +{ + mutex.lock(); + pathToCheck = dataDir; + if(!signalled) + { + signalled = true; + emit requestCheck(); + } + mutex.unlock(); +} + +QString Intro::getPathToCheck() +{ + QString retval; + mutex.lock(); + retval = pathToCheck; + signalled = false; /* new request can be queued now */ + mutex.unlock(); + return retval; +} diff --git a/src/qt/intro.h b/src/qt/intro.h index d001830..80f3454 100644 --- a/src/qt/intro.h +++ b/src/qt/intro.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/intro.h~ b/src/qt/intro.h~ new file mode 100644 index 0000000..6575429 --- /dev/null +++ b/src/qt/intro.h~ @@ -0,0 +1,74 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +class FreespaceChecker; + +namespace Ui { +class Intro; +} + +/** Introduction screen (pre-GUI startup). + Allows the user to choose a data directory, + in which the wallet and block chain will be stored. + */ +class Intro : public QDialog +{ + Q_OBJECT + +public: + explicit Intro(QWidget *parent = 0); + ~Intro(); + + QString getDataDirectory(); + void setDataDirectory(const QString &dataDir); + + /** + * Determine data directory. Let the user choose if the current one doesn't exist. + * + * @note do NOT call global GetDataDir() before calling this function, this + * will cause the wrong path to be cached. + */ + static void pickDataDirectory(); + + /** + * Determine default data directory for operating system. + */ + static QString getDefaultDataDirectory(); + +signals: + void requestCheck(); + void stopThread(); + +public slots: + void setStatus(int status, const QString &message, quint64 bytesAvailable); + +private slots: + void on_dataDirectory_textChanged(const QString &arg1); + void on_ellipsisButton_clicked(); + void on_dataDirDefault_clicked(); + void on_dataDirCustom_clicked(); + +private: + Ui::Intro *ui; + QThread *thread; + QMutex mutex; + bool signalled; + QString pathToCheck; + + void startThread(); + void checkPath(const QString &dataDir); + QString getPathToCheck(); + + friend class FreespaceChecker; +}; + +#endif // INTRO_H diff --git a/src/qt/locale/bitmark_ach.ts b/src/qt/locale/bitmark_ach.ts index ca21c5f..576bb7a 100644 --- a/src/qt/locale/bitmark_ach.ts +++ b/src/qt/locale/bitmark_ach.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Pfennig + Show information about pfennig @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_ach.ts~ b/src/qt/locale/bitmark_ach.ts~ new file mode 100644 index 0000000..940c1e5 --- /dev/null +++ b/src/qt/locale/bitmark_ach.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about GameCredits + + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_af_ZA.ts b/src/qt/locale/bitmark_af_ZA.ts index 0bb0eab..48c6c0b 100644 --- a/src/qt/locale/bitmark_af_ZA.ts +++ b/src/qt/locale/bitmark_af_ZA.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O Bevestig beursie enkripsie. - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O Die beursie is nou bewaak - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,8 +291,8 @@ This product includes software developed by the OpenSSL Project for use in the O Sluit af - Show information about Pfennig - Wys inligting oor Pfennig + Show information about pfennig + Wys inligting oor pfennig About &Qt @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,8 +367,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Pfennig klient + pfennig client + pfennig klient - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,8 +945,8 @@ Address: %4 - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 Vorm - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,8 +1332,8 @@ Address: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Die adres waarheen die betaling gestuur moet word (b.v. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Die adres waarheen die betaling gestuur moet word (b.v. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,8 +2613,8 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Luister vir konneksies op <port> (standaard: P2PPORT of testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Luister vir konneksies op <port> (standaard: 40002 of testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_af_ZA.ts~ b/src/qt/locale/bitmark_af_ZA.ts~ new file mode 100644 index 0000000..6da6030 --- /dev/null +++ b/src/qt/locale/bitmark_af_ZA.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin Core Developers + + + + (%1-bit) + + + + + AddressBookPage + + 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 + + + &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 + &Verwyder + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 + Etiket + + + Address + Adres + + + (no label) + (geen etiket) + + + + 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 GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + 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 + + + E&xit + S&luit af + + + Quit application + Sluit af + + + Show information about GameCredits + Wys inligting oor GameCredits + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + GameCredits + + + Wallet + Beursie + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &Lêer + + + &Settings + &Instellings + + + &Help + &Hulp + + + Tabs toolbar + Blad nutsbalk + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + GameCredits klient + + + %n active connection(s) to GameCredits 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 + + + 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. GameCredits can no longer continue safely and will quit. + + + + + 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 list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + + + + 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 GameCredits address. + + + + Could not unlock wallet. + Kon nie die beursie oopsluit nie. + + + 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 + Vorm + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits network after a connection is established, but this process has not completed yet. + + + + 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> + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + GameCredits + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Die adres waarheen die betaling gestuur moet word (b.v. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + Balans: + + + Confirm the send action + + + + S&end + S&tuur + + + Confirm send coins + + + + %1 to %2 + + + + 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. + + + + 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 GameCredits 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 + + A&mount: + + + + Pay &To: + + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Die adres waarheen die betaling gestuur moet word (b.v. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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: + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Die adres waarheen die betaling gestuur moet word (b.v. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + 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 + + + + + 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 + + + + 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 + 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. + + + + + 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 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 + + + 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 %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + gamecredits-core + + Usage: + Gebruik: + + + List commands + + + + Get help for a command + + + + Options: + Opsies: + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Luister vir konneksies op <port> (standaard: 40002 of testnet: 50001) + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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) + + + + 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 gamecredits-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. GameCredits 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 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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) + + + + 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 + Hierdie help boodskap + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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 + + + + 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. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_ar.ts b/src/qt/locale/bitmark_ar.ts index d8ee3d2..d8a6d03 100644 --- a/src/qt/locale/bitmark_ar.ts +++ b/src/qt/locale/bitmark_ar.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O استقبال العناوين - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O تأكيد تشفير المحفظة - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O محفظة مشفرة - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. بتكوين سوف يغلق الآن لإنهاء عملية التشفير. تذكر أن التشفير لا يستطيع حماية محفظتك تمامًا من السرقة من خلال البرمجيات الخبيثة التي تصيب جهازك @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... التوقيع و الرسائل @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O الخروج من التطبيق - Show information about Pfennig + Show information about pfennig إظهار معلومات حول بت كوين @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address ارسل عملات الى عنوان بيتكوين - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O &التحقق من الرسالة... - Pfennig + pfennig بت كوين @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client عميل بت كوين - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -555,7 +555,7 @@ Address: %4 المحفظة <b>مشفرة</b> و <b>مقفلة</b> حاليا - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -840,7 +840,7 @@ Address: %4 هدا العنوان "%1" موجود مسبقا في دفتر العناوين - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -878,11 +878,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -929,15 +929,15 @@ Address: %4 أهلا - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -949,7 +949,7 @@ Address: %4 استخدام دليل بيانات مخصص: - Pfennig + pfennig بت كوين @@ -1011,11 +1011,11 @@ Address: %4 ادفع &رسوم المعاملة - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1031,7 +1031,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1091,7 +1091,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1147,7 +1147,7 @@ Address: %4 واجهة المستخدم &اللغة: - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1159,7 +1159,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1214,7 +1214,7 @@ Address: %4 نمودج - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1269,7 +1269,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1336,7 +1336,7 @@ Address: %4 QObject - Pfennig + pfennig بت كوين @@ -1352,12 +1352,12 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - إدخال عنوانPfennig (مثال :bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + إدخال عنوانpfennig (مثال :bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1478,7 +1478,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1486,7 +1486,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1549,7 +1549,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1862,7 +1862,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1949,7 +1949,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1968,7 +1968,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2023,7 +2023,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address وقع الرسالة لتثبت انك تمتلك عنوان البت كوين هذا @@ -2051,7 +2051,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2063,8 +2063,8 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - إدخال عنوانPfennig (مثال :bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + إدخال عنوانpfennig (مثال :bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2122,7 +2122,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2617,7 +2617,7 @@ Address: %4 حدد مجلد المعلومات - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2645,7 +2645,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2653,7 +2653,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2678,7 +2678,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2751,7 +2751,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2763,7 +2763,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2799,7 +2799,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2819,7 +2819,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3043,7 +3043,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3107,7 +3107,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3127,11 +3127,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3167,7 +3167,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3283,11 +3283,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. خطأ عند تنزيل wallet.dat: المحفظة تالفة - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig خطأ عند تنزيل wallet.dat: المحفظة تتطلب نسخة أحدث من بتكوين - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete المحفظة تحتاج لإعادة إنشاء: أعد تشغيل بتكوين للإتمام diff --git a/src/qt/locale/bitmark_ar.ts~ b/src/qt/locale/bitmark_ar.ts~ new file mode 100644 index 0000000..3f39722 --- /dev/null +++ b/src/qt/locale/bitmark_ar.ts~ @@ -0,0 +1,3372 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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>. + أدخل كلمة مرور جديدة للمحفظة. <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 GameCreditsS</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 + محفظة مشفرة + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + التوقيع و الرسائل + + + Synchronizing with network... + مزامنة مع الشبكة ... + + + &Overview + &نظرة عامة + + + Node + + + + Show general overview of wallet + إظهار نظرة عامة على المحفظة + + + &Transactions + &المعاملات + + + Browse transaction history + تصفح سجل المعاملات + + + E&xit + خروج + + + Quit application + الخروج من التطبيق + + + Show information about GameCredits + إظهار معلومات حول بت كوين + + + 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 GameCredits address + ارسل عملات الى عنوان بيتكوين + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + احفظ نسخة احتياطية للمحفظة في مكان آخر + + + Change the passphrase used for wallet encryption + تغيير كلمة المرور المستخدمة لتشفير المحفظة + + + &Debug window + &نافذة المعالجة + + + Open debugging and diagnostic console + + + + &Verify message... + &التحقق من الرسالة... + + + GameCredits + بت كوين + + + Wallet + محفظة + + + &Send + %ارسل + + + &Receive + &استقبل + + + &Show / Hide + &عرض / اخفاء + + + Show or hide the main Window + عرض او اخفاء النافذة الرئيسية + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &ملف + + + &Settings + &الاعدادات + + + &Help + &مساعدة + + + Tabs toolbar + شريط أدوات علامات التبويب + + + [testnet] + [testnet] + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + عميل بت كوين + + + %n active connection(s) to GameCredits 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 + معلومات + + + 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + استخدام دليل بيانات مخصص: + + + GameCredits + بت كوين + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + م ب + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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) + منفذ البروكسي (مثلا 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + + + + QObject + + GameCredits + بت كوين + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + إدخال عنوانGameCredits (مثال :bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + &حفظ الصورة + + + &Copy Image + &نسخ الصورة + + + Save QR Code + حفظ رمز الاستجابة السريعة QR + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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% بايت + + + %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 GameCredits 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. + + + + Clear &All + مسح الكل + + + Balance: + الرصيد: + + + Confirm the send action + تأكيد الإرسال + + + S&end + &ارسال + + + Confirm send coins + تأكيد الإرسال 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. + + + + Warning: Invalid GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + تحقق &الرسالة + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + إدخال عنوانGameCredits (مثال :bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + + + + The Bitcoin 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. + + + + 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) + تأكيد الإرسال 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 + + + + 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 + إرسال 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 + نجاح النسخ الاحتياطي + + + + gamecredits-core + + Usage: + المستخدم + + + List commands + اعرض الأوامر + + + Get help for a command + مساعدة في كتابة الاوامر + + + Options: + خيارات: + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + حدد مجلد المعلومات + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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) + المفتاح الخاص بالسيرفر (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 GameCredits + خطأ عند تنزيل wallet.dat: المحفظة تتطلب نسخة أحدث من بتكوين + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_be_BY.ts b/src/qt/locale/bitmark_be_BY.ts index a1b447e..8896f81 100644 --- a/src/qt/locale/bitmark_be_BY.ts +++ b/src/qt/locale/bitmark_be_BY.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O Пацвердзіце шыфраванне гаманца - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,8 +220,8 @@ This product includes software developed by the OpenSSL Project for use in the O Гаманец зашыфраваны - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig зачыняецца дзеля завяршэння працэсса шыфравання. Памятайце, што шыфраванне гаманца цалкам абараняе вашыя сродкі ад скрадання шкоднымі праграмамі якія могуць пранікнуць у ваш камп'ютар. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig зачыняецца дзеля завяршэння працэсса шыфравання. Памятайце, што шыфраванне гаманца цалкам абараняе вашыя сродкі ад скрадання шкоднымі праграмамі якія могуць пранікнуць у ваш камп'ютар. Wallet encryption failed @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O Выйсці з праграмы - Show information about Pfennig + Show information about pfennig Паказаць звесткі пра Біткойн @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,16 +451,16 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Pfennig кліент + pfennig client + pfennig кліент - %n active connection(s) to Pfennig network - %n актыўнае злучэнне з Pfennig-сецівам%n актыўных злучэнняў з Pfennig-сецівам + %n active connection(s) to pfennig network + %n актыўнае злучэнне з pfennig-сецівам%n актыўных злучэнняў з pfennig-сецівам No block source available... @@ -555,7 +555,7 @@ Address: %4 Гаманец <b>зашыфраваны</b> і зараз <b>заблакаваны</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -840,7 +840,7 @@ Address: %4 Уведзены адрас "%1" ужо ў кніге адрасоў - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -878,11 +878,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -929,15 +929,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -949,7 +949,7 @@ Address: %4 - Pfennig + pfennig @@ -1011,11 +1011,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1031,7 +1031,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1091,7 +1091,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1147,7 +1147,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1159,7 +1159,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1214,7 +1214,7 @@ Address: %4 Форма - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1269,7 +1269,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1336,7 +1336,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1352,11 +1352,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Увядзіце Біткойн-адрас (ўзор bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1478,7 +1478,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1486,7 +1486,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1549,7 +1549,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1862,7 +1862,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1949,7 +1949,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1968,7 +1968,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2023,7 +2023,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2051,7 +2051,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2063,7 +2063,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Увядзіце Біткойн-адрас (ўзор bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2122,7 +2122,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2617,8 +2617,8 @@ Address: %4 Вызначыць каталог даных - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Слухаць злучэнні на <port> (зыходна: P2PPORT ці testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Слухаць злучэнні на <port> (зыходна: 40002 ці testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2645,7 +2645,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2653,7 +2653,7 @@ Address: %4 Прымаць камандны радок і JSON-RPC каманды - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2678,7 +2678,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2751,7 +2751,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2763,7 +2763,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2799,7 +2799,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2819,7 +2819,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3043,7 +3043,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3107,7 +3107,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3127,11 +3127,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3167,7 +3167,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3283,12 +3283,12 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Памылка загрузкі wallet.dat: гаманец пашкоджаны - Error loading wallet.dat: Wallet requires newer version of Pfennig - Памылка загрузкі wallet.dat: гаманец патрабуе новую версію Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Памылка загрузкі wallet.dat: гаманец патрабуе новую версію pfennig - Wallet needed to be rewritten: restart Pfennig to complete - Гаманец мае быць перазапісаны: патрэбны перазапуск Pfennig для выканання + Wallet needed to be rewritten: restart pfennig to complete + Гаманец мае быць перазапісаны: патрэбны перазапуск pfennig для выканання Error loading wallet.dat diff --git a/src/qt/locale/bitmark_be_BY.ts~ b/src/qt/locale/bitmark_be_BY.ts~ new file mode 100644 index 0000000..91acf15 --- /dev/null +++ b/src/qt/locale/bitmark_be_BY.ts~ @@ -0,0 +1,3372 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + Гаманец зашыфраваны + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits зачыняецца дзеля завяршэння працэсса шыфравання. Памятайце, што шыфраванне гаманца цалкам абараняе вашыя сродкі ад скрадання шкоднымі праграмамі якія могуць пранікнуць у ваш камп'ютар. + + + 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + Сінхранізацыя з сецівам... + + + &Overview + Агляд + + + Node + + + + Show general overview of wallet + Паказвае агульныя звесткі аб гаманцы + + + &Transactions + Транзакцыі + + + Browse transaction history + Праглядзець гісторыю транзакцый + + + E&xit + Выйсці + + + Quit application + Выйсці з праграмы + + + Show information about GameCredits + Паказаць звесткі пра Біткойн + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + Зрабіце копію гаманца ў іншае месца + + + Change the passphrase used for wallet encryption + Змяніць пароль шыфравання гаманца + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + + + + &Send + Даслаць + + + &Receive + Атрымаць + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + Ф&айл + + + &Settings + Наладкі + + + &Help + Дапамога + + + Tabs toolbar + + + + [testnet] + [testnet] + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + GameCredits кліент + + + %n active connection(s) to GameCredits network + %n актыўнае злучэнне з GameCredits-сецівам%n актыўных злучэнняў з GameCredits-сецівам + + + 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Увядзіце Біткойн-адрас (ўзор bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Увядзіце Біткойн-адрас (ўзор bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + Ужыванне: + + + List commands + Спіс каманд + + + Get help for a command + Атрымаць дапамогу для каманды + + + Options: + Опцыі: + + + Specify configuration file (default: gamecredits.conf) + Вызначыць канфігурацыйны файл (зыходна: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Вызначыць pid-файл (зыходна: gamecreditsd.pid) + + + Specify data directory + Вызначыць каталог даных + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Слухаць злучэнні на <port> (зыходна: 40002 ці testnet: 50001) + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + Прымаць камандны радок і JSON-RPC каманды + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + Памылка загрузкі wallet.dat: гаманец патрабуе новую версію GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + Гаманец мае быць перазапісаны: патрэбны перазапуск GameCredits для выканання + + + 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/bitmark_bg.ts b/src/qt/locale/bitmark_bg.ts index 1555cbe..8fb80dc 100644 --- a/src/qt/locale/bitmark_bg.ts +++ b/src/qt/locale/bitmark_bg.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -103,11 +103,11 @@ This product includes software developed by the OpenSSL Project for use in the O Адреси за получаване - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -205,7 +205,7 @@ This product includes software developed by the OpenSSL Project for use in the O Потвърждаване на криптирането - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -225,7 +225,7 @@ This product includes software developed by the OpenSSL Project for use in the O Портфейлът е криптиран - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. Биткоин ще се затоври сега за да завърши процеса на криптиране. Запомнете, че криптирането на вашия портефейл не може напълно да предпази вашите Бит-монети от кражба чрез зловреден софтуер, инфектирал вашия компютър @@ -258,7 +258,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... Подписване на &съобщение... @@ -296,7 +296,7 @@ This product includes software developed by the OpenSSL Project for use in the O Изход от приложението - Show information about Pfennig + Show information about pfennig Информация за Биткоин @@ -344,11 +344,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address Изпращане към Биткоин адрес - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -372,7 +372,7 @@ This product includes software developed by the OpenSSL Project for use in the O &Проверка на съобщение... - Pfennig + pfennig Биткоин @@ -400,11 +400,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -428,7 +428,7 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core + pfennig Core @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -456,15 +456,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network %n връзка към Биткоин мрежата%n връзки към Биткоин мрежата @@ -556,7 +556,7 @@ Address: %4 Портфейлът е <b>криптиран</b> и <b>заключен</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -841,7 +841,7 @@ Address: %4 Вече има адрес "%1" в списъка с адреси. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. "%1" не е валиден Биткоин адрес. @@ -879,11 +879,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -930,15 +930,15 @@ Address: %4 Добре дошли - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -950,7 +950,7 @@ Address: %4 - Pfennig + pfennig Биткоин @@ -1012,11 +1012,11 @@ Address: %4 &Такса за изходяща трансакция - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login &Пускане на Биткоин при вход в системата @@ -1032,7 +1032,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1092,8 +1092,8 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Автоматично отваряне на входящия Pfennig порт. Работи само с рутери поддържащи UPnP. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Автоматично отваряне на входящия pfennig порт. Работи само с рутери поддържащи UPnP. Map port using &UPnP @@ -1148,7 +1148,7 @@ Address: %4 Език: - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. Промяната на езика ще влезе в сила след рестартиране на Биткоин. @@ -1160,7 +1160,7 @@ Address: %4 Изберете единиците, показвани по подразбиране в интерфейса. - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. Ще се показват адресите в списъка с трансакции независимо от наличието на кратко име. @@ -1215,7 +1215,7 @@ Address: %4 Форма - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1270,7 +1270,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1337,7 +1337,7 @@ Address: %4 QObject - Pfennig + pfennig Биткоин @@ -1353,11 +1353,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Въведете Биткоин адрес (например bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1479,7 +1479,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1487,7 +1487,7 @@ Address: %4 Изчисти конзолата - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1550,7 +1550,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1863,7 +1863,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1950,7 +1950,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1969,7 +1969,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2024,7 +2024,7 @@ Address: %4 Копиране на текущия подпис - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address Подпишете съобщение като доказателство, че притежавате определен адрес @@ -2052,7 +2052,7 @@ Address: %4 Адресът, с който е подписано съобщението (например bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address Проверете съобщение, за да сте сигурни че е подписано с определен Биткоин адрес @@ -2064,7 +2064,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Въведете Биткоин адрес (например bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2123,7 +2123,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2618,7 +2618,7 @@ Address: %4 Определете директория за данните - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2646,7 +2646,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2654,7 +2654,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2679,7 +2679,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2752,7 +2752,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2764,7 +2764,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2800,7 +2800,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2820,7 +2820,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3044,7 +3044,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3108,7 +3108,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3128,11 +3128,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3168,7 +3168,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3284,11 +3284,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Грешка при зареждане на wallet.dat: портфейлът е повреден - Error loading wallet.dat: Wallet requires newer version of Pfennig - Грешка при зареждане на wallet.dat: портфейлът изисква по-нова версия на Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Грешка при зареждане на wallet.dat: портфейлът изисква по-нова версия на pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_bg.ts~ b/src/qt/locale/bitmark_bg.ts~ new file mode 100644 index 0000000..f7be3d7 --- /dev/null +++ b/src/qt/locale/bitmark_bg.ts~ @@ -0,0 +1,3373 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 софтуерен лиценз, виж COPYING или http://www.opensource.org/licenses/mit-license.php. + +Използван е софтуер, разработен от OpenSSL Project за употреба в OpenSSL Toolkit (http://www.openssl.org/), криптографски софтуер разработен от Eric Young (eay@cryptsoft.com) и UPnP софтуер разработен от Thomas Bernard. + + + Copyright + Авторски права + + + The Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 файл (*.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 GameCreditsS</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 + Портфейлът е криптиран + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + Паролата на портфейла беше променена успешно. + + + + GameCreditsGUI + + Sign &message... + Подписване на &съобщение... + + + Synchronizing with network... + Синхронизиране с мрежата... + + + &Overview + &Баланс + + + Node + + + + Show general overview of wallet + Обобщена информация за портфейла + + + &Transactions + &Трансакции + + + Browse transaction history + История на трансакциите + + + E&xit + Из&ход + + + Quit application + Изход от приложението + + + Show information about GameCredits + Информация за Биткоин + + + 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 GameCredits address + Изпращане към Биткоин адрес + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + Променя паролата за портфейла + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + &Проверка на съобщение... + + + GameCredits + Биткоин + + + Wallet + Портфейл + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + Показване и скриване на основния прозорец + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &Файл + + + &Settings + &Настройки + + + &Help + &Помощ + + + Tabs toolbar + Раздели + + + [testnet] + [testnet] + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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 + Данни + + + 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> + Портфейлът е <b>криптиран</b> и <b>отключен</b> + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + Портфейлът е <b>криптиран</b> и <b>заключен</b> + + + A fatal error occurred. GameCredits 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 GameCredits 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. + + + + Path already exists, and is not a directory. + Пътят вече съществува и не е папка. + + + Cannot create data directory here. + + + + + HelpMessageDialog + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + Биткоин + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + &Пускане на Биткоин при вход в системата + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Автоматично отваряне на входящия GameCredits порт. Работи само с рутери поддържащи UPnP. + + + Map port using &UPnP + Отваряне на входящия порт чрез &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 GameCredits. + Промяната на езика ще влезе в сила след рестартиране на Биткоин. + + + &Unit to show amounts in: + Мерни единици: + + + Choose the default subdivision unit to show in the interface and when sending coins. + Изберете единиците, показвани по подразбиране в интерфейса. + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + Биткоин + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Въведете Биткоин адрес (например bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + 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 + Брой връзки + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + Изчисти конзолата + + + Welcome to the GameCredits 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 GameCredits 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 + Добави &получател + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + Плащане на: + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Адресът, с който ще подпишете съобщението (например bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Адресът, с който е подписано съобщението (например bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Проверете съобщение, за да сте сигурни че е подписано с определен Биткоин адрес + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Въведете Биткоин адрес (например bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + 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 + неизвестен + + + + 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) + Потвърждаване (%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. + Сума извадена или добавена към баланса. + + + + 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 файл (*.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 + + + + + gamecredits-core + + Usage: + Използване: + + + List commands + Вписване на команди + + + Get help for a command + Получете помощ за команда + + + Options: + Опции: + + + Specify configuration file (default: gamecredits.conf) + Задаване на файл с настройки (по подразбиране gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + Определете директория за данните + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits Core + + + + Send trace/debug info to console instead of debug.log file + Изпрати локализиращата или дебъг информацията към конзолата, вместо файлът 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 GameCredits 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) + + + + 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) + + + 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 GameCredits + Грешка при зареждане на wallet.dat: портфейлът изисква по-нова версия на GameCredits + + + Wallet needed to be rewritten: restart GameCredits 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 + + + + 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/bitmark_bs.ts b/src/qt/locale/bitmark_bs.ts index d0f04a0..90c1f79 100644 --- a/src/qt/locale/bitmark_bs.ts +++ b/src/qt/locale/bitmark_bs.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Pfennig + Show information about pfennig @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,8 +367,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,15 +423,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core - Pfennig Jezrga + pfennig Core + pfennig Jezrga Request payments (generates QR codes and pfennig: URIs) - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,12 +874,12 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Pfennig Jezrga + pfennig Core + pfennig Jezrga version @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,8 +945,8 @@ Address: %4 - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,8 +1332,8 @@ Address: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,8 +2118,8 @@ Address: %4 SplashScreen - Pfennig Core - Pfennig Jezrga + pfennig Core + pfennig Jezrga The Bitcoin Core Developers @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_bs.ts~ b/src/qt/locale/bitmark_bs.ts~ new file mode 100644 index 0000000..9eee624 --- /dev/null +++ b/src/qt/locale/bitmark_bs.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about GameCredits + + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + GameCredits + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + GameCredits Jezrga + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + GameCredits + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + GameCredits Jezrga + + + The Bitcoin 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 + 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 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_ca.ts b/src/qt/locale/bitmark_ca.ts index 5e8050b..bd29c91 100644 --- a/src/qt/locale/bitmark_ca.ts +++ b/src/qt/locale/bitmark_ca.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O Confirmeu l'encriptació de cartera - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O Cartera encriptada - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,8 +291,8 @@ This product includes software developed by the OpenSSL Project for use in the O Sortir de l'aplicació - Show information about Pfennig - Informació sobre Pfennig + Show information about pfennig + Informació sobre pfennig About &Qt @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 La cartera està <b>encriptada<b/> i <b>bloquejada<b/> - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_ca.ts~ b/src/qt/locale/bitmark_ca.ts~ new file mode 100644 index 0000000..a496887 --- /dev/null +++ b/src/qt/locale/bitmark_ca.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin Core Developers + + + + (%1-bit) + + + + + AddressBookPage + + 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 + + + &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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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) + Fitxer separat per comes (*.csv) + + + Exporting Failed + + + + 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 GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + 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 + + + E&xit + + + + Quit application + Sortir de l'aplicació + + + Show information about GameCredits + Informació sobre GameCredits + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + 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... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &Fitxer + + + &Settings + &Configuració + + + &Help + &Ajuda + + + Tabs toolbar + Barra d'eines + + + [testnet] + [testnet] + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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... + Actualitzant... + + + Sent transaction + Transacció enviada + + + Incoming transaction + Transacció entrant + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + 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. GameCredits 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 + 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 address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Adreça + + + 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 + + + + 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 GameCredits 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 + + A&mount: + + + + Pay &To: + + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + 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 + Adreça + + + 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) + Fitxer separat per comes (*.csv) + + + Confirmed + + + + Date + + + + Type + + + + Label + Etiqueta + + + Address + Adreça + + + 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_ca@valencia.ts b/src/qt/locale/bitmark_ca@valencia.ts index 6d49b85..29d8ba3 100644 --- a/src/qt/locale/bitmark_ca@valencia.ts +++ b/src/qt/locale/bitmark_ca@valencia.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Pfennig + Show information about pfennig @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_ca@valencia.ts~ b/src/qt/locale/bitmark_ca@valencia.ts~ new file mode 100644 index 0000000..c90414a --- /dev/null +++ b/src/qt/locale/bitmark_ca@valencia.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about GameCredits + + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_ca_ES.ts b/src/qt/locale/bitmark_ca_ES.ts index 0868ee0..47f6d3e 100644 --- a/src/qt/locale/bitmark_ca_ES.ts +++ b/src/qt/locale/bitmark_ca_ES.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core - Sobre el Nucli de Pfennig + About pfennig Core + Sobre el Nucli de pfennig - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O Rebent adreces - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Aquestes són la seva adreça de Pfennig per enviar els pagaments. Sempre revisi la quantitat i l'adreça del destinatari abans transferència de monedes. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Aquestes són la seva adreça de pfennig per enviar els pagaments. Sempre revisi la quantitat i l'adreça del destinatari abans transferència de monedes. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,8 +200,8 @@ This product includes software developed by the OpenSSL Project for use in the O Confirmar l'encriptació del moneder - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Advertència: Si encripteu el vostre moneder i perdeu la constrasenya, <b>PERDREU TOTS ELS VOSTRES PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Advertència: Si encripteu el vostre moneder i perdeu la constrasenya, <b>PERDREU TOTS ELS VOSTRES pfennigS</b>! Are you sure you wish to encrypt your wallet? @@ -220,8 +220,8 @@ This product includes software developed by the OpenSSL Project for use in the O Moneder encriptat - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig es tancarà ara per acabar el procés d'encriptació. Recorda que encriptar el teu moneder no protegeix completament els teus pfennigs de ser robades per programari maliciós instal·lat al teu ordinador. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig es tancarà ara per acabar el procés d'encriptació. Recorda que encriptar el teu moneder no protegeix completament els teus pfennigs de ser robades per programari maliciós instal·lat al teu ordinador. Wallet encryption failed @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... Signar &missatge... @@ -291,8 +291,8 @@ This product includes software developed by the OpenSSL Project for use in the O Sortir de l'aplicació - Show information about Pfennig - Mostra informació sobre Pfennig + Show information about pfennig + Mostra informació sobre pfennig About &Qt @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O Re-indexant blocs al disc... - Send coins to a Pfennig address - Enviar monedes a una adreça Pfennig + Send coins to a pfennig address + Enviar monedes a una adreça pfennig - Modify configuration options for Pfennig + Modify configuration options for pfennig Modificar les opcions de configuració per pfennig @@ -367,8 +367,8 @@ This product includes software developed by the OpenSSL Project for use in the O &Verifica el missatge.. - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -395,12 +395,12 @@ This product includes software developed by the OpenSSL Project for use in the O Xifrar les claus privades pertanyents al seu moneder - Sign messages with your Pfennig addresses to prove you own them - Signa el missatges amb la seva adreça de Pfennig per provar que les poseeixes + Sign messages with your pfennig addresses to prove you own them + Signa el missatges amb la seva adreça de pfennig per provar que les poseeixes - Verify messages to ensure they were signed with specified Pfennig addresses - Verificar els missatges per assegurar-te que han estat signades amb una adreça Pfennig específica. + Verify messages to ensure they were signed with specified pfennig addresses + Verificar els missatges per assegurar-te que han estat signades amb una adreça pfennig específica. &File @@ -423,15 +423,15 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core - Nucli de Pfennig + pfennig Core + Nucli de pfennig Request payments (generates QR codes and pfennig: URIs) - &About Pfennig Core + &About pfennig Core @@ -451,16 +451,16 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Client Pfennig + pfennig client + Client pfennig - %n active connection(s) to Pfennig network - %n connexió activa a la xarxa Pfennig%n connexions actives a la xarxa Pfennig + %n active connection(s) to pfennig network + %n connexió activa a la xarxa pfennig%n connexions actives a la xarxa pfennig No block source available... @@ -551,8 +551,8 @@ Address: %4 El moneder està <b>encriptat</b> i actualment <b>bloquejat</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Ha tingut lloc un error fatal. Pfennig no pot continuar executant-se de manera segura i es tancará. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Ha tingut lloc un error fatal. pfennig no pot continuar executant-se de manera segura i es tancará. @@ -836,8 +836,8 @@ Address: %4 L'adreça introduïda "%1" ja és present a la llibreta d'adreces. - The entered address "%1" is not a valid Pfennig address. - L'adreça introduida "%1" no és una adreça Pfennig valida. + The entered address "%1" is not a valid pfennig address. + L'adreça introduida "%1" no és una adreça pfennig valida. Could not unlock wallet. @@ -874,12 +874,12 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Nucli de Pfennig + pfennig Core + Nucli de pfennig version @@ -925,15 +925,15 @@ Address: %4 Benvingut - Welcome to Pfennig Core. - Benvingut a Pfennig Core. + Welcome to pfennig Core. + Benvingut a pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,8 +945,8 @@ Address: %4 - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1007,12 +1007,12 @@ Address: %4 Pagar &comisió de transacció - Automatically start Pfennig after logging in to the system. - Iniciar automàticament Pfennig després de l'inici de sessió del sistema. + Automatically start pfennig after logging in to the system. + Iniciar automàticament pfennig després de l'inici de sessió del sistema. - &Start Pfennig on system login - &Iniciar Pfennig al inici de sessió del sistema. + &Start pfennig on system login + &Iniciar pfennig al inici de sessió del sistema. Size of &database cache @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,8 +1087,8 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Obrir el port del client de Pfennig al router de forma automàtica. Això només funciona quan el teu router implementa UPnP i l'opció està activada. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Obrir el port del client de pfennig 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 @@ -1143,8 +1143,8 @@ Address: %4 Llenguatge de la Interfície d'Usuari: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Aquí pots definir el llenguatge de l'aplicatiu. Aquesta configuració tindrà efecte un cop es reiniciï Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Aquí pots definir el llenguatge de l'aplicatiu. Aquesta configuració tindrà efecte un cop es reiniciï pfennig. &Unit to show amounts in: @@ -1155,8 +1155,8 @@ Address: %4 Sel·lecciona la unitat de subdivisió per defecte per mostrar en la interficie quan s'envien monedes. - Whether to show Pfennig addresses in the transaction list or not. - Mostrar adreces Pfennig als llistats de transaccions o no. + Whether to show pfennig addresses in the transaction list or not. + Mostrar adreces pfennig als llistats de transaccions o no. &Display addresses in transaction list @@ -1210,8 +1210,8 @@ Address: %4 Formulari - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig un cop s'ha establert connexió, però aquest proces no s'ha completat encara. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig un cop s'ha establert connexió, però aquest proces no s'ha completat encara. Wallet @@ -1265,8 +1265,8 @@ Address: %4 Manejant URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - la URI no pot ser processada! Això es pot ser causat per una adreça Pfennig invalida o paràmetres URI malformats. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + la URI no pot ser processada! Això es pot ser causat per una adreça pfennig invalida o paràmetres URI malformats. Requested payment amount of %1 is too small (considered dust). @@ -1332,8 +1332,8 @@ Address: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1348,12 +1348,12 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introdueixi una adreça de Pfennig (per exemple bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introdueixi una adreça de pfennig (per exemple bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,16 +1474,16 @@ Address: %4 Dietàri de debug - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Obrir el dietari de debug de Pfennig del directori de dades actual. Aixó pot trigar uns quants segons per a dietàris grossos. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Obrir el dietari de debug de pfennig del directori de dades actual. Aixó pot trigar uns quants segons per a dietàris grossos. Clear console Netejar consola - Welcome to the Pfennig RPC console. - Benvingut a la consola RPC de Pfennig + Welcome to the pfennig RPC console. + Benvingut a la consola RPC de pfennig Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,8 +2019,8 @@ Address: %4 Copiar la signatura actual al porta-retalls del sistema - Sign the message to prove you own this Pfennig address - Signa el missatge per provar que ets propietari d'aquesta adreça Pfennig + Sign the message to prove you own this pfennig address + Signa el missatge per provar que ets propietari d'aquesta adreça pfennig Sign &Message @@ -2047,8 +2047,8 @@ Address: %4 La adreça amb el que el missatge va ser signat (per exemple bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Verificar el missatge per assegurar-se que ha estat signat amb una adreça Pfennig específica + Verify the message to ensure it was signed with the specified pfennig address + Verificar el missatge per assegurar-se que ha estat signat amb una adreça pfennig específica Verify &Message @@ -2059,8 +2059,8 @@ Address: %4 Neteja tots els camps de verificació de missatge - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introdueixi una adreça de Pfennig (per exemple bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introdueixi una adreça de pfennig (per exemple bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2118,8 +2118,8 @@ Address: %4 SplashScreen - Pfennig Core - Nucli de Pfennig + pfennig Core + Nucli de pfennig The Bitcoin Core Developers @@ -2613,8 +2613,8 @@ Address: %4 Especificar directori de dades - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Escoltar connexions a <port> (per defecte: P2PPORT o testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Escoltar connexions a <port> (per defecte: 40002 o testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2641,15 +2641,15 @@ Address: %4 Ha sorgit un error al configurar el port RPC %u escoltant a IPv4: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Escoltar connexions JSON-RPC al port <port> (per defecte: RPCPORT o testnet:1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Escoltar connexions JSON-RPC al port <port> (per defecte: 40001 o testnet:50000) Accept command line and JSON-RPC commands Acceptar línia d'ordres i ordres JSON-RPC - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,9 +2674,9 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com - %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=pfennigrpc\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 "Pfennig Alert" admin@foo.com + %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=pfennigrpc\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 "pfennig Alert" admin@foo.com Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 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. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,8 +2759,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Advertència: el -paytxfee és molt elevat! Aquesta és la comissió de transacció que pagaràs quan enviis una transacció. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig 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, Pfennig no funcionará de manera apropiada. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig 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, pfennig no funcionará de manera apropiada. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Intentar recuperar les claus privades d'un arxiu wallet.dat corrupte - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Importa blocs de un fitxer blk000??.dat extern - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Opcions SSL: (veure la Wiki de Pfennig per a instruccions de configuració SSL) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Opcions SSL: (veure la Wiki de pfennig per a instruccions de configuració SSL) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Especificar el temps limit per a un intent de connexió en milisegons (per defecte: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,12 +3279,12 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Error carregant wallet.dat: Moneder corrupte - Error loading wallet.dat: Wallet requires newer version of Pfennig - Error carregant wallet.dat: El moneder requereix una versió de Pfennig més moderna + Error loading wallet.dat: Wallet requires newer version of pfennig + Error carregant wallet.dat: El moneder requereix una versió de pfennig més moderna - Wallet needed to be rewritten: restart Pfennig to complete - El moneder necesita ser re-escrit: re-inicia Pfennig per a completar la tasca + Wallet needed to be rewritten: restart pfennig to complete + El moneder necesita ser re-escrit: re-inicia pfennig per a completar la tasca Error loading wallet.dat diff --git a/src/qt/locale/bitmark_ca_ES.ts~ b/src/qt/locale/bitmark_ca_ES.ts~ new file mode 100644 index 0000000..710dbfd --- /dev/null +++ b/src/qt/locale/bitmark_ca_ES.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + Sobre el Nucli de GameCredits + + + <b>GameCredits 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. + \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 Bitcoin Core Developers + + + + (%1-bit) + + + + + AddressBookPage + + 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 + + + &Copy + &Copiar + + + C&lose + + + + &Copy Address + &Copiar adreça + + + 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 + + + &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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Aquestes són la seva adreça de GameCredits per enviar els pagaments. Sempre revisi la quantitat i l'adreça del destinatari abans transferència de monedes. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + Copiar &Etiqueta + + + &Edit + &Editar + + + Export Address List + Exportar la llista d'adre + + + Comma separated file (*.csv) + Arxiu de separació per comes (*.csv) + + + Exporting Failed + + + + 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 + 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 GameCreditsS</b>! + Advertència: Si encripteu el vostre moneder i perdeu la constrasenya, <b>PERDREU TOTS ELS VOSTRES GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits es tancarà ara per acabar el procés d'encriptació. Recorda que encriptar el teu moneder no protegeix completament els teus gamecreditss 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. + + + + GameCreditsGUI + + 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 + + + E&xit + S&ortir + + + Quit application + Sortir de l'aplicació + + + Show information about GameCredits + Mostra informació sobre GameCredits + + + 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 GameCredits address + Enviar monedes a una adreça GameCredits + + + Modify configuration options for GameCredits + Modificar les opcions de configuració per gamecredits + + + 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.. + + + GameCredits + GameCredits + + + Wallet + Moneder + + + &Send + &Enviar + + + &Receive + &Rebre + + + &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 GameCredits addresses to prove you own them + Signa el missatges amb la seva adreça de GameCredits per provar que les poseeixes + + + Verify messages to ensure they were signed with specified GameCredits addresses + Verificar els missatges per assegurar-te que han estat signades amb una adreça GameCredits específica. + + + &File + &Arxiu + + + &Settings + &Configuració + + + &Help + &Ajuda + + + Tabs toolbar + Barra d'eines de seccions + + + [testnet] + [testnet] + + + GameCredits Core + Nucli de GameCredits + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + Client GameCredits + + + %n active connection(s) to GameCredits network + %n connexió activa a la xarxa GameCredits%n connexions actives a la xarxa GameCredits + + + 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ó + + + Up to date + Al dia + + + Catching up... + Posar-se al dia ... + + + Sent transaction + Transacció enviada + + + Incoming transaction + Transacció entrant + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Data: %1\nQuantitat %2\n Tipus: %3\n Adreça: %4\n + + + 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. GameCredits can no longer continue safely and will quit. + Ha tingut lloc un error fatal. GameCredits no pot continuar executant-se de manera segura i es tancará. + + + + 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 list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Direcció + + + 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 GameCredits address. + L'adreça introduida "%1" no és una adreça GameCredits valida. + + + Could not unlock wallet. + No s'ha pogut desbloquejar el moneder. + + + New key generation failed. + Ha fallat la generació d'una nova clau. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + Nucli de GameCredits + + + 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 GameCredits Core. + Benvingut a GameCredits Core. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Iniciar automàticament GameCredits després de l'inici de sessió del sistema. + + + &Start GameCredits on system login + &Iniciar GameCredits al inici de sessió del sistema. + + + Size of &database cache + + + + MB + MB + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Obrir el port del client de GameCredits 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 + + + Proxy &IP: + &IP del proxy: + + + &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 GameCredits. + Aquí pots definir el llenguatge de l'aplicatiu. Aquesta configuració tindrà efecte un cop es reiniciï GameCredits. + + + &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 GameCredits addresses in the transaction list or not. + Mostrar adreces GameCredits 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 + + + default + Per defecte + + + none + + + + Confirm options reset + Confirmi el reestabliment de les opcions + + + 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. + L'adreça proxy introduïda és invalida. + + + + OverviewPage + + Form + Formulari + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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 GameCredits un cop s'ha establert connexió, però aquest proces no s'ha completat encara. + + + 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> + + + out of sync + Fora de sincronia + + + + PaymentServer + + URI handling + Manejant URI + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + la URI no pot ser processada! Això es pot ser causat per una adreça GameCredits 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 gamecredits: click-to-pay handler + No es pot iniciar gamecredits: 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 + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Error: El directori de dades específiques "%1! no existeix. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introdueixi una adreça de GameCredits (per exemple bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + Desar codi QR + + + 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 + + + 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 + + + &Console + &Consola + + + &Network Traffic + + + + &Clear + + + + Totals + Totals + + + In: + Dins: + + + Out: + Fora: + + + Build date + Data de compilació + + + Debug log file + Dietàri de debug + + + Open the GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Obrir el dietari de debug de GameCredits del directori de dades actual. Aixó pot trigar uns quants segons per a dietàris grossos. + + + Clear console + Netejar consola + + + Welcome to the GameCredits RPC console. + Benvingut a la consola RPC de GameCredits + + + 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 GameCredits 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 + + + Clear all fields of the form. + Netejar tots els camps del formulari. + + + Clear &All + Esborrar &Tot + + + Balance: + Balanç: + + + Confirm the send action + Confirmi l'acció d'enviament + + + S&end + E&nviar + + + Confirm send coins + Confirmar l'enviament de monedes + + + %1 to %2 + + + + 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. + + + 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 GameCredits 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 + + A&mount: + Q&uantitat: + + + Pay &To: + Pagar &A: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + La adreça a on envia el pagament (per exemple: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + Paga a: + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + La adreça amb la que signat els missatges (per exemple bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Signa el missatge per provar que ets propietari d'aquesta adreça GameCredits + + + 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + La adreça amb el que el missatge va ser signat (per exemple bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Verificar el missatge per assegurar-se que ha estat signat amb una adreça GameCredits específica + + + Verify &Message + Verificar &Missatge + + + Reset all verify message fields + Neteja tots els camps de verificació de missatge + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introdueixi una adreça de GameCredits (per exemple bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Clica "Signar Missatge" per a generar una signatura + + + 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. + + + + SplashScreen + + GameCredits Core + Nucli de GameCredits + + + The Bitcoin 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ó + + + 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 + + + + 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ó + + + + 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 + + + Confirmed (%1 confirmations) + Confirmat (%1 confirmacions) + + + 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ç. + + + + 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 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 + + + Range: + Rang: + + + to + a + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + Enviar monedes + + + + 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 %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + Copia de seguretat realitzada correctament + + + + gamecredits-core + + Usage: + Ús: + + + List commands + Llista d'ordres + + + Get help for a command + Obtenir ajuda per a un ordre. + + + Options: + Opcions: + + + Specify configuration file (default: gamecredits.conf) + Especificat arxiu de configuració (per defecte: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Especificar arxiu pid (per defecte: gamecreditsd.pid) + + + Specify data directory + Especificar directori de dades + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Escoltar connexions a <port> (per defecte: 40002 o testnet: 50001) + + + 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: 40001 or testnet: 50000) + Escoltar connexions JSON-RPC al port <port> (per defecte: 40001 o testnet:50000) + + + Accept command line and JSON-RPC commands + Acceptar línia d'ordres i ordres JSON-RPC + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %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=gamecreditsrpc\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 "GameCredits 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 + + + 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 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) + + + 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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits 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, GameCredits 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 + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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) + + + 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) + + + 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 gamecredits-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 + + + Cannot obtain a lock on data directory %s. GameCredits 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 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) + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the GameCredits 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 GameCredits Wiki for SSL setup instructions) + Opcions SSL: (veure la Wiki de GameCredits per a instruccions de configuració SSL) + + + Send command to GameCredits 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 + + + 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 GameCredits 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) + + + 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! + + + 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) + + + 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) + + + 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 GameCredits + Error carregant wallet.dat: El moneder requereix una versió de GameCredits més moderna + + + Wallet needed to be rewritten: restart GameCredits to complete + El moneder necesita ser re-escrit: re-inicia GameCredits 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 + + + 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. + Has de configurar el rpcpassword=<password> a l'arxiu de configuració:\n %s\n Si l'arxiu no existeix, crea'l amb els permís owner-readable-only. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_cmn.ts b/src/qt/locale/bitmark_cmn.ts index f6b09f4..a990d94 100644 --- a/src/qt/locale/bitmark_cmn.ts +++ b/src/qt/locale/bitmark_cmn.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Pfennig + Show information about pfennig @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_cmn.ts~ b/src/qt/locale/bitmark_cmn.ts~ new file mode 100644 index 0000000..693b450 --- /dev/null +++ b/src/qt/locale/bitmark_cmn.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about GameCredits + + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_cs.ts b/src/qt/locale/bitmark_cs.ts index 14cd3a7..7877b04 100644 --- a/src/qt/locale/bitmark_cs.ts +++ b/src/qt/locale/bitmark_cs.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - O Pfennig Core + About pfennig Core + O pfennig Core - <b>Pfennig Core</b> version - <b>Pfennig Core</b> verze + <b>pfennig Core</b> version + <b>pfennig Core</b> verze @@ -29,7 +29,7 @@ Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití v Open The Bitcoin Core Developers - Vývojáři Pfennig Core + Vývojáři pfennig Core (%1-bit) @@ -103,12 +103,12 @@ Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití v Open Přijímací adresy - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Tohle jsou tvé Pfennigové adresy pro posílání plateb. Před odesláním mincí si vždy zkontroluj částku a cílovou adresu. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Tohle jsou tvé pfennigové adresy pro posílání plateb. Před odesláním mincí si vždy zkontroluj částku a cílovou adresu. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Tohle jsou tvé Pfennigové adresy pro příjem plateb. Je doporučené používat pokaždé novou adresu pro každou transakci. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Tohle jsou tvé pfennigové adresy pro příjem plateb. Je doporučené používat pokaždé novou adresu pro každou transakci. Copy &Label @@ -205,8 +205,8 @@ Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití v Open Potvrď zašifrování peněženky - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Upozornění: Pokud si zašifruješ peněženku a ztratíš či zapomeneš heslo, <b>PŘIJDEŠ O VŠECHNY PfennigY</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Upozornění: Pokud si zašifruješ peněženku a ztratíš či zapomeneš heslo, <b>PŘIJDEŠ O VŠECHNY pfennigY</b>! Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití v Open Peněženka je zašifrována - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig 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 pfennigů malwarem, kterým se může počítač nakazit. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig 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 pfennigů malwarem, kterým se může počítač nakazit. Wallet encryption failed @@ -258,7 +258,7 @@ Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití v Open - PfennigGUI + pfennigGUI Sign &message... Po&depiš zprávu... @@ -296,8 +296,8 @@ Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití v Open Ukonči aplikaci - Show information about Pfennig - Zobraz informace o Pfennigu + Show information about pfennig + Zobraz informace o pfennigu About &Qt @@ -344,12 +344,12 @@ Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití v Open Vytvářím nový index bloků na disku... - Send coins to a Pfennig address - Pošli mince na Pfennigovou adresu + Send coins to a pfennig address + Pošli mince na pfennigovou adresu - Modify configuration options for Pfennig - Uprav nastavení Pfennigu + Modify configuration options for pfennig + Uprav nastavení pfennigu Backup wallet to another location @@ -372,8 +372,8 @@ Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití v Open &Ověř zprávu... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití v Open Zašifruj soukromé klíče ve své peněžence - Sign messages with your Pfennig addresses to prove you own them - Podepiš zprávy svými Pfennigovými adresami, čímž prokážeš, že jsi jejich vlastníkem + Sign messages with your pfennig addresses to prove you own them + Podepiš zprávy svými pfennigovými adresami, čímž prokážeš, že jsi jejich vlastníkem - Verify messages to ensure they were signed with specified Pfennig addresses - Ověř zprávy, aby ses ujistil, že byly podepsány danými Pfennigovými adresami + Verify messages to ensure they were signed with specified pfennig addresses + Ověř zprávy, aby ses ujistil, že byly podepsány danými pfennigovými adresami &File @@ -428,16 +428,16 @@ Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití v Open [testnet] - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core Request payments (generates QR codes and pfennig: URIs) Požaduj platby (generuje QR kódy a pfennig: URI) - &About Pfennig Core - O &Pfennig Core + &About pfennig Core + O &pfennig Core Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ Tento produkt zahrnuje programy vyvinuté OpenSSL Projektem pro použití v Open Ar&gumenty z příkazové řádky - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Seznam argumentů Pfennigu pro příkazovou řádku získáš v nápovědě Pfennigu Core + Show the pfennig Core help message to get a list with possible pfennig command-line options + Seznam argumentů pfennigu pro příkazovou řádku získáš v nápovědě pfennigu Core - Pfennig client - Pfennig klient + pfennig client + pfennig klient - %n active connection(s) to Pfennig network - %n aktivní spojení do Pfennigové sítě%n aktivní spojení do Pfennigové sítě%n aktivních spojení do Pfennigové sítě + %n active connection(s) to pfennig network + %n aktivní spojení do pfennigové sítě%n aktivní spojení do pfennigové sítě%n aktivních spojení do pfennigové sítě No block source available... @@ -560,8 +560,8 @@ Adresa: %4 Peněženka je <b>zašifrovaná</b> a momentálně <b>zamčená</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Stala se fatální chyba. Pfennig nemůže bezpečně pokračovat v činnosti, a proto skončí. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Stala se fatální chyba. pfennig nemůže bezpečně pokračovat v činnosti, a proto skončí. @@ -845,8 +845,8 @@ Adresa: %4 Zadaná adresa "%1" už v adresáři je. - The entered address "%1" is not a valid Pfennig address. - Zadaná adresa "%1" není platná Pfennigová adresa. + The entered address "%1" is not a valid pfennig address. + Zadaná adresa "%1" není platná pfennigová adresa. Could not unlock wallet. @@ -883,12 +883,12 @@ Adresa: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core version @@ -934,16 +934,16 @@ Adresa: %4 Vítej - Welcome to Pfennig Core. - Vítej v Pfennig Core. + Welcome to pfennig Core. + Vítej v pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Tohle je poprvé, co spouštíš Pfennig Core, takže si můžeš zvolit, kam bude ukládat svá data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Tohle je poprvé, co spouštíš pfennig Core, takže si můžeš zvolit, kam bude ukládat svá data. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. + pfennig 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 @@ -954,8 +954,8 @@ Adresa: %4 Použij tento adresář pro data: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,12 +1016,12 @@ Adresa: %4 Platit &transakční poplatek - Automatically start Pfennig after logging in to the system. - Automaticky spustí Pfennig po přihlášení do systému. + Automatically start pfennig after logging in to the system. + Automaticky spustí pfennig po přihlášení do systému. - &Start Pfennig on system login - S&pustit Pfennig po přihlášení do systému + &Start pfennig on system login + S&pustit pfennig po přihlášení do systému Size of &database cache @@ -1036,8 +1036,8 @@ Adresa: %4 Počet vláken pro &verifikaci skriptů - Connect to the Pfennig network through a SOCKS proxy. - Připojí se do Pfennigové sítě přes SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. + Připojí se do pfennigové sítě přes SOCKS proxy. &Connect through SOCKS proxy (default proxy): @@ -1096,7 +1096,7 @@ Adresa: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig 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é. @@ -1152,8 +1152,8 @@ Adresa: %4 &Jazyk uživatelského rozhraní: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Tady lze nastavit jazyk uživatelského rozhraní. Nastavení se projeví až po restartování Pfennigu. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Tady lze nastavit jazyk uživatelského rozhraní. Nastavení se projeví až po restartování pfennigu. &Unit to show amounts in: @@ -1164,7 +1164,7 @@ Adresa: %4 Zvol výchozí podjednotku, která se bude zobrazovat v programu a při posílání mincí. - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. Zda ukazovat pfennigové adresy ve výpisu transakcí nebo ne. @@ -1219,8 +1219,8 @@ Adresa: %4 Formulář - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennigovou sítí, jakmile se s ní spojí. Zatím ale ještě není synchronizace dokončena. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennigovou sítí, jakmile se s ní spojí. Zatím ale ještě není synchronizace dokončena. Wallet @@ -1274,8 +1274,8 @@ Adresa: %4 Zpracování URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - Nepodařilo se analyzovat URI! Důvodem může být neplatná Pfennigová adresa nebo poškozené parametry URI. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + Nepodařilo se analyzovat URI! Důvodem může být neplatná pfennigová adresa nebo poškozené parametry URI. Requested payment amount of %1 is too small (considered dust). @@ -1341,8 +1341,8 @@ Adresa: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,12 +1357,12 @@ Adresa: %4 Chyba: Neplatná kombinace -regtest a -testnet. - Pfennig Core didn't yet exit safely... - Pfennig Core ještě bezpečně neskončil... + pfennig Core didn't yet exit safely... + pfennig Core ještě bezpečně neskončil... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Zadej Pfennigovou adresu (např. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Zadej pfennigovou adresu (např. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,16 +1483,16 @@ Adresa: %4 Soubor s ladicími záznamy - Open the Pfennig 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 Pfennigu z aktuálního datového adresáře. U velkých logů to může pár vteřin zabrat. + Open the pfennig 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 pfennigu 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 Pfennig RPC console. - Vítej v Pfennigové RPC konzoli. + Welcome to the pfennig RPC console. + Vítej v pfennigové RPC konzoli. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1554,7 +1554,7 @@ Adresa: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1867,8 +1867,8 @@ Adresa: %4 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 Pfennig address - Upozornění: Neplatná Pfennigová adresa + Warning: Invalid pfennig address + Upozornění: Neplatná pfennigová adresa (no label) @@ -1954,7 +1954,7 @@ Adresa: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1973,8 +1973,8 @@ Adresa: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig Core se ukončuje... + pfennig Core is shutting down... + pfennig Core se ukončuje... Do not shut down the computer until this window disappears. @@ -2028,8 +2028,8 @@ Adresa: %4 Zkopíruj aktuálně vybraný podpis do systémové schránky - Sign the message to prove you own this Pfennig address - Podepiš zprávu, čímž prokážeš, že jsi vlastníkem této Pfennigové adresy + Sign the message to prove you own this pfennig address + Podepiš zprávu, čímž prokážeš, že jsi vlastníkem této pfennigové adresy Sign &Message @@ -2056,8 +2056,8 @@ Adresa: %4 Adresa, kterou je zpráva podepsána (např. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Ověř zprávu, aby ses ujistil, že byla podepsána danou Pfennigovou adresou + Verify the message to ensure it was signed with the specified pfennig address + Ověř zprávu, aby ses ujistil, že byla podepsána danou pfennigovou adresou Verify &Message @@ -2068,8 +2068,8 @@ Adresa: %4 Vymaž všechna pole formuláře pro ověření zrávy - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Zadej Pfennigovou adresu (např. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Zadej pfennigovou adresu (např. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2127,12 +2127,12 @@ Adresa: %4 SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core The Bitcoin Core Developers - Vývojáři Pfennig Core + Vývojáři pfennig Core [testnet] @@ -2622,8 +2622,8 @@ Adresa: %4 Adresář pro data - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Čekat na spojení na <portu> (výchozí: P2PPORT nebo testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Čekat na spojení na <portu> (výchozí: 40002 nebo testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2650,16 +2650,16 @@ Adresa: %4 Při nastavování naslouchacího RPC portu %i pro IPv4 nastala chyba: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Čekat na JSON RPC spojení na <portu> (výchozí: RPCPORT nebo testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Čekat na JSON RPC spojení na <portu> (výchozí: 40001 nebo testnet: 50000) Accept command line and JSON-RPC commands Akceptovat příkazy z příkazové řádky a přes JSON-RPC - Pfennig Core RPC client version - Verze Pfennig Core RPC klienta + pfennig Core RPC client version + Verze pfennig Core RPC klienta Run in the background as a daemon and accept commands @@ -2683,7 +2683,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, musíš nastavit rpcpassword v konfiguračním souboru: %s @@ -2694,7 +2694,7 @@ rpcpassword=%s rpcuser a rpcpassword NESMÍ být stejné. Pokud konfigurační soubor ještě neexistuje, vytvoř ho tak, aby ho mohl číst pouze vlastník. Je také doporučeno si nastavit alertnotify, abys byl upozorněn na případné problémy; -například: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com +například: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2766,8 +2766,8 @@ například: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 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. Pfennig Core is probably already running. - Nedaří se mi připojit na %s na tomhle počítači. Pfennig Core už pravděpodobně jednou běží. + Unable to bind to %s on this computer. pfennig Core is probably already running. + Nedaří se mi připojit na %s na tomhle počítači. pfennig Core už pravděpodobně jednou běží. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2778,8 +2778,8 @@ například: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Upozornění: -paytxfee je nastaveno velmi vysoko! Toto je transakční poplatek, který zaplatíš za každou poslanou transakci. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Upozornění: Zkontroluj, že máš v počítači správně nastavený datum a čas! Pokud jsou nastaveny špatně, Pfennig nebude fungovat správně. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Upozornění: Zkontroluj, že máš v počítači správně nastavený datum a čas! Pokud jsou nastaveny špatně, pfennig nebude fungovat správně. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2814,8 +2814,8 @@ například: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Pokusit se zachránit soukromé klíče z poškozeného souboru wallet.dat - Pfennig Core Daemon - Pfennig Core démon + pfennig Core Daemon + pfennig Core démon Block creation options: @@ -2834,8 +2834,8 @@ například: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Připojit se přes SOCKS proxy - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Připojit se k JSON RPC na <port> (výchozí: RPCPORT nebo testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Připojit se k JSON RPC na <port> (výchozí: 40001 nebo testnet: 50000) Connection options: @@ -3058,8 +3058,8 @@ například: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Importovat bloky z externího souboru blk000??.dat - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - Nedaří se mi získat zámek na datový adresář %s. Pfennig Core pravděpodobně už jednou běží. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + Nedaří se mi získat zámek na datový adresář %s. pfennig 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) @@ -3122,7 +3122,7 @@ například: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3142,12 +3142,12 @@ například: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Možnosti SSL: (viz instrukce nastavení SSL v Pfennig Wiki) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Možnosti SSL: (viz instrukce nastavení SSL v pfennig Wiki) - Send command to Pfennig Core - Poslat příkaz Pfennig Core + Send command to pfennig Core + Poslat příkaz pfennig Core Send trace/debug info to console instead of debug.log file @@ -3182,7 +3182,7 @@ například: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Zadej časový limit spojení v milisekundách (výchozí: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3298,12 +3298,12 @@ například: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Chyba při načítání wallet.dat: peněženka je poškozená - Error loading wallet.dat: Wallet requires newer version of Pfennig - Chyba při načítání wallet.dat: peněženka vyžaduje novější verzi Pfennigu + Error loading wallet.dat: Wallet requires newer version of pfennig + Chyba při načítání wallet.dat: peněženka vyžaduje novější verzi pfennigu - Wallet needed to be rewritten: restart Pfennig to complete - Soubor s peněženkou potřeboval přepsat: restartuj Pfennig, aby se operace dokončila + Wallet needed to be rewritten: restart pfennig to complete + Soubor s peněženkou potřeboval přepsat: restartuj pfennig, aby se operace dokončila Error loading wallet.dat diff --git a/src/qt/locale/bitmark_cs.ts~ b/src/qt/locale/bitmark_cs.ts~ new file mode 100644 index 0000000..da7f79b --- /dev/null +++ b/src/qt/locale/bitmark_cs.ts~ @@ -0,0 +1,3389 @@ + + + AboutDialog + + About GameCredits Core + O GameCredits Core + + + <b>GameCredits Core</b> version + <b>GameCredits Core</b> verze + + + +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. + +Tohle je experimentální program. + +Šířen pod licencí MIT/X11, viz přiložený soubor COPYING nebo http://www.opensource.org/licenses/mit-license.php. + +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 Bitcoin Core Developers + Vývojáři GameCredits Core + + + (%1-bit) + (%1-bit) + + + + AddressBookPage + + 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 + + + &Copy + &Kopíruj + + + C&lose + &Zavřít + + + &Copy Address + &Kopíruj adresu + + + 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 + + + &Delete + S&maž + + + 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Tohle jsou tvé GameCreditsové adresy pro posílání plateb. Před odesláním mincí si vždy zkontroluj částku a cílovou adresu. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Tohle jsou tvé GameCreditsové 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 + + + Export Address List + Exportuj seznam adres + + + Comma separated file (*.csv) + CSV formát (*.csv) + + + Exporting Failed + Exportování selhalo + + + 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í) + + + + 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 GameCreditsS</b>! + Upozornění: Pokud si zašifruješ peněženku a ztratíš či zapomeneš heslo, <b>PŘIJDEŠ O VŠECHNY GameCreditsY</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits 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 gamecreditsů 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. + + + + GameCreditsGUI + + 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í + + + E&xit + &Konec + + + Quit application + Ukonči aplikaci + + + Show information about GameCredits + Zobraz informace o GameCreditsu + + + 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 GameCredits address + Pošli mince na GameCreditsovou adresu + + + Modify configuration options for GameCredits + Uprav nastavení GameCreditsu + + + 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... + + + GameCredits + GameCredits + + + Wallet + Peněženka + + + &Send + &Pošli + + + &Receive + Při&jmi + + + &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 GameCredits addresses to prove you own them + Podepiš zprávy svými GameCreditsovými adresami, čímž prokážeš, že jsi jejich vlastníkem + + + Verify messages to ensure they were signed with specified GameCredits addresses + Ověř zprávy, aby ses ujistil, že byly podepsány danými GameCreditsovými adresami + + + &File + &Soubor + + + &Settings + &Nastavení + + + &Help + Ná&pověda + + + Tabs toolbar + Panel s listy + + + [testnet] + [testnet] + + + GameCredits Core + GameCredits Core + + + Request payments (generates QR codes and gamecredits: URIs) + Požaduj platby (generuje QR kódy a gamecredits: URI) + + + &About GameCredits Core + O &GameCredits 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 gamecredits: URI or payment request + Načti gamecredits: URI nebo platební požadavek + + + &Command-line options + Ar&gumenty z příkazové řádky + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Seznam argumentů GameCreditsu pro příkazovou řádku získáš v nápovědě GameCreditsu Core + + + GameCredits client + GameCredits klient + + + %n active connection(s) to GameCredits network + %n aktivní spojení do GameCreditsové sítě%n aktivní spojení do GameCreditsové sítě%n aktivních spojení do GameCreditsové 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 + + + Up to date + Aktuální + + + Catching up... + Stahuji... + + + Sent transaction + Odeslané transakce + + + Incoming transaction + Příchozí transakce + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Datum: %1 +Částka: %2 +Typ: %3 +Adresa: %4 + + + + 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. GameCredits can no longer continue safely and will quit. + Stala se fatální chyba. GameCredits nemůže bezpečně pokračovat v činnosti, a proto skončí. + + + + 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 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 + + + 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 GameCredits address. + Zadaná adresa "%1" není platná GameCreditsová adresa. + + + Could not unlock wallet. + Nemohu odemknout peněženku. + + + New key generation failed. + Nepodařilo se mi vygenerovat nový klíč. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + GameCredits 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 GameCredits Core. + Vítej v GameCredits Core. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Tohle je poprvé, co spouštíš GameCredits Core, takže si můžeš zvolit, kam bude ukládat svá data. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits 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: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Automaticky spustí GameCredits po přihlášení do systému. + + + &Start GameCredits on system login + S&pustit GameCredits 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 GameCredits network through a SOCKS proxy. + Připojí se do GameCreditsové 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 GameCredits 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 + + + Proxy &IP: + &IP adresa proxy: + + + &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 GameCredits. + Tady lze nastavit jazyk uživatelského rozhraní. Nastavení se projeví až po restartování GameCreditsu. + + + &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 GameCredits addresses in the transaction list or not. + Zda ukazovat gamecreditsové 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 + + + default + výchozí + + + none + žádná + + + Confirm options reset + Potvrzení obnovení nastavení + + + Client restart required to activate changes. + K aktivaci změn je potřeba restartovat klienta. + + + Client will be shutdown, do you want to proceed? + Klient se vypne, chceš pokračovat? + + + This change would require a client restart. + Tahle změna bude chtít restartovat klienta. + + + The supplied proxy address is invalid. + Zadaná adresa proxy je neplatná. + + + + OverviewPage + + Form + Formulář + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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 GameCreditsovou sítí, jakmile se s ní spojí. Zatím ale ještě není synchronizace dokončena. + + + 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> + + + out of sync + nesynchronizováno + + + + PaymentServer + + URI handling + Zpracování URI + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + Nepodařilo se analyzovat URI! Důvodem může být neplatná GameCreditsová 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 gamecredits: click-to-pay handler + Nemůžu spustit gamecredits: 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 + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Chyba: Zadaný adresář pro data „%1“ neexistuje. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Chyba: Nemohu zpracovat konfigurační soubor: %1. Používej pouze syntaxi klíč=hodnota. + + + Error: Invalid combination of -regtest and -testnet. + Chyba: Neplatná kombinace -regtest a -testnet. + + + GameCredits Core didn't yet exit safely... + GameCredits Core ještě bezpečně neskončil... + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Zadej GameCreditsovou adresu (např. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + &Ulož obrázek... + + + &Copy Image + &Kopíruj obrázek + + + Save QR Code + Ulož QR kód + + + 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í + + + 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 + + + &Console + &Konzole + + + &Network Traffic + &Síťový provoz + + + &Clear + &Vyčistit + + + Totals + Sumy + + + In: + Sem: + + + Out: + Ven: + + + Build date + Datum kompilace + + + Debug log file + Soubor s ladicími záznamy + + + Open the GameCredits 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 GameCreditsu 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 GameCredits RPC console. + Vítej v GameCreditsové 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 GameCredits 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 + + + Clear all fields of the form. + Smaže všechny pole formuláře. + + + Clear &All + Všechno s&maž + + + Balance: + Stav účtu: + + + Confirm the send action + Potvrď odeslání + + + S&end + P&ošli + + + Confirm send coins + Potvrď odeslání mincí + + + %1 to %2 + + + + 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. + + + Transaction creation failed! + Vytvoření transakce selhalo! + + + 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 GameCredits address + Upozornění: Neplatná GameCreditsová 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 + + A&mount: + Čás&tka: + + + Pay &To: + &Komu: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adresa příjemce (např. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + Smaž tento záznam + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + Toto je neověřený požadavek k platbě. + + + Pay To: + Komu: + + + Memo: + Poznámka: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adresa, kterou se zpráva podepíše (např. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Podepiš zprávu, čímž prokážeš, že jsi vlastníkem této GameCreditsové 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adresa, kterou je zpráva podepsána (např. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Ověř zprávu, aby ses ujistil, že byla podepsána danou GameCreditsovou 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 GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Zadej GameCreditsovou adresu (např. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Kliknutím na "Podepiš zprávu" vygeneruješ 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. + + + + SplashScreen + + GameCredits Core + GameCredits Core + + + The Bitcoin Core Developers + Vývojáři GameCredits 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 + + + 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 + + + + TransactionDescDialog + + Transaction details + Detaily transakce + + + This pane shows a detailed description of the transaction + Toto okno zobrazuje detailní popis transakce + + + + 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 + + + Confirmed (%1 confirmations) + Potvrzeno (%1 potvrzení) + + + 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. + + + + 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 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 + + + Range: + Rozsah: + + + to + + + + + WalletFrame + + No wallet has been loaded. + Žádná peněženka se nenačetla. + + + + WalletModel + + Send Coins + Pošli mince + + + + 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 %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 + + + + gamecredits-core + + Usage: + Užití: + + + 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: gamecredits.conf) + Konfigurační soubor (výchozí: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + PID soubor (výchozí: gamecreditsd.pid) + + + Specify data directory + Adresář pro data + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Čekat na spojení na <portu> (výchozí: 40002 nebo testnet: 50001) + + + 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: 40001 or testnet: 50000) + Čekat na JSON RPC spojení na <portu> (výchozí: 40001 nebo testnet: 50000) + + + Accept command line and JSON-RPC commands + Akceptovat příkazy z příkazové řádky a přes JSON-RPC + + + GameCredits Core RPC client version + Verze GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, musíš nastavit rpcpassword v konfiguračním souboru: +%s +Je vhodné použít následující náhodné heslo: +rpcuser=gamecreditsrpc +rpcpassword=%s +(není potřeba si ho pamatovat) +rpcuser a rpcpassword NESMÍ být stejné. +Pokud konfigurační soubor ještě neexistuje, vytvoř ho tak, aby ho mohl číst pouze vlastník. +Je také doporučeno si nastavit alertnotify, abys byl upozorněn na případné problémy; +například: alertnotify=echo %%s | mail -s "GameCredits Alert" admin@foo.com + + + + 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 + + + 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 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) + + + 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. GameCredits Core is probably already running. + Nedaří se mi připojit na %s na tomhle počítači. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Upozornění: Zkontroluj, že máš v počítači správně nastavený datum a čas! Pokud jsou nastaveny špatně, GameCredits 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 + + + GameCredits Core Daemon + GameCredits 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: 40001 or testnet: 50000) + Připojit se k JSON RPC na <port> (výchozí: 40001 nebo testnet: 50000) + + + 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) + + + 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 gamecredits-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 + + + Cannot obtain a lock on data directory %s. GameCredits Core is probably already running. + Nedaří se mi získat zámek na datový adresář %s. GameCredits 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 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ě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) + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the GameCredits 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 GameCredits Wiki for SSL setup instructions) + Možnosti SSL: (viz instrukce nastavení SSL v GameCredits Wiki) + + + Send command to GameCredits Core + Poslat příkaz GameCredits 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 + + + 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 GameCredits 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á) + + + 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! + + + 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) + + + 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) + + + 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 GameCredits + Chyba při načítání wallet.dat: peněženka vyžaduje novější verzi GameCreditsu + + + Wallet needed to be rewritten: restart GameCredits to complete + Soubor s peněženkou potřeboval přepsat: restartuj GameCredits, 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 + + + 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. + Musíš nastavit rpcpassword=<heslo> v konfiguračním souboru: +%s +Pokud konfigurační soubor ještě neexistuje, vytvoř ho tak, aby ho mohl číst pouze vlastník. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_cy.ts b/src/qt/locale/bitmark_cy.ts index 568cb64..192ac11 100644 --- a/src/qt/locale/bitmark_cy.ts +++ b/src/qt/locale/bitmark_cy.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O Cadarnau amgryptiad y waled - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O Waled wedi'i amgryptio - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,8 +291,8 @@ This product includes software developed by the OpenSSL Project for use in the O Gadael rhaglen - Show information about Pfennig - Dangos gwybodaeth am Pfennig + Show information about pfennig + Dangos gwybodaeth am pfennig About &Qt @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 Mae'r waled <b>wedi'i amgryptio</b> ac <b>ar glo</b> ar hyn o bryd - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 Mae'r cyfeiriad "%1" sydd newydd gael ei geisio gennych yn y llyfr cyfeiriad yn barod. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 Ffurflen - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_cy.ts~ b/src/qt/locale/bitmark_cy.ts~ new file mode 100644 index 0000000..a9fcfc2 --- /dev/null +++ b/src/qt/locale/bitmark_cy.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin Core Developers + + + + (%1-bit) + + + + + AddressBookPage + + 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 + + + &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 + &Dileu + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 + Label + + + Address + Cyfeiriad + + + (no label) + (heb label) + + + + 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 GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + 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 + + + E&xit + + + + Quit application + Gadael rhaglen + + + Show information about GameCredits + Dangos gwybodaeth am GameCredits + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + 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... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &Ffeil + + + &Settings + &Gosodiadau + + + &Help + &Cymorth + + + Tabs toolbar + Bar offer tabiau + + + [testnet] + [testnet] + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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 + + + Up to date + Cyfamserol + + + Catching up... + Dal i fyny + + + Sent transaction + Trafodiad a anfonwyd + + + Incoming transaction + Trafodiad sy'n cyrraedd + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + 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. GameCredits 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 + 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 list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Cyfeiriad + + + 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 GameCredits address. + + + + Could not unlock wallet. + Methodd ddatgloi'r waled. + + + New key generation failed. + Methodd gynhyrchu allwedd newydd. + + + + 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 + Ffurflen + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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>Trafodion diweddar</b> + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + Gweddill: + + + Confirm the send action + Cadarnhau'r gweithrediad anfon + + + S&end + + + + Confirm send coins + + + + %1 to %2 + %1 i %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 GameCredits 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 + + A&mount: + &Maint + + + Pay &To: + + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Enter a label for this address to add it to your address book + + + + &Label: + &Label: + + + 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 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + 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 + 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 + + + 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 + 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 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 + + + + 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 + Rhybudd + + + 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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 + 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. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_da.ts b/src/qt/locale/bitmark_da.ts index fad8f5e..8f9ead3 100644 --- a/src/qt/locale/bitmark_da.ts +++ b/src/qt/locale/bitmark_da.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Om Pfennig Core + About pfennig Core + Om pfennig Core - <b>Pfennig Core</b> version - <b>Pfennig Core</b> version + <b>pfennig Core</b> version + <b>pfennig Core</b> version @@ -29,7 +29,7 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open The Bitcoin Core Developers - Udviklerne af Pfennig Core + Udviklerne af pfennig Core (%1-bit) @@ -103,12 +103,12 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open Modtagelsesadresser - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Disse er dine Pfennig-adresser for at sende betalinger. Tjek altid beløb og modtageradresse, inden du sender pfennigs. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Disse er dine pfennig-adresser for at sende betalinger. Tjek altid beløb og modtageradresse, inden du sender pfennigs. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Dette er dine Pfennig-adresser til at modtage betalinger med. Det anbefales are bruge en ny modtagelsesadresse for hver transaktion. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Dette er dine pfennig-adresser til at modtage betalinger med. Det anbefales are bruge en ny modtagelsesadresse for hver transaktion. Copy &Label @@ -205,8 +205,8 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open Bekræft tegnebogskryptering - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Advarsel: Hvis du krypterer din tegnebog og mister din adgangskode, vil du <b>MISTE ALLE DINE PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Advarsel: Hvis du krypterer din tegnebog og mister din adgangskode, vil du <b>MISTE ALLE DINE pfennigS</b>! Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open Tegnebog krypteret - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig vil nu lukke for at gennemføre krypteringsprocessen. Husk på, at kryptering af din tegnebog vil ikke beskytte dine pfennigs fuldt ud mod at blive stjålet af malware på din computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig vil nu lukke for at gennemføre krypteringsprocessen. Husk på, at kryptering af din tegnebog vil ikke beskytte dine pfennigs fuldt ud mod at blive stjålet af malware på din computer. Wallet encryption failed @@ -258,7 +258,7 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open - PfennigGUI + pfennigGUI Sign &message... Underskriv besked … @@ -296,8 +296,8 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open Afslut program - Show information about Pfennig - Vis informationer om Pfennig + Show information about pfennig + Vis informationer om pfennig About &Qt @@ -344,12 +344,12 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open Genindekserer blokke på disken … - Send coins to a Pfennig address - Send pfennigs til en Pfennig-adresse + Send coins to a pfennig address + Send pfennigs til en pfennig-adresse - Modify configuration options for Pfennig - Redigér konfigurationsindstillinger for Pfennig + Modify configuration options for pfennig + Redigér konfigurationsindstillinger for pfennig Backup wallet to another location @@ -372,8 +372,8 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open Verificér besked … - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open Kryptér de private nøgler, der hører til din tegnebog - Sign messages with your Pfennig addresses to prove you own them - Underskriv beskeder med dine Pfennig-adresser for at bevise, at de tilhører dig + Sign messages with your pfennig addresses to prove you own them + Underskriv beskeder med dine pfennig-adresser for at bevise, at de tilhører dig - Verify messages to ensure they were signed with specified Pfennig addresses - Verificér beskeder for at sikre, at de er underskrevet med de angivne Pfennig-adresser + Verify messages to ensure they were signed with specified pfennig addresses + Verificér beskeder for at sikre, at de er underskrevet med de angivne pfennig-adresser &File @@ -428,16 +428,16 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open [testnetværk] - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core Request payments (generates QR codes and pfennig: URIs) Forespørg betalinger (genererer QR-koder og "pfennig:"-URI'er) - &About Pfennig Core - Om Pfennig Core + &About pfennig Core + Om pfennig Core Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ Produktet indeholder software som er udviklet af OpenSSL Project til brug i Open Tilvalg for kommandolinje - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Vis Pfennig Core hjælpebesked for at få en liste over mulige tilvalg for Pfennig kommandolinje + Show the pfennig Core help message to get a list with possible pfennig command-line options + Vis pfennig Core hjælpebesked for at få en liste over mulige tilvalg for pfennig kommandolinje - Pfennig client - Pfennig-klient + pfennig client + pfennig-klient - %n active connection(s) to Pfennig network - %n aktiv forbindelse til Pfennig-netværket%n aktive forbindelser til Pfennig-netværket + %n active connection(s) to pfennig network + %n aktiv forbindelse til pfennig-netværket%n aktive forbindelser til pfennig-netværket No block source available... @@ -560,8 +560,8 @@ Adresse: %4 Tegnebog er <b>krypteret</b> og i øjeblikket <b>låst</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Der opstod en fatal fejl. Pfennig kan ikke længere fortsætte sikkert og vil afslutte. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Der opstod en fatal fejl. pfennig kan ikke længere fortsætte sikkert og vil afslutte. @@ -845,8 +845,8 @@ Adresse: %4 Den indtastede adresse "%1" er allerede i adressebogen. - The entered address "%1" is not a valid Pfennig address. - Den indtastede adresse "%1" er ikke en gyldig Pfennig-adresse. + The entered address "%1" is not a valid pfennig address. + Den indtastede adresse "%1" er ikke en gyldig pfennig-adresse. Could not unlock wallet. @@ -883,12 +883,12 @@ Adresse: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core – tilvalg for kommandolinje + pfennig Core - Command-line options + pfennig Core – tilvalg for kommandolinje - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core version @@ -934,16 +934,16 @@ Adresse: %4 Velkommen - Welcome to Pfennig Core. - Velkommen til Pfennig Core. + Welcome to pfennig Core. + Velkommen til pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Siden dette er første gang, programmet startes, kan du vælge, hvor Pfennig Core skal gemme sin data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Siden dette er første gang, programmet startes, kan du vælge, hvor pfennig Core skal gemme sin data. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig Core vil downloade og gemme et kopi af Pfennig-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. + pfennig Core will download and store a copy of the pfennig 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. + pfennig Core vil downloade og gemme et kopi af pfennig-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 @@ -954,8 +954,8 @@ Adresse: %4 Brug tilpasset mappe for data: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,12 +1016,12 @@ Adresse: %4 Betal transaktionsgebyr - Automatically start Pfennig after logging in to the system. - Start Pfennig automatisk, når der logges ind på systemet. + Automatically start pfennig after logging in to the system. + Start pfennig automatisk, når der logges ind på systemet. - &Start Pfennig on system login - Start Pfennig ved systemlogin + &Start pfennig on system login + Start pfennig ved systemlogin Size of &database cache @@ -1036,8 +1036,8 @@ Adresse: %4 Antallet af scriptverificeringstråde - Connect to the Pfennig network through a SOCKS proxy. - Forbind til Pfennig-netværket gennem en SOCKS-proxy. + Connect to the pfennig network through a SOCKS proxy. + Forbind til pfennig-netværket gennem en SOCKS-proxy. &Connect through SOCKS proxy (default proxy): @@ -1096,8 +1096,8 @@ Adresse: %4 Brug ubekræftede byttepenge - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Åbn automatisk Pfennig-klientens port på routeren. Dette virker kun, når din router understøtter UPnP, og UPnP er aktiveret. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Åbn automatisk pfennig-klientens port på routeren. Dette virker kun, når din router understøtter UPnP, og UPnP er aktiveret. Map port using &UPnP @@ -1152,8 +1152,8 @@ Adresse: %4 Sprog for brugergrænseflade: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Sproget for brugergrænsefladen kan angives her. Denne indstilling træder først i kraft, når Pfennig genstartes. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Sproget for brugergrænsefladen kan angives her. Denne indstilling træder først i kraft, når pfennig genstartes. &Unit to show amounts in: @@ -1164,8 +1164,8 @@ Adresse: %4 Vælg standard for underopdeling af enhed, som skal vises i brugergrænsefladen og ved afsendelse af pfennigs. - Whether to show Pfennig addresses in the transaction list or not. - Afgør hvorvidt Pfennig-adresser skal vises i transaktionslisten eller ej. + Whether to show pfennig addresses in the transaction list or not. + Afgør hvorvidt pfennig-adresser skal vises i transaktionslisten eller ej. &Display addresses in transaction list @@ -1219,8 +1219,8 @@ Adresse: %4 Formular - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig-netværket, når en forbindelse etableres, men denne proces er ikke gennemført endnu. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig-netværket, når en forbindelse etableres, men denne proces er ikke gennemført endnu. Wallet @@ -1274,8 +1274,8 @@ Adresse: %4 URI-håndtering - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI kan ikke fortolkes! Dette kan skyldes en ugyldig Pfennig-adresse eller misdannede URI-parametre. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI kan ikke fortolkes! Dette kan skyldes en ugyldig pfennig-adresse eller misdannede URI-parametre. Requested payment amount of %1 is too small (considered dust). @@ -1341,8 +1341,8 @@ Adresse: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,12 +1357,12 @@ Adresse: %4 Fejl: Ugyldig kombination af -regtest og -testnet. - Pfennig Core didn't yet exit safely... - Pfennig Core blev ikke afsluttet på sikker vis … + pfennig Core didn't yet exit safely... + pfennig Core blev ikke afsluttet på sikker vis … - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Indtast en Pfennig-adresse (fx bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Indtast en pfennig-adresse (fx bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,16 +1483,16 @@ Adresse: %4 Fejlsøgningslogfil - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Åbn Pfennig-fejlsøgningslogfilen fra den nuværende datamappe. Dette kan tage nogle få sekunder for store logfiler. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Åbn pfennig-fejlsøgningslogfilen fra den nuværende datamappe. Dette kan tage nogle få sekunder for store logfiler. Clear console Ryd konsol - Welcome to the Pfennig RPC console. - Velkommen til Pfennig RPC-konsollen. + Welcome to the pfennig RPC console. + Velkommen til pfennig RPC-konsollen. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1554,8 +1554,8 @@ Adresse: %4 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 Pfennig 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 Pfennig-netværket. + 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 pfennig 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 pfennig-netværket. An optional label to associate with the new receiving address. @@ -1867,8 +1867,8 @@ Adresse: %4 Transaktionen blev afvist! Dette kan ske, hvis nogle af dine pfennigs i din tegnebog allerede er brugt, som hvis du brugte en kopi af wallet.dat og dine pfennigs er blevet brugt i kopien, men ikke er markeret som brugt her. - Warning: Invalid Pfennig address - Advarsel: Ugyldig Pfennig-adresse + Warning: Invalid pfennig address + Advarsel: Ugyldig pfennig-adresse (no label) @@ -1907,7 +1907,7 @@ Adresse: %4 The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Pfennig-adressen som betalingen skal sendes til (fx bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + pfennig-adressen som betalingen skal sendes til (fx bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Enter a label for this address to add it to your address book @@ -1954,8 +1954,8 @@ Adresse: %4 Indtast et mærkat for denne adresse for at føje den til listen over brugte adresser - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig 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 Pfennig-netværket. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig 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 pfennig-netværket. This is an unverified payment request. @@ -1973,8 +1973,8 @@ Adresse: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig Core lukker ned … + pfennig Core is shutting down... + pfennig Core lukker ned … Do not shut down the computer until this window disappears. @@ -1993,11 +1993,11 @@ Adresse: %4 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 Pfennig-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 pfennig-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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Pfennig-adressen som beskeden skal underskrives med (fx bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + pfennig-adressen som beskeden skal underskrives med (fx bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Choose previously used address @@ -2028,8 +2028,8 @@ Adresse: %4 Kopiér den nuværende underskrift til systemets udklipsholder - Sign the message to prove you own this Pfennig address - Underskriv denne besked for at bevise, at Pfennig-adressen tilhører dig + Sign the message to prove you own this pfennig address + Underskriv denne besked for at bevise, at pfennig-adressen tilhører dig Sign &Message @@ -2053,11 +2053,11 @@ Adresse: %4 The address the message was signed with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Pfennig-adressen som beskeden er underskrevet med (fx bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + pfennig-adressen som beskeden er underskrevet med (fx bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Verificér beskeden for at sikre, at den er underskrevet med den angivne Pfennig-adresse + Verify the message to ensure it was signed with the specified pfennig address + Verificér beskeden for at sikre, at den er underskrevet med den angivne pfennig-adresse Verify &Message @@ -2068,8 +2068,8 @@ Adresse: %4 Nulstil alle "verificér besked"-felter - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Indtast en Pfennig-adresse (fx bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Indtast en pfennig-adresse (fx bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2127,12 +2127,12 @@ Adresse: %4 SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core The Bitcoin Core Developers - Udviklerne af Pfennig Core + Udviklerne af pfennig Core [testnet] @@ -2622,8 +2622,8 @@ Adresse: %4 Angiv datamappe - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Lyt til forbindelser på <port> (standard: P2PPORT eller testnetværk: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Lyt til forbindelser på <port> (standard: 40002 eller testnetværk: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2650,16 +2650,16 @@ Adresse: %4 Der opstod en fejl ved angivelse af RPC-porten %u til at lytte på IPv4: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Lyt til JSON-RPC-forbindelser på <port> (standard: RPCPORT eller testnetværk: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Lyt til JSON-RPC-forbindelser på <port> (standard: 40001 eller testnetværk: 50000) Accept command line and JSON-RPC commands Acceptér kommandolinje- og JSON-RPC-kommandoer - Pfennig Core RPC client version - Pfennig Core RPC-klient-version + pfennig Core RPC client version + pfennig Core RPC-klient-version Run in the background as a daemon and accept commands @@ -2683,7 +2683,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, du skal angive en RPC-adgangskode i konfigurationsfilen: %s @@ -2694,7 +2694,7 @@ 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; -fx: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com +fx: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2766,8 +2766,8 @@ fx: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Dette er en foreløbig testudgivelse - brug på eget ansvar - brug ikke til udvinding eller handelsprogrammer - Unable to bind to %s on this computer. Pfennig Core is probably already running. - Ikke i stand til at tildele til %s på denne computer. Pfennig Core kører sansynligvis allerede. + Unable to bind to %s on this computer. pfennig Core is probably already running. + Ikke i stand til at tildele til %s på denne computer. pfennig Core kører sansynligvis allerede. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2778,8 +2778,8 @@ fx: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Advarsel: -paytxfee er sat meget højt! Dette er det gebyr du vil betale, hvis du sender en transaktion. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig 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 Pfennig ikke fungere korrekt. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig 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 pfennig ikke fungere korrekt. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2814,8 +2814,8 @@ fx: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Forsøg at genskabe private nøgler fra ødelagt wallet.dat - Pfennig Core Daemon - Pfennig Core-tjeneste + pfennig Core Daemon + pfennig Core-tjeneste Block creation options: @@ -2834,8 +2834,8 @@ fx: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Forbind gennem SOCKS-proxy - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Forbind til JSON-RPC på <port> (standard: RPCPORT eller testnetværk: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Forbind til JSON-RPC på <port> (standard: 40001 eller testnetværk: 50000) Connection options: @@ -3058,8 +3058,8 @@ fx: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Importerer blokke fra ekstern blk000??.dat fil - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - Kan ikke opnå en lås på datamappe %s. Pfennig Core kører sansynligvis allerede. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + Kan ikke opnå en lås på datamappe %s. pfennig 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) @@ -3122,8 +3122,8 @@ fx: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Udskriv bloktræ under startop (standard: 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) - Tilvalg for RPC SSL: (se Pfennig Wiki for instruktioner i SSL-opstart) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) + Tilvalg for RPC SSL: (se pfennig Wiki for instruktioner i SSL-opstart) RPC server options: @@ -3142,12 +3142,12 @@ fx: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Kør en tråd for at rydde tegnebog periodisk (standard: 1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL-indstillinger: (se Pfennig Wiki for SSL-opsætningsinstruktioner) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL-indstillinger: (se pfennig Wiki for SSL-opsætningsinstruktioner) - Send command to Pfennig Core - Send kommando til Pfennig Core + Send command to pfennig Core + Send kommando til pfennig Core Send trace/debug info to console instead of debug.log file @@ -3182,8 +3182,8 @@ fx: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Angiv tilslutningstimeout i millisekunder (standard: 5000) - Start Pfennig Core Daemon - Start Pfennig Core-tjeneste + Start pfennig Core Daemon + Start pfennig Core-tjeneste System error: @@ -3298,12 +3298,12 @@ fx: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Fejl ved indlæsning af wallet.dat: Tegnebog ødelagt - Error loading wallet.dat: Wallet requires newer version of Pfennig - Fejl ved indlæsning af wallet.dat: Tegnebog kræver en nyere version af Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Fejl ved indlæsning af wallet.dat: Tegnebog kræver en nyere version af pfennig - Wallet needed to be rewritten: restart Pfennig to complete - Det var nødvendigt at genskrive tegnebogen: genstart Pfennig for at gennemføre + Wallet needed to be rewritten: restart pfennig to complete + Det var nødvendigt at genskrive tegnebogen: genstart pfennig for at gennemføre Error loading wallet.dat diff --git a/src/qt/locale/bitmark_da.ts~ b/src/qt/locale/bitmark_da.ts~ new file mode 100644 index 0000000..2065b03 --- /dev/null +++ b/src/qt/locale/bitmark_da.ts~ @@ -0,0 +1,3389 @@ + + + AboutDialog + + About GameCredits Core + Om GameCredits Core + + + <b>GameCredits Core</b> version + <b>GameCredits 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. + +Dette program er eksperimentelt. + +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 + Ophavsret + + + The Bitcoin Core Developers + Udviklerne af GameCredits Core + + + (%1-bit) + (%1-bit) + + + + AddressBookPage + + 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 + Kopiér den valgte adresse til systemets udklipsholder + + + &Copy + Kopiér + + + C&lose + Luk + + + &Copy Address + Kopiér adresse + + + 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 + Eksportér + + + &Delete + Slet + + + Choose the address to send coins to + Vælg adresse at sende gamecreditss til + + + Choose the address to receive coins with + Vælg adresse at modtage gamecreditss med + + + C&hoose + Vælg + + + Sending addresses + Afsendelsesadresser + + + Receiving addresses + Modtagelsesadresser + + + These are your GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Disse er dine GameCredits-adresser for at sende betalinger. Tjek altid beløb og modtageradresse, inden du sender gamecreditss. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Dette er dine GameCredits-adresser til at modtage betalinger med. Det anbefales are bruge en ny modtagelsesadresse for hver transaktion. + + + Copy &Label + Kopiér mærkat + + + &Edit + Redigér + + + Export Address List + Eksportér adresseliste + + + Comma separated file (*.csv) + Kommasepareret fil (*.csv) + + + Exporting Failed + Eksport mislykkedes + + + 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) + + + + 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 + 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 + 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 GameCreditsS</b>! + Advarsel: Hvis du krypterer din tegnebog og mister din adgangskode, vil du <b>MISTE ALLE DINE GameCreditsS</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 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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits vil nu lukke for at gennemføre krypteringsprocessen. Husk på, at kryptering af din tegnebog vil ikke beskytte dine gamecreditss 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. + + + + GameCreditsGUI + + Sign &message... + Underskriv besked … + + + Synchronizing with network... + 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 + + + E&xit + Luk + + + Quit application + Afslut program + + + Show information about GameCredits + Vis informationer om GameCredits + + + About &Qt + Om Qt + + + Show information about Qt + Vis informationer om Qt + + + &Options... + Indstillinger … + + + &Encrypt Wallet... + Kryptér tegnebog … + + + &Backup Wallet... + Sikkerhedskopiér tegnebog … + + + &Change Passphrase... + Skift adgangskode … + + + &Sending addresses... + Afsendelsesadresser … + + + &Receiving addresses... + Modtagelsesadresser … + + + Open &URI... + Åbn URI … + + + Importing blocks from disk... + Importerer blokke fra disken … + + + Reindexing blocks on disk... + Genindekserer blokke på disken … + + + Send coins to a GameCredits address + Send gamecreditss til en GameCredits-adresse + + + Modify configuration options for GameCredits + Redigér konfigurationsindstillinger for GameCredits + + + 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... + Verificér besked … + + + GameCredits + GameCredits + + + Wallet + Tegnebog + + + &Send + Send + + + &Receive + Modtag + + + &Show / Hide + Vis / skjul + + + Show or hide the main Window + Vis eller skjul hovedvinduet + + + Encrypt the private keys that belong to your wallet + Kryptér de private nøgler, der hører til din tegnebog + + + Sign messages with your GameCredits addresses to prove you own them + Underskriv beskeder med dine GameCredits-adresser for at bevise, at de tilhører dig + + + Verify messages to ensure they were signed with specified GameCredits addresses + Verificér beskeder for at sikre, at de er underskrevet med de angivne GameCredits-adresser + + + &File + Fil + + + &Settings + Opsætning + + + &Help + Hjælp + + + Tabs toolbar + Faneværktøjslinje + + + [testnet] + [testnetværk] + + + GameCredits Core + GameCredits Core + + + Request payments (generates QR codes and gamecredits: URIs) + Forespørg betalinger (genererer QR-koder og "gamecredits:"-URI'er) + + + &About GameCredits Core + Om GameCredits 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 gamecredits: URI or payment request + Åbn en "gamecredits:"-URI eller betalingsforespørgsel + + + &Command-line options + Tilvalg for kommandolinje + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Vis GameCredits Core hjælpebesked for at få en liste over mulige tilvalg for GameCredits kommandolinje + + + GameCredits client + GameCredits-klient + + + %n active connection(s) to GameCredits network + %n aktiv forbindelse til GameCredits-netværket%n aktive forbindelser til GameCredits-netværket + + + No block source available... + Ingen blokkilde tilgængelig … + + + Processed %1 of %2 (estimated) blocks of transaction history. + Behandlet %1 ud af %2 (estimeret) blokke af transaktionshistorikken. + + + Processed %1 blocks of transaction history. + Behandlet %1 blokke af transaktionshistorikken. + + + %n hour(s) + %n time%n timer + + + %n day(s) + %n dag%n dage + + + %n week(s) + %n uge%n uger + + + %1 and %2 + %1 og %2 + + + %n year(s) + %n år%n år + + + %1 behind + %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 + + + Up to date + Opdateret + + + Catching up... + Indhenter … + + + Sent transaction + Afsendt transaktion + + + Incoming transaction + Indgående transaktion + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Dato: %1 +Beløb: %2 +Type: %3 +Adresse: %4 + + + + 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. GameCredits can no longer continue safely and will quit. + Der opstod en fatal fejl. GameCredits kan ikke længere fortsætte sikkert og vil afslutte. + + + + ClientModel + + Network Alert + Netværksadvarsel + + + + CoinControlDialog + + 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 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 + + + New receiving address + Ny modtagelsesadresse + + + New sending address + Ny afsendelsesadresse + + + Edit receiving address + Redigér modtagelsesadresse + + + Edit sending address + 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 GameCredits address. + Den indtastede adresse "%1" er ikke en gyldig GameCredits-adresse. + + + Could not unlock wallet. + Kunne ikke låse tegnebog op. + + + New key generation failed. + Ny nøglegenerering mislykkedes. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + GameCredits Core – tilvalg for kommandolinje + + + GameCredits Core + GameCredits Core + + + version + version + + + Usage: + Anvendelse: + + + command-line options + kommandolinjetilvalg + + + UI options + Brugergrænsefladeindstillinger + + + Set language, for example "de_DE" (default: system locale) + 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 opstart (standard: 1) + + + Choose data directory on startup (default: 0) + Vælg datamappe ved opstart (standard: 0) + + + + Intro + + Welcome + Velkommen + + + Welcome to GameCredits Core. + Velkommen til GameCredits Core. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Siden dette er første gang, programmet startes, kan du vælge, hvor GameCredits Core skal gemme sin data. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits Core vil downloade og gemme et kopi af GameCredits-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: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Start GameCredits automatisk, når der logges ind på systemet. + + + &Start GameCredits on system login + Start GameCredits 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 GameCredits network through a SOCKS proxy. + Forbind til GameCredits-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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Åbn automatisk GameCredits-klientens port på routeren. Dette virker kun, når din router understøtter UPnP, og UPnP er aktiveret. + + + Map port using &UPnP + Konfigurér port vha. UPnP + + + Proxy &IP: + Proxy-IP: + + + &Port: + Port: + + + Port of the proxy (e.g. 9050) + Port for proxyen (fx 9050) + + + SOCKS &Version: + SOCKS-version + + + SOCKS version of the proxy (e.g. 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 + 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. + 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 + Minimér ved lukning + + + &Display + Visning + + + User Interface &language: + Sprog for brugergrænseflade: + + + The user interface language can be set here. This setting will take effect after restarting GameCredits. + Sproget for brugergrænsefladen kan angives her. Denne indstilling træder først i kraft, når GameCredits 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 standard for underopdeling af enhed, som skal vises i brugergrænsefladen og ved afsendelse af gamecreditss. + + + Whether to show GameCredits addresses in the transaction list or not. + Afgør hvorvidt GameCredits-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 + Annullér + + + default + standard + + + none + ingeningen + + + Confirm options reset + Bekræft nulstilling af indstillinger + + + Client restart required to activate changes. + Genstart af klienten er nødvendig for at aktivere ændringer. + + + Client will be shutdown, do you want to proceed? + Klienten vil blive lukket ned; vil du fortsætte? + + + This change would require a client restart. + Denne ændring vil kræve en genstart af klienten. + + + The supplied proxy address is invalid. + Den angivne proxy-adresse er ugyldig. + + + + OverviewPage + + Form + Formular + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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 GameCredits-netværket, når en forbindelse etableres, men denne proces er ikke gennemført endnu. + + + 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> + + + out of sync + ikke synkroniseret + + + + PaymentServer + + URI handling + URI-håndtering + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + URI kan ikke fortolkes! Dette kan skyldes en ugyldig GameCredits-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 gamecredits: click-to-pay handler + Kan ikke starte gamecredits: 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 + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Fejl: Angivet datamappe "%1" eksisterer ikke. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Fejl: Kan ikke fortolke konfigurationsfil: %1. Brug kun syntaksen nøgle=værdi. + + + Error: Invalid combination of -regtest and -testnet. + Fejl: Ugyldig kombination af -regtest og -testnet. + + + GameCredits Core didn't yet exit safely... + GameCredits Core blev ikke afsluttet på sikker vis … + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Indtast en GameCredits-adresse (fx bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + Gem billede … + + + &Copy Image + Kopiér foto + + + Save QR Code + Gem QR-kode + + + 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 + Anvender OpenSSL-version + + + Startup time + Opstartstidspunkt + + + Network + Netværk + + + Name + Navn + + + Number of connections + Antal forbindelser + + + 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 + + + &Console + Konsol + + + &Network Traffic + Netværkstrafik + + + &Clear + Ryd + + + Totals + Totaler + + + In: + Indkommende: + + + Out: + Udgående: + + + Build date + Byggedato + + + Debug log file + Fejlsøgningslogfil + + + Open the GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Åbn GameCredits-fejlsøgningslogfilen fra den nuværende datamappe. Dette kan tage nogle få sekunder for store logfiler. + + + Clear console + Ryd konsol + + + Welcome to the GameCredits RPC console. + Velkommen til GameCredits 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 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 GameCredits 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 GameCredits-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 gamecreditss + + + 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 + + + Clear all fields of the form. + Ryd alle felter af formen. + + + Clear &All + Ryd alle + + + Balance: + Saldo: + + + Confirm the send action + Bekræft afsendelsen + + + S&end + Afsend + + + Confirm send coins + Bekræft afsendelse af gamecreditss + + + %1 to %2 + %1 til %2 + + + 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 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 én gang pr. afsendelse. + + + Transaction creation failed! + Oprettelse af transaktion mislykkedes! + + + 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 gamecreditss i din tegnebog allerede er brugt, som hvis du brugte en kopi af wallet.dat og dine gamecreditss er blevet brugt i kopien, men ikke er markeret som brugt her. + + + Warning: Invalid GameCredits address + Advarsel: Ugyldig GameCredits-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 + + A&mount: + Beløb: + + + Pay &To: + Betal til: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + GameCredits-adressen som betalingen skal sendes til (fx bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + Fjern denne indgang + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits 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 GameCredits-netværket. + + + This is an unverified payment request. + Dette er en ikke-verificeret betalingsforespørgsel. + + + Pay To: + Betal til: + + + Memo: + Memo: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits 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 + 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 GameCredits-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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + GameCredits-adressen som beskeden skal underskrives med (fx bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 her beskeden, du ønsker at underskrive + + + Signature + Underskrift + + + Copy the current signature to the system clipboard + Kopiér den nuværende underskrift til systemets udklipsholder + + + Sign the message to prove you own this GameCredits address + Underskriv denne besked for at bevise, at GameCredits-adressen tilhører dig + + + Sign &Message + Underskriv besked + + + Reset all sign message fields + Nulstil alle "underskriv besked"-felter + + + Clear &All + Ryd alle + + + &Verify Message + 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 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + GameCredits-adressen som beskeden er underskrevet med (fx bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Verificér beskeden for at sikre, at den er underskrevet med den angivne GameCredits-adresse + + + Verify &Message + Verificér besked + + + Reset all verify message fields + Nulstil alle "verificér besked"-felter + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Indtast en GameCredits-adresse (fx bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Klik "Underskriv besked" for at generere 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. + + + 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. + Verificering af besked mislykkedes. + + + Message verified. + Besked verificeret. + + + + SplashScreen + + GameCredits Core + GameCredits Core + + + The Bitcoin Core Developers + Udviklerne af GameCredits Core + + + [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, 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 blokmodner efter yderligere %n blokke + + + not accepted + ikke accepteret + + + Debit + Debet + + + Transaction fee + Transaktionsgebyr + + + Net amount + Nettobeløb + + + Message + Besked + + + Comment + Kommentar + + + Transaction ID + Transaktions-ID + + + 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 gamecreditss 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) + Åbn yderligere %n blokÅbn yderligere %n blokke + + + unknown + ukendt + + + + TransactionDescDialog + + Transaction details + Transaktionsdetaljer + + + This pane shows a detailed description of the transaction + Denne rude viser en detaljeret beskrivelse af transaktionen + + + + 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) + Åbn yderligere %n blokÅbn yderligere %n blokke + + + Open until %1 + Åben indtil %1 + + + Confirmed (%1 confirmations) + Bekræftet (%1 bekræftelser) + + + 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 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 … + + + 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 + Kopiér adresse + + + Copy label + Kopiér mærkat + + + Copy amount + Kopiér beløb + + + Copy transaction ID + Kopiér transaktions-ID + + + Edit label + Redigér mærkat + + + Show transaction details + Vis transaktionsdetaljer + + + 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 + + + Range: + Interval: + + + to + til + + + + WalletFrame + + No wallet has been loaded. + Ingen tegnebog er indlæst. + + + + WalletModel + + Send Coins + Send gamecreditss + + + + WalletView + + &Export + Eksportér + + + Export the data in the current tab to a file + Eksportér den aktuelle visning til en fil + + + Backup Wallet + Sikkerhedskopiér tegnebog + + + Wallet Data (*.dat) + Tegnebogsdata (*.dat) + + + Backup Failed + Sikkerhedskopiering mislykkedes + + + 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 + Sikkerhedskopiering problemfri + + + + gamecredits-core + + Usage: + Anvendelse: + + + List commands + Liste over kommandoer + + + Get help for a command + Få hjælp til en kommando + + + Options: + Indstillinger: + + + Specify configuration file (default: gamecredits.conf) + Angiv konfigurationsfil (standard: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Angiv pid-fil (default: gamecreditsd.pid) + + + Specify data directory + Angiv datamappe + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Lyt til forbindelser på <port> (standard: 40002 eller testnetværk: 50001) + + + 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 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: 40001 or testnet: 50000) + Lyt til JSON-RPC-forbindelser på <port> (standard: 40001 eller testnetværk: 50000) + + + Accept command line and JSON-RPC commands + Acceptér kommandolinje- og JSON-RPC-kommandoer + + + GameCredits Core RPC client version + GameCredits Core RPC-klient-version + + + Run in the background as a daemon and accept commands + 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) + 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, du skal angive en RPC-adgangskode i konfigurationsfilen: +%s +Det anbefales, at du bruger nedenstående, tilfældige adgangskode: +rpcuser=gamecreditsrpc +rpcpassword=%s +(du behøver ikke huske denne adgangskode) +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; +fx: alertnotify=echo %%s | mail -s "GameCredits 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 + + + 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 gamecreditss i din tegnebog allerede er brugt, som hvis du brugte en kopi af wallet.dat og dine gamecreditss 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 beløb, kompleksitet eller anvendelse af nyligt modtagne gamecreditss! + + + 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) + + + 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. GameCredits Core is probably already running. + Ikke i stand til at tildele til %s på denne computer. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits 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 GameCredits 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.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 + + + GameCredits Core Daemon + GameCredits 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: 40001 or testnet: 50000) + Forbind til JSON-RPC på <port> (standard: 40001 eller testnetværk: 50000) + + + 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 gamecredits-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 andre knuder ved DNS-opslag (standard: 1 hvis ikke -connect) + + + Force safe mode (default: 0) + Gennemtving sikker tilstand (standard: 0) + + + Generate coins (default: 0) + Generér gamecreditss (standard: 0) + + + How many blocks to check at startup (default: 288, 0 = all) + Antal blokke som tjekkes ved opstart (standard: 288, 0=alle) + + + 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 gamecredits-cli): + Brug (forældet, brug gamecredits-cli): + + + Verifying blocks... + Verificerer blokke … + + + Verifying wallet... + 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 + + + Cannot obtain a lock on data directory %s. GameCredits Core is probably already running. + Kan ikke opnå en lås på datamappe %s. GameCredits 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 amount for -minrelaytxfee=<amount>: '%s' + Ugyldigt beløb til -minrelaytxfee=<beløb>: "%s" + + + Invalid amount for -mintxfee=<amount>: '%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 byte (standard: 5000) + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + Maksimum for afsendelsesbuffer pr. forbindelse, <n>*1000 byte (standard: 1000) + + + Only accept block chain matching built-in checkpoints (default: 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) + + + Print block on startup, if found in block index + Udskriv blok under opstart, hvis den findes i blokindeks + + + Print block tree on startup (default: 0) + Udskriv bloktræ under startop (standard: 0) + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + Tilvalg for RPC SSL: (se GameCredits Wiki for instruktioner i SSL-opstart) + + + RPC server options: + Tilvalg for RPC-server: + + + 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 GameCredits Wiki for SSL setup instructions) + SSL-indstillinger: (se GameCredits Wiki for SSL-opsætningsinstruktioner) + + + Send command to GameCredits Core + Send kommando til GameCredits Core + + + Send trace/debug info to console instead of debug.log file + Send sporings-/fejlsøgningsinformation til konsollen i stedet for debug.log filen + + + Set minimum block size in bytes (default: 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 GameCredits Core Daemon + Start GameCredits 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) + Brug UPnP til at konfigurere den lyttende port (standard: 0) + + + Use UPnP to map the listening port (default: 1 when listening) + Brug UPnP til at konfigurere den lyttende port (standard: 1 under lytning) + + + 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! + + + 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) + + + 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) + + + Allow DNS lookups for -addnode, -seednode and -connect + Tillad DNS-opslag for -addnode, -seednode og -connect + + + Loading addresses... + 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 GameCredits + Fejl ved indlæsning af wallet.dat: Tegnebog kræver en nyere version af GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + Det var nødvendigt at genskrive tegnebogen: genstart GameCredits for at gennemføre + + + Error loading wallet.dat + Fejl ved indlæsning af wallet.dat + + + Invalid -proxy address: '%s' + Ugyldig -proxy adresse: "%s" + + + Unknown network specified in -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" + + + Cannot resolve -externalip address: '%s' + Kan ikke finde -externalip adressen: "%s" + + + Invalid amount 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 … + + + 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 + + + Loading wallet... + Indlæser tegnebog … + + + Cannot downgrade wallet + Kan ikke nedgradere tegnebog + + + Cannot write default address + Kan ikke skrive standardadresse + + + Rescanning... + 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=<adgangskode> i konfigurationsfilen: +%s +Hvis filen ikke eksisterer, opret den og giv ingen andre end ejeren læserettighed. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_de.ts b/src/qt/locale/bitmark_de.ts index 687feb4..773f398 100644 --- a/src/qt/locale/bitmark_de.ts +++ b/src/qt/locale/bitmark_de.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Über Pfennig Core + About pfennig Core + Über pfennig Core - <b>Pfennig Core</b> version - <b>"Pfennig Core"</b>-Version + <b>pfennig Core</b> version + <b>"pfennig Core"</b>-Version @@ -29,7 +29,7 @@ Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im Open The Bitcoin Core Developers - Die "Pfennig Core"-Entwickler + Die "pfennig Core"-Entwickler (%1-bit) @@ -84,11 +84,11 @@ Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im Open Choose the address to send coins to - Wählen Sie die Adresse aus, an die Sie Pfennigs überweisen möchten + Wählen Sie die Adresse aus, an die Sie pfennigs überweisen möchten Choose the address to receive coins with - Wählen Sie die Adresse aus, über die Sie Pfennigs empfangen wollen + Wählen Sie die Adresse aus, über die Sie pfennigs empfangen wollen C&hoose @@ -103,12 +103,12 @@ Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im Open Empfangsadressen - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Dies sind ihre Pfennig-Adressen zum Tätigen von Überweisungen. Bitte prüfen Sie den Betrag und die Empfangsadresse, bevor Sie Pfennigs überweisen. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Dies sind ihre pfennig-Adressen zum Tätigen von Überweisungen. Bitte prüfen Sie den Betrag und die Empfangsadresse, bevor Sie pfennigs überweisen. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Dies sind ihre Pfennig-Adressen zum Empfangen von Zahlungen. Es wird empfohlen für jede Transaktion eine neue Empfangsadresse zu verwenden. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Dies sind ihre pfennig-Adressen zum Empfangen von Zahlungen. Es wird empfohlen für jede Transaktion eine neue Empfangsadresse zu verwenden. Copy &Label @@ -205,8 +205,8 @@ Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im Open Wallet-Verschlüsselung bestätigen - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Warnung: Wenn Sie ihre Wallet verschlüsseln und ihre Passphrase verlieren, werden Sie <b>alle ihre Pfennigs verlieren</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Warnung: Wenn Sie ihre Wallet verschlüsseln und ihre Passphrase verlieren, werden Sie <b>alle ihre pfennigs verlieren</b>! Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im Open Wallet verschlüsselt - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Bitte beachten Sie, dass die Wallet-Verschlüsselung nicht vollständig vor Diebstahl ihrer Pfennigs durch Schadsoftware schützt, die ihren Computer befällt. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Bitte beachten Sie, dass die Wallet-Verschlüsselung nicht vollständig vor Diebstahl ihrer pfennigs durch Schadsoftware schützt, die ihren Computer befällt. Wallet encryption failed @@ -258,7 +258,7 @@ Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im Open - PfennigGUI + pfennigGUI Sign &message... Nachricht s&ignieren... @@ -296,8 +296,8 @@ Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im Open Anwendung beenden - Show information about Pfennig - Informationen über Pfennig anzeigen + Show information about pfennig + Informationen über pfennig anzeigen About &Qt @@ -344,11 +344,11 @@ Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im Open Reindiziere Blöcke auf Datenträger... - Send coins to a Pfennig address - Pfennigs an eine Pfennig-Adresse überweisen + Send coins to a pfennig address + pfennigs an eine pfennig-Adresse überweisen - Modify configuration options for Pfennig + Modify configuration options for pfennig Die Konfiguration des Clients bearbeiten @@ -372,8 +372,8 @@ Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im Open Nachricht &verifizieren... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im Open Verschlüsselt die zu ihrer Wallet gehörenden privaten Schlüssel - Sign messages with your Pfennig addresses to prove you own them - Nachrichten signieren, um den Besitz ihrer Pfennig-Adressen zu beweisen + Sign messages with your pfennig addresses to prove you own them + Nachrichten signieren, um den Besitz ihrer pfennig-Adressen zu beweisen - Verify messages to ensure they were signed with specified Pfennig addresses - Nachrichten verifizieren, um sicherzustellen, dass diese mit den angegebenen Pfennig-Adressen signiert wurden + Verify messages to ensure they were signed with specified pfennig addresses + Nachrichten verifizieren, um sicherzustellen, dass diese mit den angegebenen pfennig-Adressen signiert wurden &File @@ -428,16 +428,16 @@ Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im Open [Testnetz] - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core Request payments (generates QR codes and pfennig: URIs) Zahlungen anfordern (erzeugt QR-Codes und "pfennig:"-URIs) - &About Pfennig Core - &Über Pfennig Core + &About pfennig Core + &Über pfennig Core Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ Dieses Produkt enthält Software, die vom OpenSSL-Projekt zur Verwendung im Open &Kommandozeilenoptionen - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Zeige den "Pfennig Core"-Hilfetext, um eine Liste mit möglichen Kommandozeilenoptionen zu erhalten + Show the pfennig Core help message to get a list with possible pfennig command-line options + Zeige den "pfennig Core"-Hilfetext, um eine Liste mit möglichen Kommandozeilenoptionen zu erhalten - Pfennig client - Pfennig-Client + pfennig client + pfennig-Client - %n active connection(s) to Pfennig network - %n aktive Verbindung zum Pfennig-Netzwerk%n aktive Verbindungen zum Pfennig-Netzwerk + %n active connection(s) to pfennig network + %n aktive Verbindung zum pfennig-Netzwerk%n aktive Verbindungen zum pfennig-Netzwerk No block source available... @@ -559,8 +559,8 @@ Adresse: %4 Wallet ist <b>verschlüsselt</b> und aktuell <b>gesperrt</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Ein schwerer Fehler ist aufgetreten. Pfennig kann nicht stabil weiter ausgeführt werden und wird beendet. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Ein schwerer Fehler ist aufgetreten. pfennig kann nicht stabil weiter ausgeführt werden und wird beendet. @@ -844,8 +844,8 @@ Adresse: %4 Die eingegebene Adresse "%1" befindet sich bereits im Adressbuch. - The entered address "%1" is not a valid Pfennig address. - Die eingegebene Adresse "%1" ist keine gültige Pfennig-Adresse. + The entered address "%1" is not a valid pfennig address. + Die eingegebene Adresse "%1" ist keine gültige pfennig-Adresse. Could not unlock wallet. @@ -882,12 +882,12 @@ Adresse: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core - Kommandozeilenoptionen + pfennig Core - Command-line options + pfennig Core - Kommandozeilenoptionen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core version @@ -933,16 +933,16 @@ Adresse: %4 Willkommen - Welcome to Pfennig Core. - Willkommen zu Pfennig Core. + Welcome to pfennig Core. + Willkommen zu pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Da Sie das Programm gerade zum ersten Mal starten, können Sie nun auswählen wo Pfennig Core seine Daten ablegen soll. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Da Sie das Programm gerade zum ersten Mal starten, können Sie nun auswählen wo pfennig Core seine Daten ablegen soll. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. + pfennig 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 @@ -953,8 +953,8 @@ Adresse: %4 Ein benutzerdefiniertes Datenverzeichnis verwenden: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1015,12 +1015,12 @@ Adresse: %4 Transaktions&gebühr bezahlen - Automatically start Pfennig after logging in to the system. - Pfennig nach der Anmeldung am System automatisch ausführen. + Automatically start pfennig after logging in to the system. + pfennig nach der Anmeldung am System automatisch ausführen. - &Start Pfennig on system login - &Starte Pfennig nach Systemanmeldung + &Start pfennig on system login + &Starte pfennig nach Systemanmeldung Size of &database cache @@ -1035,8 +1035,8 @@ Adresse: %4 Anzahl an Skript-&Verifizierungs-Threads - Connect to the Pfennig network through a SOCKS proxy. - Über einen SOCKS-Proxy mit dem Pfennig-Netzwerk verbinden. + Connect to the pfennig network through a SOCKS proxy. + Über einen SOCKS-Proxy mit dem pfennig-Netzwerk verbinden. &Connect through SOCKS proxy (default proxy): @@ -1095,8 +1095,8 @@ Adresse: %4 &Unbestätigtes Wechselgeld darf ausgegeben werden - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Automatisch den Pfennig-Clientport auf dem Router öffnen. Dies funktioniert nur, wenn ihr Router UPnP unterstützt und dies aktiviert ist. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatisch den pfennig-Clientport auf dem Router öffnen. Dies funktioniert nur, wenn ihr Router UPnP unterstützt und dies aktiviert ist. Map port using &UPnP @@ -1151,8 +1151,8 @@ Adresse: %4 &Sprache der Benutzeroberfläche: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Legt die Sprache der Benutzeroberfläche fest. Diese Einstellung wird erst nach einem Neustart von Pfennig aktiv. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Legt die Sprache der Benutzeroberfläche fest. Diese Einstellung wird erst nach einem Neustart von pfennig aktiv. &Unit to show amounts in: @@ -1160,11 +1160,11 @@ Adresse: %4 Choose the default subdivision unit to show in the interface and when sending coins. - Wählen Sie die standardmäßige Untereinheit, die in der Benutzeroberfläche und beim Überweisen von Pfennigs angezeigt werden soll. + Wählen Sie die standardmäßige Untereinheit, die in der Benutzeroberfläche und beim Überweisen von pfennigs angezeigt werden soll. - Whether to show Pfennig addresses in the transaction list or not. - Legt fest, ob Pfennig-Adressen im Transaktionsverlauf angezeigt werden. + Whether to show pfennig addresses in the transaction list or not. + Legt fest, ob pfennig-Adressen im Transaktionsverlauf angezeigt werden. &Display addresses in transaction list @@ -1218,8 +1218,8 @@ Adresse: %4 Formular - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig network after a connection is established, but this process has not completed yet. - Die angezeigten Informationen sind möglicherweise nicht mehr aktuell. Ihre Wallet wird automatisch synchronisiert, nachdem eine Verbindung zum Pfennig-Netzwerk hergestellt wurde. Dieser Prozess ist jedoch derzeit noch nicht abgeschlossen. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig network after a connection is established, but this process has not completed yet. + Die angezeigten Informationen sind möglicherweise nicht mehr aktuell. Ihre Wallet wird automatisch synchronisiert, nachdem eine Verbindung zum pfennig-Netzwerk hergestellt wurde. Dieser Prozess ist jedoch derzeit noch nicht abgeschlossen. Wallet @@ -1273,8 +1273,8 @@ Adresse: %4 URI-Verarbeitung - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI kann nicht analysiert werden! Dies kann durch eine ungültige Pfennig-Adresse oder fehlerhafte URI-Parameter verursacht werden. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI kann nicht analysiert werden! Dies kann durch eine ungültige pfennig-Adresse oder fehlerhafte URI-Parameter verursacht werden. Requested payment amount of %1 is too small (considered dust). @@ -1340,8 +1340,8 @@ Adresse: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1356,12 +1356,12 @@ Adresse: %4 Fehler: Ungültige Kombination von -regtest und -testnet. - Pfennig Core didn't yet exit safely... - Pfennig Core wurde noch nicht sicher beendet... + pfennig Core didn't yet exit safely... + pfennig Core wurde noch nicht sicher beendet... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Pfennig-Adresse eingeben (z.B. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + pfennig-Adresse eingeben (z.B. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1482,16 +1482,16 @@ Adresse: %4 Debugprotokolldatei - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Öffnet die Pfennig-Debugprotokolldatei aus dem aktuellen Datenverzeichnis. Dies kann bei großen Protokolldateien einige Sekunden dauern. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Öffnet die pfennig-Debugprotokolldatei aus dem aktuellen Datenverzeichnis. Dies kann bei großen Protokolldateien einige Sekunden dauern. Clear console Konsole zurücksetzen - Welcome to the Pfennig RPC console. - Willkommen in der Pfennig-RPC-Konsole. + Welcome to the pfennig RPC console. + Willkommen in der pfennig-RPC-Konsole. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1553,8 +1553,8 @@ Adresse: %4 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 Pfennig 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 Pfennig-Netzwerk gesendet. + 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 pfennig 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 pfennig-Netzwerk gesendet. An optional label to associate with the new receiving address. @@ -1703,7 +1703,7 @@ Adresse: %4 SendCoinsDialog Send Coins - Pfennigs überweisen + pfennigs überweisen Coin Control Features @@ -1863,11 +1863,11 @@ Adresse: %4 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 Pfennigs aus ihrer Wallet bereits ausgegeben wurden. Beispielsweise weil Sie eine Kopie ihrer wallet.dat genutzt, die Pfennigs dort ausgegeben haben und dies daher in der derzeit aktiven Wallet nicht vermerkt ist. + Die Transaktion wurde abgelehnt! Dies kann passieren, wenn einige pfennigs aus ihrer Wallet bereits ausgegeben wurden. Beispielsweise weil Sie eine Kopie ihrer wallet.dat genutzt, die pfennigs dort ausgegeben haben und dies daher in der derzeit aktiven Wallet nicht vermerkt ist. - Warning: Invalid Pfennig address - Warnung: Ungültige Pfennig-Adresse + Warning: Invalid pfennig address + Warnung: Ungültige pfennig-Adresse (no label) @@ -1953,8 +1953,8 @@ Adresse: %4 Adressbezeichnung eingeben, die dann zusammen mit der Adresse der Liste bereits verwendeter Adressen hinzugefügt wird. - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. - Eine an die "pfennig:"-URI angefügte Nachricht, die zusammen mit der Transaktion gespeichert wird. Hinweis: Diese Nachricht wird nicht über das Pfennig-Netzwerk gesendet. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. + Eine an die "pfennig:"-URI angefügte Nachricht, die zusammen mit der Transaktion gespeichert wird. Hinweis: Diese Nachricht wird nicht über das pfennig-Netzwerk gesendet. This is an unverified payment request. @@ -1972,8 +1972,8 @@ Adresse: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig Core wird beendet... + pfennig Core is shutting down... + pfennig Core wird beendet... Do not shut down the computer until this window disappears. @@ -2027,8 +2027,8 @@ Adresse: %4 Aktuelle Signatur in die Zwischenablage kopieren - Sign the message to prove you own this Pfennig address - Die Nachricht signieren, um den Besitz dieser Pfennig-Adresse zu beweisen + Sign the message to prove you own this pfennig address + Die Nachricht signieren, um den Besitz dieser pfennig-Adresse zu beweisen Sign &Message @@ -2055,8 +2055,8 @@ Adresse: %4 Die Adresse mit der die Nachricht signiert wurde (z.B. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Die Nachricht verifizieren, um sicherzustellen, dass diese mit der angegebenen Pfennig-Adresse signiert wurde + Verify the message to ensure it was signed with the specified pfennig address + Die Nachricht verifizieren, um sicherzustellen, dass diese mit der angegebenen pfennig-Adresse signiert wurde Verify &Message @@ -2067,8 +2067,8 @@ Adresse: %4 Alle "Nachricht verifizieren"-Felder zurücksetzen - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Pfennig-Adresse eingeben (z.B. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + pfennig-Adresse eingeben (z.B. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2126,12 +2126,12 @@ Adresse: %4 SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core The Bitcoin Core Developers - Die "Pfennig Core"-Entwickler + Die "pfennig Core"-Entwickler [testnet] @@ -2245,7 +2245,7 @@ Adresse: %4 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 Pfennigs 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 Pfennigs gutgeschrieben bekommen. Das kann gelegentlich passieren, wenn ein anderer Knoten einen Block fast zeitgleich erzeugt. + Erzeugte pfennigs 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 pfennigs gutgeschrieben bekommen. Das kann gelegentlich passieren, wenn ein anderer Knoten einen Block fast zeitgleich erzeugt. Debug information @@ -2552,7 +2552,7 @@ Adresse: %4 WalletModel Send Coins - Pfennigs überweisen + pfennigs überweisen @@ -2621,8 +2621,8 @@ Adresse: %4 Datenverzeichnis festlegen - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - <port> nach Verbindungen abhören (Standard: P2PPORT oder Testnetz: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + <port> nach Verbindungen abhören (Standard: 40002 oder Testnetz: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2649,16 +2649,16 @@ Adresse: %4 Beim Einrichten des RPC-Ports %u zum Abhören von IPv4 ist ein Fehler aufgetreten: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - <port> nach JSON-RPC-Verbindungen abhören (Standard: RPCPORT oder Testnetz: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + <port> nach JSON-RPC-Verbindungen abhören (Standard: 40001 oder Testnetz: 50000) Accept command line and JSON-RPC commands Kommandozeilen- und JSON-RPC-Befehle annehmen - Pfennig Core RPC client version - "Pfennig Core"-RPC-Client-Version + pfennig Core RPC client version + "pfennig Core"-RPC-Client-Version Run in the background as a daemon and accept commands @@ -2682,7 +2682,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, Sie müssen den Wert rpcpasswort in dieser Konfigurationsdatei angeben: %s @@ -2693,7 +2693,7 @@ rpcpassword=%s Der Benutzername und das Passwort dürfen NICHT identisch sein. Falls die Konfigurationsdatei nicht existiert, erzeugen Sie diese bitte mit Leserechten nur für den Dateibesitzer. Es wird ebenfalls empfohlen alertnotify anzugeben, um im Problemfall benachrichtig zu werden; -zum Beispiel: alertnotify=echo %%s | mail -s \"Pfennig Alert\" admin@foo.com +zum Beispiel: alertnotify=echo %%s | mail -s \"pfennig Alert\" admin@foo.com @@ -2726,7 +2726,7 @@ zum Beispiel: alertnotify=echo %%s | mail -s \"Pfennig Alert\" admin@f 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 Pfennigs aus ihrer Wallet bereits ausgegeben wurden. Beispielsweise weil Sie eine Kopie ihrer wallet.dat genutzt, die Pfennigs dort ausgegeben haben und dies daher in der derzeit aktiven Wallet nicht vermerkt ist. + Fehler: Die Transaktion wurde abgelehnt! Dies kann passieren, wenn einige pfennigs aus ihrer Wallet bereits ausgegeben wurden. Beispielsweise weil Sie eine Kopie ihrer wallet.dat genutzt, die pfennigs 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! @@ -2765,8 +2765,8 @@ zum Beispiel: alertnotify=echo %%s | mail -s \"Pfennig Alert\" admin@f Dies ist eine Vorab-Testversion - Verwendung auf eigene Gefahr - nicht für Mining- oder Handelsanwendungen nutzen! - Unable to bind to %s on this computer. Pfennig Core is probably already running. - Kann auf diesem Computer nicht an %s binden, da Pfennig Core wahrscheinlich bereits gestartet wurde. + Unable to bind to %s on this computer. pfennig Core is probably already running. + Kann auf diesem Computer nicht an %s binden, da pfennig Core wahrscheinlich bereits gestartet wurde. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2777,8 +2777,8 @@ zum Beispiel: alertnotify=echo %%s | mail -s \"Pfennig Alert\" admin@f Warnung: -paytxfee ist auf einen sehr hohen Wert festgelegt! Dies ist die Gebühr die beim Senden einer Transaktion fällig wird. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Warnung: Bitte korrigieren Sie die Datums- und Uhrzeiteinstellungen ihres Computers, da Pfennig ansonsten nicht ordnungsgemäß funktionieren wird! + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Warnung: Bitte korrigieren Sie die Datums- und Uhrzeiteinstellungen ihres Computers, da pfennig ansonsten nicht ordnungsgemäß funktionieren wird! Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2813,8 +2813,8 @@ zum Beispiel: alertnotify=echo %%s | mail -s \"Pfennig Alert\" admin@f Versuchen, private Schlüssel aus einer beschädigten wallet.dat wiederherzustellen - Pfennig Core Daemon - "Pfennig Core"-Hintergrunddienst + pfennig Core Daemon + "pfennig Core"-Hintergrunddienst Block creation options: @@ -2833,8 +2833,8 @@ zum Beispiel: alertnotify=echo %%s | mail -s \"Pfennig Alert\" admin@f Über einen SOCKS-Proxy verbinden - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Mit JSON-RPC auf <port> verbinden (Standard: RPCPORT oder Testnetz: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Mit JSON-RPC auf <port> verbinden (Standard: 40001 oder Testnetz: 50000) Connection options: @@ -2954,7 +2954,7 @@ zum Beispiel: alertnotify=echo %%s | mail -s \"Pfennig Alert\" admin@f Generate coins (default: 0) - Pfennigs erzeugen (Standard: 0) + pfennigs erzeugen (Standard: 0) How many blocks to check at startup (default: 288, 0 = all) @@ -3057,8 +3057,8 @@ zum Beispiel: alertnotify=echo %%s | mail -s \"Pfennig Alert\" admin@f Blöcke aus externer Datei blk000??.dat importieren - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - Datenverzeichnis %s kann nicht gesperrt werden, da Pfennig Core wahrscheinlich bereits gestartet wurde. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + Datenverzeichnis %s kann nicht gesperrt werden, da pfennig 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) @@ -3121,8 +3121,8 @@ zum Beispiel: alertnotify=echo %%s | mail -s \"Pfennig Alert\" admin@f Blockbaum beim Starten ausgeben (Standard: 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) - RPC-SSL-Optionen (siehe Pfennig-Wiki für SSL-Einrichtung): + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) + RPC-SSL-Optionen (siehe pfennig-Wiki für SSL-Einrichtung): RPC server options: @@ -3141,12 +3141,12 @@ zum Beispiel: alertnotify=echo %%s | mail -s \"Pfennig Alert\" admin@f Einen Thread starten, der periodisch die Wallet sicher auf den Datenträger schreibt (Standard: 1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL-Optionen (siehe Pfennig-Wiki für SSL-Einrichtungssanweisungen): + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL-Optionen (siehe pfennig-Wiki für SSL-Einrichtungssanweisungen): - Send command to Pfennig Core - Befehl an Pfennig Core senden + Send command to pfennig Core + Befehl an pfennig Core senden Send trace/debug info to console instead of debug.log file @@ -3181,8 +3181,8 @@ zum Beispiel: alertnotify=echo %%s | mail -s \"Pfennig Alert\" admin@f Verbindungzeitüberschreitung in Millisekunden festlegen (Standard: 5000) - Start Pfennig Core Daemon - "Pfennig Core"-Hintergrunddienst starten + Start pfennig Core Daemon + "pfennig Core"-Hintergrunddienst starten System error: @@ -3297,12 +3297,12 @@ zum Beispiel: alertnotify=echo %%s | mail -s \"Pfennig Alert\" admin@f Fehler beim Laden von wallet.dat: Wallet beschädigt - Error loading wallet.dat: Wallet requires newer version of Pfennig - Fehler beim Laden von wallet.dat: Wallet benötigt neuere Version von Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Fehler beim Laden von wallet.dat: Wallet benötigt neuere Version von pfennig - Wallet needed to be rewritten: restart Pfennig to complete - Wallet musste neu geschrieben werden: starten Sie Pfennig zur Fertigstellung neu + Wallet needed to be rewritten: restart pfennig to complete + Wallet musste neu geschrieben werden: starten Sie pfennig zur Fertigstellung neu Error loading wallet.dat diff --git a/src/qt/locale/bitmark_de.ts~ b/src/qt/locale/bitmark_de.ts~ new file mode 100644 index 0000000..d778d6f --- /dev/null +++ b/src/qt/locale/bitmark_de.ts~ @@ -0,0 +1,3388 @@ + + + AboutDialog + + About GameCredits Core + Über GameCredits Core + + + <b>GameCredits Core</b> version + <b>"GameCredits 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. + +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 (https://www.openssl.org) entwickelt wird, sowie von Eric Young (eay@cryptsoft.com) geschriebene kryptographische Software und von Thomas Bernard geschriebene UPnP-Software. + + + Copyright + Urheberrecht + + + The Bitcoin Core Developers + Die "GameCredits Core"-Entwickler + + + (%1-bit) + (%1-Bit) + + + + AddressBookPage + + Double-click to edit address or label + 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 + + + &Copy + &Kopieren + + + C&lose + &Schließen + + + &Copy Address + Adresse &kopieren + + + Delete the currently selected address from the list + 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 + + + &Delete + &Löschen + + + Choose the address to send coins to + Wählen Sie die Adresse aus, an die Sie GameCreditss überweisen möchten + + + Choose the address to receive coins with + Wählen Sie die Adresse aus, über die Sie GameCreditss empfangen wollen + + + C&hoose + &Auswählen + + + Sending addresses + Zahlungsadressen + + + Receiving addresses + Empfangsadressen + + + These are your GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Dies sind ihre GameCredits-Adressen zum Tätigen von Überweisungen. Bitte prüfen Sie den Betrag und die Empfangsadresse, bevor Sie GameCreditss überweisen. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Dies sind ihre GameCredits-Adressen zum Empfangen von Zahlungen. Es wird empfohlen für jede Transaktion eine neue Empfangsadresse zu verwenden. + + + Copy &Label + &Bezeichnung kopieren + + + &Edit + &Editieren + + + Export Address List + Addressliste exportieren + + + Comma separated file (*.csv) + Kommagetrennte-Datei (*.csv) + + + Exporting Failed + Exportieren fehlgeschlagen + + + 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) + + + + 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 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 + Wallet verschlüsseln + + + This operation needs your wallet passphrase to unlock the wallet. + Dieser Vorgang benötigt ihre Passphrase, um die Wallet zu entsperren. + + + Unlock wallet + Wallet entsperren + + + This operation needs your wallet passphrase to decrypt the wallet. + Dieser Vorgang benötigt ihre Passphrase, um die Wallet zu entschlüsseln. + + + Decrypt wallet + Wallet entschlüsseln + + + Change passphrase + Passphrase ändern + + + Enter the old and new passphrase to the wallet. + Geben Sie die alte und neue Wallet-Passphrase ein. + + + Confirm wallet encryption + Wallet-Verschlüsselung bestätigen + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR GameCreditsS</b>! + Warnung: Wenn Sie ihre Wallet verschlüsseln und ihre Passphrase verlieren, werden Sie <b>alle ihre GameCreditss verlieren</b>! + + + Are you sure you wish to encrypt your wallet? + 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 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 + Wallet verschlüsselt + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits wird jetzt beendet, um den Verschlüsselungsprozess abzuschließen. Bitte beachten Sie, dass die Wallet-Verschlüsselung nicht vollständig vor Diebstahl ihrer GameCreditss durch Schadsoftware schützt, die ihren Computer befällt. + + + Wallet encryption failed + Wallet-Verschlüsselung fehlgeschlagen + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + 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 + Wallet-Entsperrung fehlgeschlagen + + + The passphrase entered for the wallet decryption was incorrect. + Die eingegebene Passphrase zur Wallet-Entschlüsselung war nicht korrekt. + + + Wallet decryption failed + Wallet-Entschlüsselung fehlgeschlagen + + + Wallet passphrase was successfully changed. + Die Wallet-Passphrase wurde erfolgreich geändert. + + + + GameCreditsGUI + + Sign &message... + Nachricht s&ignieren... + + + Synchronizing with network... + Synchronisiere mit Netzwerk... + + + &Overview + &Übersicht + + + Node + Knoten + + + Show general overview of wallet + Allgemeine Wallet-Übersicht anzeigen + + + &Transactions + &Transaktionen + + + Browse transaction history + Transaktionsverlauf durchsehen + + + E&xit + &Beenden + + + Quit application + Anwendung beenden + + + Show information about GameCredits + Informationen über GameCredits anzeigen + + + About &Qt + Über &Qt + + + Show information about Qt + Informationen über Qt anzeigen + + + &Options... + &Konfiguration... + + + &Encrypt Wallet... + Wallet &verschlüsseln... + + + &Backup Wallet... + Wallet &sichern... + + + &Change Passphrase... + Passphrase &ändern... + + + &Sending addresses... + &Zahlungsadressen... + + + &Receiving addresses... + &Empfangsadressen... + + + Open &URI... + &URI öffnen... + + + Importing blocks from disk... + Importiere Blöcke von Datenträger... + + + Reindexing blocks on disk... + Reindiziere Blöcke auf Datenträger... + + + Send coins to a GameCredits address + GameCreditss an eine GameCredits-Adresse überweisen + + + Modify configuration options for GameCredits + Die Konfiguration des Clients bearbeiten + + + Backup wallet to another location + Eine Wallet-Sicherungskopie erstellen und abspeichern + + + Change the passphrase used for wallet encryption + Ä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... + + + GameCredits + GameCredits + + + Wallet + Wallet + + + &Send + &Überweisen + + + &Receive + &Empfangen + + + &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 Wallet gehörenden privaten Schlüssel + + + Sign messages with your GameCredits addresses to prove you own them + Nachrichten signieren, um den Besitz ihrer GameCredits-Adressen zu beweisen + + + Verify messages to ensure they were signed with specified GameCredits addresses + Nachrichten verifizieren, um sicherzustellen, dass diese mit den angegebenen GameCredits-Adressen signiert wurden + + + &File + &Datei + + + &Settings + &Einstellungen + + + &Help + &Hilfe + + + Tabs toolbar + Registerkartenleiste + + + [testnet] + [Testnetz] + + + GameCredits Core + GameCredits Core + + + Request payments (generates QR codes and gamecredits: URIs) + Zahlungen anfordern (erzeugt QR-Codes und "gamecredits:"-URIs) + + + &About GameCredits Core + &Über GameCredits 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 gamecredits: URI or payment request + Eine "gamecredits:"-URI oder Zahlungsanforderung öffnen + + + &Command-line options + &Kommandozeilenoptionen + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Zeige den "GameCredits Core"-Hilfetext, um eine Liste mit möglichen Kommandozeilenoptionen zu erhalten + + + GameCredits client + GameCredits-Client + + + %n active connection(s) to GameCredits network + %n aktive Verbindung zum GameCredits-Netzwerk%n aktive Verbindungen zum GameCredits-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 + + + Up to date + Auf aktuellem Stand + + + Catching up... + Hole auf... + + + Sent transaction + Gesendete Transaktion + + + Incoming transaction + Eingehende Transaktion + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Datum: %1 +Betrag: %2 +Typ: %3 +Adresse: %4 + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + Wallet ist <b>verschlüsselt</b> und aktuell <b>entsperrt</b> + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + Wallet ist <b>verschlüsselt</b> und aktuell <b>gesperrt</b> + + + A fatal error occurred. GameCredits can no longer continue safely and will quit. + Ein schwerer Fehler ist aufgetreten. GameCredits kann nicht stabil weiter ausgeführt werden und wird beendet. + + + + 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 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 + + + 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 GameCredits address. + Die eingegebene Adresse "%1" ist keine gültige GameCredits-Adresse. + + + Could not unlock wallet. + Wallet konnte nicht entsperrt werden. + + + New key generation failed. + Erzeugung eines neuen Schlüssels fehlgeschlagen. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + GameCredits Core - Kommandozeilenoptionen + + + GameCredits Core + GameCredits 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: 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 GameCredits Core. + Willkommen zu GameCredits Core. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Da Sie das Programm gerade zum ersten Mal starten, können Sie nun auswählen wo GameCredits Core seine Daten ablegen soll. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits 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: + + + GameCredits + GameCredits + + + 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 + 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ß. + + + Pay transaction &fee + Transaktions&gebühr bezahlen + + + Automatically start GameCredits after logging in to the system. + GameCredits nach der Anmeldung am System automatisch ausführen. + + + &Start GameCredits on system login + &Starte GameCredits 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 GameCredits network through a SOCKS proxy. + Über einen SOCKS-Proxy mit dem GameCredits-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 + + + (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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Automatisch den GameCredits-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 + + + Proxy &IP: + Proxy-&IP: + + + &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 + Anzei&ge + + + User Interface &language: + &Sprache der Benutzeroberfläche: + + + The user interface language can be set here. This setting will take effect after restarting GameCredits. + Legt die Sprache der Benutzeroberfläche fest. Diese Einstellung wird erst nach einem Neustart von GameCredits 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 standardmäßige Untereinheit, die in der Benutzeroberfläche und beim Überweisen von GameCreditss angezeigt werden soll. + + + Whether to show GameCredits addresses in the transaction list or not. + Legt fest, ob GameCredits-Adressen im Transaktionsverlauf angezeigt werden. + + + &Display addresses in transaction list + Adressen im Transaktionsverlauf &anzeigen + + + Whether to show coin control features or not. + Legt fest, ob die "Coin Control"-Funktionen angezeigt werden. + + + &OK + &OK + + + &Cancel + A&bbrechen + + + default + Standard + + + none + keine + + + Confirm options reset + Zurücksetzen der Konfiguration bestätigen + + + Client restart required to activate changes. + Clientneustart nötig, um die Änderungen zu aktivieren. + + + Client will be shutdown, do you want to proceed? + Client wird beendet, wollen Sie fortfahren? + + + This change would require a client restart. + Diese Änderung würde einen Clientneustart benötigen. + + + The supplied proxy address is invalid. + Die eingegebene Proxyadresse ist ungültig. + + + + OverviewPage + + Form + Formular + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits network after a connection is established, but this process has not completed yet. + Die angezeigten Informationen sind möglicherweise nicht mehr aktuell. Ihre Wallet wird automatisch synchronisiert, nachdem eine Verbindung zum GameCredits-Netzwerk hergestellt wurde. Dieser Prozess ist jedoch derzeit noch nicht abgeschlossen. + + + Wallet + 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> + + + out of sync + nicht synchron + + + + PaymentServer + + URI handling + URI-Verarbeitung + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + URI kann nicht analysiert werden! Dies kann durch eine ungültige GameCredits-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 gamecredits: click-to-pay handler + "gamecredits: 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 + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Fehler: Angegebenes Datenverzeichnis "%1" existiert nicht. + + + 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. + + + Error: Invalid combination of -regtest and -testnet. + Fehler: Ungültige Kombination von -regtest und -testnet. + + + GameCredits Core didn't yet exit safely... + GameCredits Core wurde noch nicht sicher beendet... + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + GameCredits-Adresse eingeben (z.B. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + Grafik &speichern... + + + &Copy Image + Grafik &kopieren + + + Save QR Code + QR-Code speichern + + + PNG Image (*.png) + PNG-Grafik (*.png) + + + + RPCConsole + + Client name + Clientname + + + N/A + 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 + + + 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 + + + &Console + &Konsole + + + &Network Traffic + &Netzwerkauslastung + + + &Clear + &Zurücksetzen + + + Totals + Summen + + + In: + eingehend: + + + Out: + ausgehend: + + + Build date + Erstellungsdatum + + + Debug log file + Debugprotokolldatei + + + Open the GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Öffnet die GameCredits-Debugprotokolldatei aus dem aktuellen Datenverzeichnis. Dies kann bei großen Protokolldateien einige Sekunden dauern. + + + Clear console + Konsole zurücksetzen + + + Welcome to the GameCredits RPC console. + Willkommen in der GameCredits-RPC-Konsole. + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + 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 GameCredits 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 GameCredits-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 + GameCreditss ü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 + An mehrere Empfänger auf einmal überweisen + + + Add &Recipient + Empfänger &hinzufügen + + + Clear all fields of the form. + Alle Formularfelder zurücksetzen. + + + Clear &All + &Zurücksetzen + + + Balance: + Kontostand: + + + Confirm the send action + Überweisung bestätigen + + + S&end + &Überweisen + + + Confirm send coins + Überweisung bestätigen + + + %1 to %2 + %1 an %2 + + + 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. + + + 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. + + + Duplicate address found, can only send to each address once per send operation. + Doppelte Zahlungsadresse gefunden, pro Überweisung kann an jede Adresse nur einmalig etwas überwiesen werden. + + + Transaction creation failed! + Transaktionserstellung fehlgeschlagen! + + + 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 GameCreditss aus ihrer Wallet bereits ausgegeben wurden. Beispielsweise weil Sie eine Kopie ihrer wallet.dat genutzt, die GameCreditss dort ausgegeben haben und dies daher in der derzeit aktiven Wallet nicht vermerkt ist. + + + Warning: Invalid GameCredits address + Warnung: Ungültige GameCredits-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 + + A&mount: + Betra&g: + + + Pay &To: + E&mpfänger: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Die Zahlungsadresse der Überweisung (z.B. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + Diesen Eintrag entfernen + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + Eine an die "gamecredits:"-URI angefügte Nachricht, die zusammen mit der Transaktion gespeichert wird. Hinweis: Diese Nachricht wird nicht über das GameCredits-Netzwerk gesendet. + + + This is an unverified payment request. + Dies is eine unverifizierte Zahlungsanforderung. + + + Pay To: + Empfänger: + + + Memo: + Memo: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits 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. + + + The address to sign the message with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Die Adresse mit der die Nachricht signiert wird (z.B. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Die Nachricht signieren, um den Besitz dieser GameCredits-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 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Die Adresse mit der die Nachricht signiert wurde (z.B. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Die Nachricht verifizieren, um sicherzustellen, dass diese mit der angegebenen GameCredits-Adresse signiert wurde + + + Verify &Message + &Nachricht verifizieren + + + Reset all verify message fields + Alle "Nachricht verifizieren"-Felder zurücksetzen + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + GameCredits-Adresse eingeben (z.B. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Auf "Nachricht signieren" klicken, um die Signatur zu erzeugen + + + 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. + 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". + + + Message verification failed. + Verifikation der Nachricht fehlgeschlagen. + + + Message verified. + Nachricht verifiziert. + + + + SplashScreen + + GameCredits Core + GameCredits Core + + + The Bitcoin Core Developers + Die "GameCredits 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 + 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 + + + Comment + Kommentar + + + Transaction ID + Transaktions-ID + + + 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 GameCreditss 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 GameCreditss 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 + + + + TransactionDescDialog + + Transaction details + Transaktionsdetails + + + This pane shows a detailed description of the transaction + Dieser Bereich zeigt eine detaillierte Beschreibung der Transaktion an + + + + 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 + + + Confirmed (%1 confirmations) + Bestätigt (%1 Bestätigungen) + + + 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 + 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. + + + Date and time that the transaction was received. + 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. + + + + 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 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 + + + Range: + Zeitraum: + + + to + bis + + + + WalletFrame + + No wallet has been loaded. + Es wurde keine Wallet geladen. + + + + WalletModel + + Send Coins + GameCreditss ü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 + Wallet sichern + + + Wallet Data (*.dat) + Wallet-Daten (*.dat) + + + Backup Failed + Sicherung fehlgeschlagen + + + 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 + + + + gamecredits-core + + Usage: + Benutzung: + + + List commands + Befehle auflisten + + + Get help for a command + Hilfe zu einem Befehl erhalten + + + Options: + Optionen: + + + Specify configuration file (default: gamecredits.conf) + Konfigurationsdatei festlegen (Standard: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + PID-Datei festlegen (Standard: gamecreditsd.pid) + + + Specify data directory + Datenverzeichnis festlegen + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + <port> nach Verbindungen abhören (Standard: 40002 oder Testnetz: 50001) + + + 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 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 RPC-Ports %u zum Abhören von IPv4 ist ein Fehler aufgetreten: %s + + + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + <port> nach JSON-RPC-Verbindungen abhören (Standard: 40001 oder Testnetz: 50000) + + + Accept command line and JSON-RPC commands + Kommandozeilen- und JSON-RPC-Befehle annehmen + + + GameCredits Core RPC client version + "GameCredits Core"-RPC-Client-Version + + + Run in the background as a daemon and accept commands + 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, Sie müssen den Wert rpcpasswort in dieser Konfigurationsdatei angeben: +%s +Es wird empfohlen das folgende Zufallspasswort zu verwenden: +rpcuser=gamecreditsrpc +rpcpassword=%s +(Sie müssen sich dieses Passwort nicht merken!) +Der Benutzername und das Passwort dürfen NICHT identisch sein. +Falls die Konfigurationsdatei nicht existiert, erzeugen Sie diese bitte mit Leserechten nur für den Dateibesitzer. +Es wird ebenfalls empfohlen alertnotify anzugeben, um im Problemfall benachrichtig zu werden; +zum Beispiel: alertnotify=echo %%s | mail -s \"GameCredits Alert\" admin@foo.com + + + + 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 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 + + + 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 GameCreditss aus ihrer Wallet bereits ausgegeben wurden. Beispielsweise weil Sie eine Kopie ihrer wallet.dat genutzt, die GameCreditss 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 erst kürzlich erhaltener Zahlungen eine Transaktionsgebühr in Höhe von mindestens %s! + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Befehl ausführen wenn sich eine Wallet-Transaktion verändert (%s im Befehl wird durch die TxID ersetzt) + + + 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. GameCredits Core is probably already running. + Kann auf diesem Computer nicht an %s binden, da GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Warnung: Bitte korrigieren Sie die Datums- und Uhrzeiteinstellungen ihres Computers, da GameCredits 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, 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 + Versuchen, private Schlüssel aus einer beschädigten wallet.dat wiederherzustellen + + + GameCredits Core Daemon + "GameCredits Core"-Hintergrunddienst + + + Block creation options: + Blockerzeugungsoptionen: + + + 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: 40001 or testnet: 50000) + Mit JSON-RPC auf <port> verbinden (Standard: 40001 oder Testnetz: 50000) + + + 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 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 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 Speicherplatz auf dem Datenträger! + + + Error: Wallet locked, unable to create transaction! + 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-Abfrage finden (Standard: 1, außer bei -connect) + + + Force safe mode (default: 0) + Sicherheitsmodus erzwingen (Standard: 0) + + + Generate coins (default: 0) + GameCreditss erzeugen (Standard: 0) + + + How many blocks to check at startup (default: 288, 0 = all) + Wieviele Blöcke beim Starten geprüft werden sollen (Standard: 288, 0 = alle) + + + 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 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 gamecredits-cli): + Benutzung (veraltet, bitte gamecredits-cli verwenden): + + + Verifying blocks... + Verifiziere Blöcke... + + + Verifying wallet... + 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 + + + Cannot obtain a lock on data directory %s. GameCredits Core is probably already running. + Datenverzeichnis %s kann nicht gesperrt werden, da GameCredits 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 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 führen (Standard: 0) + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 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 des Sendepuffers pro Verbindung, <n> * 1000 Byte (Standard: 1000) + + + Only accept block chain matching built-in checkpoints (default: 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) + + + Print block on startup, if found in block index + Block beim Starten ausgeben, wenn dieser im Blockindex gefunden wurde. + + + Print block tree on startup (default: 0) + Blockbaum beim Starten ausgeben (Standard: 0) + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + RPC-SSL-Optionen (siehe GameCredits-Wiki für SSL-Einrichtung): + + + RPC server options: + RPC-Serveroptionen: + + + 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 GameCredits Wiki for SSL setup instructions) + SSL-Optionen (siehe GameCredits-Wiki für SSL-Einrichtungssanweisungen): + + + Send command to GameCredits Core + Befehl an GameCredits Core senden + + + Send trace/debug info to console instead of debug.log file + Rückverfolgungs- und Debuginformationen an die Konsole senden, anstatt sie in debug.log zu schreiben + + + Set minimum block size in bytes (default: 0) + Minimale Blockgröße in Byte festlegen (Standard: 0) + + + 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) + Verbindungzeitüberschreitung in Millisekunden festlegen (Standard: 5000) + + + Start GameCredits Core Daemon + "GameCredits Core"-Hintergrunddienst starten + + + System error: + Systemfehler: + + + Transaction amount too small + 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 eine Portweiterleitung einzurichten (Standard: 0) + + + Use UPnP to map the listening port (default: 1 when listening) + UPnP verwenden, um eine Portweiterleitung einzurichten (Standard: 1, wenn abgehört wird) + + + 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! + + + 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, 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) + Befehl ausführen wenn der beste Block wechselt (%s im Befehl wird durch den Hash des Blocks ersetzt) + + + Upgrade wallet to latest format + 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 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) + + + 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) + + + Allow DNS lookups for -addnode, -seednode and -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: Wallet beschädigt + + + Error loading wallet.dat: Wallet requires newer version of GameCredits + Fehler beim Laden von wallet.dat: Wallet benötigt neuere Version von GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + Wallet musste neu geschrieben werden: starten Sie GameCredits zur Fertigstellung neu + + + Error loading wallet.dat + 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 angegebenen Knoten verbinden und versuchen die Verbindung aufrecht zu erhalten + + + Loading wallet... + Lade Wallet... + + + Cannot downgrade wallet + 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 + + + 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. + Sie müssen den Wert rpcpassword=<passwort> in der Konfigurationsdatei angeben: +%s +Falls die Konfigurationsdatei nicht existiert, erzeugen Sie diese bitte mit Leserechten nur für den Dateibesitzer. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_el_GR.ts b/src/qt/locale/bitmark_el_GR.ts index 4d8daa0..4e36b0b 100644 --- a/src/qt/locale/bitmark_el_GR.ts +++ b/src/qt/locale/bitmark_el_GR.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Σχετικά με το Pfennig Core + About pfennig Core + Σχετικά με το pfennig Core - <b>Pfennig Core</b> version - <b>Pfennig Core</b> έκδοση + <b>pfennig Core</b> version + <b>pfennig Core</b> έκδοση @@ -29,7 +29,7 @@ This product includes software developed by the OpenSSL Project for use in the O The Bitcoin Core Developers - Οι προγραμματιστές του Pfennig Core + Οι προγραμματιστές του pfennig Core (%1-bit) @@ -103,11 +103,11 @@ This product includes software developed by the OpenSSL Project for use in the O Διευθύνσεις λήψης - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Αυτές είναι οι Pfennig διευθύνσεις σας για να λαμβάνετε πληρωμές. Δίνοντας μία ξεχωριστή διεύθυνση σε κάθε αποστολέα, θα μπορείτε να ελέγχετε ποιος σας πληρώνει. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Αυτές είναι οι pfennig διευθύνσεις σας για να λαμβάνετε πληρωμές. Δίνοντας μία ξεχωριστή διεύθυνση σε κάθε αποστολέα, θα μπορείτε να ελέγχετε ποιος σας πληρώνει. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -205,8 +205,8 @@ This product includes software developed by the OpenSSL Project for use in the O Επιβεβαίωσε την κρυπτογραφηση του πορτοφολιού - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Προσοχη: Εαν κρυπτογραφησεις το πορτοφολι σου και χάσεις τον κωδικο σου θα χάσεις <b> ΟΛΑ ΣΟΥ ΤΑ PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Προσοχη: Εαν κρυπτογραφησεις το πορτοφολι σου και χάσεις τον κωδικο σου θα χάσεις <b> ΟΛΑ ΣΟΥ ΤΑ pfennigS</b>! Είσαι σίγουρος ότι θέλεις να κρυπτογραφησεις το πορτοφολι; @@ -226,8 +226,8 @@ This product includes software developed by the OpenSSL Project for use in the O Κρυπτογραφημενο πορτοφολι - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Το Pfennig θα κλεισει τώρα για να τελειώσει την διαδικασία κρυπτογραφησης. Θυμησου ότι κρυπτογραφώντας το πορτοφολι σου δεν μπορείς να προστατέψεις πλήρως τα pfennigs σου από κλοπή στην περίπτωση όπου μολυνθεί ο υπολογιστής σου με κακόβουλο λογισμικό. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + Το pfennig θα κλεισει τώρα για να τελειώσει την διαδικασία κρυπτογραφησης. Θυμησου ότι κρυπτογραφώντας το πορτοφολι σου δεν μπορείς να προστατέψεις πλήρως τα pfennigs σου από κλοπή στην περίπτωση όπου μολυνθεί ο υπολογιστής σου με κακόβουλο λογισμικό. Wallet encryption failed @@ -259,7 +259,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... Υπογραφή &Μηνύματος... @@ -297,8 +297,8 @@ This product includes software developed by the OpenSSL Project for use in the O Εξοδος από την εφαρμογή - Show information about Pfennig - Εμφάνιση πληροφοριών σχετικά με το Pfennig + Show information about pfennig + Εμφάνιση πληροφοριών σχετικά με το pfennig About &Qt @@ -345,12 +345,12 @@ This product includes software developed by the OpenSSL Project for use in the O Φόρτωση ευρετηρίου μπλοκ στον σκληρο δισκο... - Send coins to a Pfennig address + Send coins to a pfennig address Στείλε νομίσματα σε μια διεύθυνση pfennig - Modify configuration options for Pfennig - Επεργασία ρυθμισεων επιλογών για το Pfennig + Modify configuration options for pfennig + Επεργασία ρυθμισεων επιλογών για το pfennig Backup wallet to another location @@ -373,8 +373,8 @@ This product includes software developed by the OpenSSL Project for use in the O &Επιβεβαίωση μηνύματος - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -401,12 +401,12 @@ This product includes software developed by the OpenSSL Project for use in the O Κρυπτογραφήστε τα ιδιωτικά κλειδιά που ανήκουν στο πορτοφόλι σας - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them Υπογράψτε ένα μήνυμα για να βεβαιώσετε πως είστε ο κάτοχος αυτής της διεύθυνσης - Verify messages to ensure they were signed with specified Pfennig addresses - Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως ανήκει μια συγκεκριμένη διεύθυνση Pfennig + Verify messages to ensure they were signed with specified pfennig addresses + Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως ανήκει μια συγκεκριμένη διεύθυνση pfennig &File @@ -429,16 +429,16 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core Request payments (generates QR codes and pfennig: URIs) Αίτηση πληρωμών (δημιουργεί QR codes και διευθύνσεις pfennig: ) - &About Pfennig Core - &Σχετικά με το Pfennig Core + &About pfennig Core + &Σχετικά με το pfennig Core Show the list of used sending addresses and labels @@ -457,16 +457,16 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Πελάτης Pfennig + pfennig client + Πελάτης pfennig - %n active connection(s) to Pfennig network - %n ενεργή σύνδεση στο δίκτυο Pfennig%n ενεργές συνδέσεις στο δίκτυο Βitcoin + %n active connection(s) to pfennig network + %n ενεργή σύνδεση στο δίκτυο pfennig%n ενεργές συνδέσεις στο δίκτυο Βitcoin No block source available... @@ -561,8 +561,8 @@ Address: %4 Το πορτοφόλι είναι <b>κρυπτογραφημένο</b> και <b>κλειδωμένο</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Παρουσιάστηκε ανεπανόρθωτο σφάλμα. Το Pfennig δεν μπορεί πλέον να συνεχίσει με ασφάλεια και θα τερματισθει. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Παρουσιάστηκε ανεπανόρθωτο σφάλμα. Το pfennig δεν μπορεί πλέον να συνεχίσει με ασφάλεια και θα τερματισθει. @@ -847,8 +847,8 @@ Address: %4 Η διεύθυνση "%1" βρίσκεται ήδη στο βιβλίο διευθύνσεων. - The entered address "%1" is not a valid Pfennig address. - Η διεύθυνση "%1" δεν είναι έγκυρη Pfennig διεύθυνση. + The entered address "%1" is not a valid pfennig address. + Η διεύθυνση "%1" δεν είναι έγκυρη pfennig διεύθυνση. Could not unlock wallet. @@ -885,12 +885,12 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core version @@ -936,15 +936,15 @@ Address: %4 Καλώς ήρθατε - Welcome to Pfennig Core. - Καλώς ήρθατε στο Pfennig Core. + Welcome to pfennig Core. + Καλώς ήρθατε στο pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Καθώς αυτή είναι η πρώτη φορά που εκκινείται το πρόγραμμα, μπορείτε να διαλέξετε πού θα αποθηκεύει το Pfennig Core τα δεδομένα του. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Καθώς αυτή είναι η πρώτη φορά που εκκινείται το πρόγραμμα, μπορείτε να διαλέξετε πού θα αποθηκεύει το pfennig Core τα δεδομένα του. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -956,8 +956,8 @@ Address: %4 Προσαρμογή του φακέλου δεδομένων: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1018,11 +1018,11 @@ Address: %4 Αμοιβή &συναλλαγής - Automatically start Pfennig after logging in to the system. - Αυτόματη εκκίνηση του Pfennig μετά την εισαγωγή στο σύστημα + Automatically start pfennig after logging in to the system. + Αυτόματη εκκίνηση του pfennig μετά την εισαγωγή στο σύστημα - &Start Pfennig on system login + &Start pfennig on system login &Έναρξη του Βιtcoin κατά την εκκίνηση του συστήματος @@ -1038,7 +1038,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1098,8 +1098,8 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Αυτόματο άνοιγμα των θυρών Pfennig στον δρομολογητή. Λειτουργεί μόνο αν ο δρομολογητής σας υποστηρίζει τη λειτουργία UPnP. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Αυτόματο άνοιγμα των θυρών pfennig στον δρομολογητή. Λειτουργεί μόνο αν ο δρομολογητής σας υποστηρίζει τη λειτουργία UPnP. Map port using &UPnP @@ -1154,8 +1154,8 @@ Address: %4 Γλώσσα περιβάλλοντος εργασίας: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Εδώ μπορεί να ρυθμιστεί η γλώσσα διεπαφής χρήστη. Αυτή η ρύθμιση θα ισχύσει μετά την επανεκκίνηση του Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Εδώ μπορεί να ρυθμιστεί η γλώσσα διεπαφής χρήστη. Αυτή η ρύθμιση θα ισχύσει μετά την επανεκκίνηση του pfennig. &Unit to show amounts in: @@ -1166,8 +1166,8 @@ Address: %4 Διαλέξτε την προεπιλεγμένη υποδιαίρεση που θα εμφανίζεται όταν στέλνετε νομίσματα. - Whether to show Pfennig addresses in the transaction list or not. - Επιλέξτε αν θέλετε να εμφανίζονται οι διευθύνσεις Pfennig στη λίστα συναλλαγών. + Whether to show pfennig addresses in the transaction list or not. + Επιλέξτε αν θέλετε να εμφανίζονται οι διευθύνσεις pfennig στη λίστα συναλλαγών. &Display addresses in transaction list @@ -1221,8 +1221,8 @@ Address: %4 Φόρμα - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig network after a connection is established, but this process has not completed yet. - Οι πληροφορίες που εμφανίζονται μπορεί να είναι ξεπερασμένες. Το πορτοφόλι σας συγχρονίζεται αυτόματα με το δίκτυο Pfennig μετά από μια σύνδεση, αλλά αυτή η διαδικασία δεν έχει ακόμη ολοκληρωθεί. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig network after a connection is established, but this process has not completed yet. + Οι πληροφορίες που εμφανίζονται μπορεί να είναι ξεπερασμένες. Το πορτοφόλι σας συγχρονίζεται αυτόματα με το δίκτυο pfennig μετά από μια σύνδεση, αλλά αυτή η διαδικασία δεν έχει ακόμη ολοκληρωθεί. Wallet @@ -1276,8 +1276,8 @@ Address: %4 Χειρισμός URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - Το URI δεν μπορεί να αναλυθεί! Αυτό μπορεί να προκληθεί από μια μη έγκυρη διεύθυνση Pfennig ή ακατάλληλη παραμέτρο URI. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + Το URI δεν μπορεί να αναλυθεί! Αυτό μπορεί να προκληθεί από μια μη έγκυρη διεύθυνση pfennig ή ακατάλληλη παραμέτρο URI. Requested payment amount of %1 is too small (considered dust). @@ -1289,7 +1289,7 @@ Address: %4 Cannot start pfennig: click-to-pay handler - Δεν είναι δυνατή η εκκίνηση του Pfennig: click-to-pay handler + Δεν είναι δυνατή η εκκίνηση του pfennig: click-to-pay handler Net manager warning @@ -1343,8 +1343,8 @@ Address: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1359,12 +1359,12 @@ Address: %4 Σφάλμα: Άκυρος συνδυασμός των -regtest και -testnet - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Εισάγετε μια διεύθυνση Pfennig (π.χ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Εισάγετε μια διεύθυνση pfennig (π.χ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1485,7 +1485,7 @@ Address: %4 Αρχείο καταγραφής εντοπισμού σφαλμάτων - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. Ανοίξτε το αρχείο καταγραφής εντοπισμού σφαλμάτων από τον τρέχοντα κατάλογο δεδομένων. Αυτό μπορεί να πάρει μερικά δευτερόλεπτα για τα μεγάλα αρχεία καταγραφής. @@ -1493,8 +1493,8 @@ Address: %4 Καθαρισμός κονσόλας - Welcome to the Pfennig RPC console. - Καλώς ήρθατε στην Pfennig RPC κονσόλα. + Welcome to the pfennig RPC console. + Καλώς ήρθατε στην pfennig RPC κονσόλα. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1556,7 +1556,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1869,8 +1869,8 @@ Address: %4 - Warning: Invalid Pfennig address - Προειδοποίηση: Μη έγκυρη διεύθυνση Pfennig + Warning: Invalid pfennig address + Προειδοποίηση: Μη έγκυρη διεύθυνση pfennig (no label) @@ -1956,7 +1956,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1975,8 +1975,8 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... - Το Pfennig Core τερματίζεται... + pfennig Core is shutting down... + Το pfennig Core τερματίζεται... Do not shut down the computer until this window disappears. @@ -1999,7 +1999,7 @@ Address: %4 The address to sign the message with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Εισάγετε μια διεύθυνση Pfennig (π.χ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Εισάγετε μια διεύθυνση pfennig (π.χ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Choose previously used address @@ -2030,8 +2030,8 @@ Address: %4 Αντέγραφη της επιλεγμενης διεύθυνσης στο πρόχειρο του συστηματος - Sign the message to prove you own this Pfennig address - Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως σας ανήκει μια συγκεκριμένη διεύθυνση Pfennig + Sign the message to prove you own this pfennig address + Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως σας ανήκει μια συγκεκριμένη διεύθυνση pfennig Sign &Message @@ -2055,11 +2055,11 @@ Address: %4 The address the message was signed with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Εισάγετε μια διεύθυνση Pfennig (π.χ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Εισάγετε μια διεύθυνση pfennig (π.χ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως υπογραφθηκε απο μια συγκεκριμένη διεύθυνση Pfennig + Verify the message to ensure it was signed with the specified pfennig address + Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως υπογραφθηκε απο μια συγκεκριμένη διεύθυνση pfennig Verify &Message @@ -2070,8 +2070,8 @@ Address: %4 Επαναφορά όλων επαλήθευμενων πεδίων μήνυματος - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Εισάγετε μια διεύθυνση Pfennig (π.χ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Εισάγετε μια διεύθυνση pfennig (π.χ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2129,12 +2129,12 @@ Address: %4 SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core The Bitcoin Core Developers - Οι προγραμματιστές του Pfennig Core + Οι προγραμματιστές του pfennig Core [testnet] @@ -2624,8 +2624,8 @@ Address: %4 Ορισμός φακέλου δεδομένων - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Εισερχόμενες συνδέσεις στη θύρα <port> (προεπιλογή: P2PPORT ή στο testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Εισερχόμενες συνδέσεις στη θύρα <port> (προεπιλογή: 40002 ή στο testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2652,15 +2652,15 @@ Address: %4 Ένα σφάλμα συνέβη καθώς προετοιμαζόταν η πόρτα RPC %u για αναμονή IPv4: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Εισερχόμενες συνδέσεις JSON-RPC στη θύρα <port> (προεπιλογή: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Εισερχόμενες συνδέσεις JSON-RPC στη θύρα <port> (προεπιλογή: 40001 or testnet: 50000) Accept command line and JSON-RPC commands Αποδοχή εντολών κονσόλας και JSON-RPC - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2685,7 +2685,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, you must set a rpcpassword in the configuration file: %s @@ -2696,7 +2696,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2769,7 +2769,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Αυτό είναι ένα προ-τεστ κυκλοφορίας - χρησιμοποιήστε το με δική σας ευθύνη - δεν χρησιμοποιείτε για εξόρυξη ή για αλλες εφαρμογές - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2781,8 +2781,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Προειδοποίηση: Η παράμετρος -paytxfee είναι πολύ υψηλή. Πρόκειται για την αμοιβή που θα πληρώνετε για κάθε συναλλαγή που θα στέλνετε. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Προειδοποίηση: Παρακαλώ βεβαιωθείτε πως η ημερομηνία κι ώρα του συστήματός σας είναι σωστές. Αν το ρολόι του υπολογιστή σας πάει λάθος, ενδέχεται να μη λειτουργεί σωστά το Pfennig. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Προειδοποίηση: Παρακαλώ βεβαιωθείτε πως η ημερομηνία κι ώρα του συστήματός σας είναι σωστές. Αν το ρολόι του υπολογιστή σας πάει λάθος, ενδέχεται να μη λειτουργεί σωστά το pfennig. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2817,7 +2817,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Προσπάθεια για ανακτησει ιδιωτικων κλειδιων από ενα διεφθαρμένο αρχειο wallet.dat - Pfennig Core Daemon + pfennig Core Daemon @@ -2837,7 +2837,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3061,7 +3061,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Εισαγωγή μπλοκ από εξωτερικό αρχείο blk000?.dat - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3125,7 +3125,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3145,11 +3145,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Ρυθμίσεις SSL: (ανατρέξτε στο Pfennig Wiki για οδηγίες ρυθμίσεων SSL) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Ρυθμίσεις SSL: (ανατρέξτε στο pfennig Wiki για οδηγίες ρυθμίσεων SSL) - Send command to Pfennig Core + Send command to pfennig Core @@ -3185,7 +3185,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Ορισμός λήξης χρονικού ορίου σε χιλιοστά του δευτερολέπτου(προεπιλογή:5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3301,12 +3301,12 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Σφάλμα φόρτωσης wallet.dat: Κατεστραμμένο Πορτοφόλι - Error loading wallet.dat: Wallet requires newer version of Pfennig - Σφάλμα φόρτωσης wallet.dat: Το Πορτοφόλι απαιτεί μια νεότερη έκδοση του Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Σφάλμα φόρτωσης wallet.dat: Το Πορτοφόλι απαιτεί μια νεότερη έκδοση του pfennig - Wallet needed to be rewritten: restart Pfennig to complete - Απαιτείται η επανεγγραφή του Πορτοφολιού, η οποία θα ολοκληρωθεί στην επανεκκίνηση του Pfennig + Wallet needed to be rewritten: restart pfennig to complete + Απαιτείται η επανεγγραφή του Πορτοφολιού, η οποία θα ολοκληρωθεί στην επανεκκίνηση του pfennig Error loading wallet.dat diff --git a/src/qt/locale/bitmark_el_GR.ts~ b/src/qt/locale/bitmark_el_GR.ts~ new file mode 100644 index 0000000..3cfd186 --- /dev/null +++ b/src/qt/locale/bitmark_el_GR.ts~ @@ -0,0 +1,3391 @@ + + + AboutDialog + + About GameCredits Core + Σχετικά με το GameCredits Core + + + <b>GameCredits Core</b> version + <b>GameCredits 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. + +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 Bitcoin Core Developers + Οι προγραμματιστές του GameCredits Core + + + (%1-bit) + (%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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Αυτές είναι οι GameCredits διευθύνσεις σας για να λαμβάνετε πληρωμές. Δίνοντας μία ξεχωριστή διεύθυνση σε κάθε αποστολέα, θα μπορείτε να ελέγχετε ποιος σας πληρώνει. + + + These are your GameCredits 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. + Παρουσιάστηκε σφάλμα κατά την αποθήκευση της λίστας πορτοφολιών στο %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 GameCreditsS</b>! + Προσοχη: Εαν κρυπτογραφησεις το πορτοφολι σου και χάσεις τον κωδικο σου θα χάσεις <b> ΟΛΑ ΣΟΥ ΤΑ GameCreditsS</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 + Κρυπτογραφημενο πορτοφολι + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + Το GameCredits θα κλεισει τώρα για να τελειώσει την διαδικασία κρυπτογραφησης. Θυμησου ότι κρυπτογραφώντας το πορτοφολι σου δεν μπορείς να προστατέψεις πλήρως τα gamecreditss σου από κλοπή στην περίπτωση όπου μολυνθεί ο υπολογιστής σου με κακόβουλο λογισμικό. + + + 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. + Ο κωδικος του πορτοφολιού άλλαξε με επιτυχία. + + + + GameCreditsGUI + + Sign &message... + Υπογραφή &Μηνύματος... + + + Synchronizing with network... + Συγχρονισμός με το δίκτυο... + + + &Overview + &Επισκόπηση + + + Node + + + + Show general overview of wallet + Εμφάνισε τη γενική εικόνα του πορτοφολιού + + + &Transactions + &Συναλλαγές + + + Browse transaction history + Περιήγηση στο ιστορικό συναλλαγών + + + E&xit + Έ&ξοδος + + + Quit application + Εξοδος από την εφαρμογή + + + Show information about GameCredits + Εμφάνιση πληροφοριών σχετικά με το GameCredits + + + 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 GameCredits address + Στείλε νομίσματα σε μια διεύθυνση gamecredits + + + Modify configuration options for GameCredits + Επεργασία ρυθμισεων επιλογών για το GameCredits + + + Backup wallet to another location + Δημιουργία αντιγράφου ασφαλείας πορτοφολιού σε άλλη τοποθεσία + + + Change the passphrase used for wallet encryption + Αλλαγή του κωδικού κρυπτογράφησης του πορτοφολιού + + + &Debug window + &Παράθυρο αποσφαλμάτωσης + + + Open debugging and diagnostic console + Άνοιγμα κονσόλας αποσφαλμάτωσης και διαγνωστικών + + + &Verify message... + &Επιβεβαίωση μηνύματος + + + GameCredits + GameCredits + + + Wallet + Πορτοφόλι + + + &Send + &Αποστολή + + + &Receive + &Παραλαβή + + + &Show / Hide + &Εμφάνισε/Κρύψε + + + Show or hide the main Window + Εμφάνιση ή αποκρύψη του κεντρικου παράθυρου + + + Encrypt the private keys that belong to your wallet + Κρυπτογραφήστε τα ιδιωτικά κλειδιά που ανήκουν στο πορτοφόλι σας + + + Sign messages with your GameCredits addresses to prove you own them + Υπογράψτε ένα μήνυμα για να βεβαιώσετε πως είστε ο κάτοχος αυτής της διεύθυνσης + + + Verify messages to ensure they were signed with specified GameCredits addresses + Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως ανήκει μια συγκεκριμένη διεύθυνση GameCredits + + + &File + &Αρχείο + + + &Settings + &Ρυθμίσεις + + + &Help + &Βοήθεια + + + Tabs toolbar + Εργαλειοθήκη καρτελών + + + [testnet] + [testnet] + + + GameCredits Core + GameCredits Core + + + Request payments (generates QR codes and gamecredits: URIs) + Αίτηση πληρωμών (δημιουργεί QR codes και διευθύνσεις gamecredits: ) + + + &About GameCredits Core + &Σχετικά με το GameCredits Core + + + Show the list of used sending addresses and labels + Προβολή της λίστας των χρησιμοποιημένων διευθύνσεων και ετικετών αποστολής + + + Show the list of used receiving addresses and labels + Προβολή της λίστας των χρησιμοποιημένων διευθύνσεων και ετικετών λήψεως + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + Πελάτης GameCredits + + + %n active connection(s) to GameCredits network + %n ενεργή σύνδεση στο δίκτυο GameCredits%n ενεργές συνδέσεις στο δίκτυο Βitcoin + + + 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 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 + Πληροφορία + + + 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. GameCredits can no longer continue safely and will quit. + Παρουσιάστηκε ανεπανόρθωτο σφάλμα. Το GameCredits δεν μπορεί πλέον να συνεχίσει με ασφάλεια και θα τερματισθει. + + + + 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 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 GameCredits address. + Η διεύθυνση "%1" δεν είναι έγκυρη GameCredits διεύθυνση. + + + 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + GameCredits 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 GameCredits Core. + Καλώς ήρθατε στο GameCredits Core. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Καθώς αυτή είναι η πρώτη φορά που εκκινείται το πρόγραμμα, μπορείτε να διαλέξετε πού θα αποθηκεύει το GameCredits Core τα δεδομένα του. + + + GameCredits Core will download and store a copy of the GameCredits 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: + Προσαρμογή του φακέλου δεδομένων: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Αυτόματη εκκίνηση του GameCredits μετά την εισαγωγή στο σύστημα + + + &Start GameCredits on system login + &Έναρξη του Βιtcoin κατά την εκκίνηση του συστήματος + + + Size of &database cache + + + + MB + MB + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Αυτόματο άνοιγμα των θυρών GameCredits στον δρομολογητή. Λειτουργεί μόνο αν ο δρομολογητής σας υποστηρίζει τη λειτουργία UPnP. + + + Map port using &UPnP + Απόδοση θυρών με χρήστη &UPnP + + + Proxy &IP: + &IP διαμεσολαβητή: + + + &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 GameCredits. + Εδώ μπορεί να ρυθμιστεί η γλώσσα διεπαφής χρήστη. Αυτή η ρύθμιση θα ισχύσει μετά την επανεκκίνηση του GameCredits. + + + &Unit to show amounts in: + &Μονάδα μέτρησης: + + + Choose the default subdivision unit to show in the interface and when sending coins. + Διαλέξτε την προεπιλεγμένη υποδιαίρεση που θα εμφανίζεται όταν στέλνετε νομίσματα. + + + Whether to show GameCredits addresses in the transaction list or not. + Επιλέξτε αν θέλετε να εμφανίζονται οι διευθύνσεις GameCredits στη λίστα συναλλαγών. + + + &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 GameCredits network after a connection is established, but this process has not completed yet. + Οι πληροφορίες που εμφανίζονται μπορεί να είναι ξεπερασμένες. Το πορτοφόλι σας συγχρονίζεται αυτόματα με το δίκτυο GameCredits μετά από μια σύνδεση, αλλά αυτή η διαδικασία δεν έχει ακόμη ολοκληρωθεί. + + + 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 GameCredits address or malformed URI parameters. + Το URI δεν μπορεί να αναλυθεί! Αυτό μπορεί να προκληθεί από μια μη έγκυρη διεύθυνση GameCredits ή ακατάλληλη παραμέτρο URI. + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + Σφάλμα αιτήματος πληρωμής + + + Cannot start gamecredits: click-to-pay handler + Δεν είναι δυνατή η εκκίνηση του GameCredits: 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 + + GameCredits + GameCredits + + + 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 + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Εισάγετε μια διεύθυνση GameCredits (π.χ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Ανοίξτε το αρχείο καταγραφής εντοπισμού σφαλμάτων από τον τρέχοντα κατάλογο δεδομένων. Αυτό μπορεί να πάρει μερικά δευτερόλεπτα για τα μεγάλα αρχεία καταγραφής. + + + Clear console + Καθαρισμός κονσόλας + + + Welcome to the GameCredits RPC console. + Καλώς ήρθατε στην GameCredits 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 GameCredits 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 + &Προσθήκη αποδέκτη + + + 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 + Αντιγραφή των 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. + Βρέθηκε η ίδια διεύθυνση δύο φορές. Επιτρέπεται μία μόνο εγγραφή για κάθε διεύθυνση, σε κάθε διαδικασία αποστολής. + + + 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 GameCredits address + Προειδοποίηση: Μη έγκυρη διεύθυνση GameCredits + + + (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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Διεύθυνση αποστολής της πληρωμής (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + Πληρωμή σε: + + + Memo: + Σημείωση: + + + + ShutdownWindow + + GameCredits Core is shutting down... + Το GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Εισάγετε μια διεύθυνση GameCredits (π.χ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως σας ανήκει μια συγκεκριμένη διεύθυνση GameCredits + + + 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Εισάγετε μια διεύθυνση GameCredits (π.χ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Υπογράψτε ένα μήνυμα για ν' αποδείξετε πως υπογραφθηκε απο μια συγκεκριμένη διεύθυνση GameCredits + + + Verify &Message + Επιβεβαίωση μηνύματος + + + Reset all verify message fields + Επαναφορά όλων επαλήθευμενων πεδίων μήνυματος + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Εισάγετε μια διεύθυνση GameCredits (π.χ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + GameCredits Core + + + The Bitcoin Core Developers + Οι προγραμματιστές του GameCredits 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 Συναλλαγής: + + + 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 + άγνωστο + + + + 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 μπλοκΑνοιχτό για %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 + 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 + Αντιγραφη του ID Συναλλαγής + + + Edit label + Επεξεργασία επιγραφής + + + Show transaction details + Εμφάνιση λεπτομερειών συναλλαγής + + + 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 + + + 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. + + + + The wallet data was successfully saved to %1. + Τα δεδομένα πορτοφολιού αποθηκεύτηκαν με επιτυχία στο %1. + + + Backup Successful + Η δημιουργια αντιγραφου ασφαλειας πετυχε + + + + gamecredits-core + + Usage: + Χρήση: + + + List commands + Λίστα εντολών + + + Get help for a command + Επεξήγηση εντολής + + + Options: + Επιλογές: + + + Specify configuration file (default: gamecredits.conf) + Ορίστε αρχείο ρυθμίσεων (προεπιλογή: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Ορίστε αρχείο pid (προεπιλογή: gamecreditsd.pid) + + + Specify data directory + Ορισμός φακέλου δεδομένων + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Εισερχόμενες συνδέσεις στη θύρα <port> (προεπιλογή: 40002 ή στο testnet: 50001) + + + 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: 40001 or testnet: 50000) + Εισερχόμενες συνδέσεις JSON-RPC στη θύρα <port> (προεπιλογή: 40001 or testnet: 50000) + + + Accept command line and JSON-RPC commands + Αποδοχή εντολών κονσόλας και JSON-RPC + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=gamecreditsrpc +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 "GameCredits 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 %u για αναμονη του IPv6, επεσε πισω στο IPv4:%s + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + Αποθηκευση σε συγκεκριμένη διεύθυνση. Χρησιμοποιήστε τα πλήκτρα [Host] : συμβολισμός θύρα για 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 στην εντολή αντικαθίσταται από το hash του μπλοκ) + + + 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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Προειδοποίηση: Παρακαλώ βεβαιωθείτε πως η ημερομηνία κι ώρα του συστήματός σας είναι σωστές. Αν το ρολόι του υπολογιστή σας πάει λάθος, ενδέχεται να μη λειτουργεί σωστά το GameCredits. + + + 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 αποθηκεύονται ως 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 + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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=όλα) + + + 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 gamecredits-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 + + + Cannot obtain a lock on data directory %s. GameCredits 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' + Μη έγκυρο ποσό για την παράμετρο -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) + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the GameCredits 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 GameCredits Wiki for SSL setup instructions) + Ρυθμίσεις SSL: (ανατρέξτε στο GameCredits Wiki για οδηγίες ρυθμίσεων SSL) + + + Send command to GameCredits Core + + + + Send trace/debug info to console instead of debug.log file + Αποστολή πληροφοριών εντοπισμού σφαλμάτων στην κονσόλα αντί του αρχείου debug.log + + + Set minimum block size in bytes (default: 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 GameCredits 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 στην εντολή αντικαθίσταται από το 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) + + + This help message + Αυτό το κείμενο βοήθειας + + + Unable to bind to %s on this computer (bind returned error %d, %s) + Αδύνατη η σύνδεση με τη θύρα %s αυτού του υπολογιστή (bind returned error %d, %s) + + + 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 GameCredits + Σφάλμα φόρτωσης wallet.dat: Το Πορτοφόλι απαιτεί μια νεότερη έκδοση του GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + Απαιτείται η επανεγγραφή του Πορτοφολιού, η οποία θα ολοκληρωθεί στην επανεκκίνηση του GameCredits + + + 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 + Προσέθεσε ένα κόμβο για σύνδεση και προσπάθησε να κρατήσεις την σύνδεση ανοιχτή + + + 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. + Πρέπει να βάλεις ένα κωδικό στο αρχείο παραμέτρων: %s +Εάν το αρχείο δεν υπάρχει, δημιούργησε το με δικαιώματα μόνο για ανάγνωση από τον δημιουργό + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_en.ts b/src/qt/locale/bitmark_en.ts index 2a3075c..a48852e 100644 --- a/src/qt/locale/bitmark_en.ts +++ b/src/qt/locale/bitmark_en.ts @@ -5,12 +5,12 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -129,12 +129,12 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -255,8 +255,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -282,8 +282,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -328,7 +328,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -376,8 +376,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Pfennig - Show information about Pfennig + Show information about pfennig + Show information about pfennig @@ -437,13 +437,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address - Send coins to a Pfennig address + Send coins to a pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig - Modify configuration options for Pfennig + Modify configuration options for pfennig + Modify configuration options for pfennig @@ -472,8 +472,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig - Pfennig + pfennig + pfennig @@ -508,13 +508,13 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -544,8 +544,8 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core @@ -555,7 +555,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -580,21 +580,21 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Pfennig client + pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network - %n active connection to Pfennig network - %n active connections to Pfennig network + %n active connection to pfennig network + %n active connections to pfennig network @@ -725,8 +725,8 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -1083,8 +1083,8 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -1129,13 +1129,13 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core @@ -1192,17 +1192,17 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -1217,8 +1217,8 @@ Address: %4 - Pfennig - Pfennig + pfennig + pfennig @@ -1293,13 +1293,13 @@ Address: %4 - Automatically start Pfennig after logging in to the system. - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login - &Start Pfennig on system login + &Start pfennig on system login + &Start pfennig on system login @@ -1318,7 +1318,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1394,8 +1394,8 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1464,8 +1464,8 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1479,8 +1479,8 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1549,8 +1549,8 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig 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 pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1619,8 +1619,8 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1709,8 +1709,8 @@ Address: %4 - Pfennig - Pfennig + pfennig + pfennig @@ -1729,13 +1729,13 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1897,8 +1897,8 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1907,8 +1907,8 @@ Address: %4 - Welcome to the Pfennig RPC console. - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1986,7 +1986,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -2382,7 +2382,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -2494,7 +2494,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -2519,7 +2519,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2589,8 +2589,8 @@ Address: %4 - Sign the message to prove you own this Pfennig address - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address + Sign the message to prove you own this pfennig address @@ -2625,8 +2625,8 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2640,8 +2640,8 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2719,8 +2719,8 @@ Address: %4 SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core @@ -3356,8 +3356,8 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -3391,8 +3391,8 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -3401,7 +3401,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -3430,7 +3430,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, you must set a rpcpassword in the configuration file: %s @@ -3441,7 +3441,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -3531,7 +3531,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -3546,8 +3546,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -3591,7 +3591,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -3616,7 +3616,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3896,7 +3896,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3976,7 +3976,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -4001,12 +4001,12 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -4051,7 +4051,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -4196,13 +4196,13 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_en.ts~ b/src/qt/locale/bitmark_en.ts~ new file mode 100644 index 0000000..c0aef8d --- /dev/null +++ b/src/qt/locale/bitmark_en.ts~ @@ -0,0 +1,4307 @@ + + + + + AboutDialog + + + About GameCredits Core + + + + + <b>GameCredits 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. + +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 + Copyright + + + + The Bitcoin Core Developers + + + + + + (%1-bit) + + + + + AddressBookPage + + + Double-click to edit address or label + Double-click to edit address or label + + + + Create a new address + Create a new address + + + + &New + + + + + Copy the currently selected address to the system clipboard + Copy the currently selected address to the system clipboard + + + + &Copy + + + + + C&lose + + + + + &Copy Address + &Copy Address + + + + Delete the currently selected address from the list + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + Export the data in the current tab to a file + + + + &Export + &Export + + + + &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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + + Copy &Label + Copy &Label + + + + &Edit + &Edit + + + + 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) + (no label) + + + + AskPassphraseDialog + + + Passphrase Dialog + Passphrase Dialog + + + + Enter passphrase + Enter passphrase + + + + New passphrase + New passphrase + + + + Repeat 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>. + 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 + Encrypt wallet + + + + This operation needs your wallet passphrase to unlock the wallet. + This operation needs your wallet passphrase to unlock the wallet. + + + + Unlock wallet + Unlock wallet + + + + This operation needs your wallet passphrase to decrypt the wallet. + This operation needs your wallet passphrase to decrypt the wallet. + + + + Decrypt wallet + Decrypt wallet + + + + Change passphrase + Change passphrase + + + + Enter the old and new passphrase to the wallet. + Enter the old and new passphrase to the wallet. + + + + Confirm wallet encryption + Confirm wallet encryption + + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR GameCreditsS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR GameCreditsS</b>! + + + + Are you sure you wish to encrypt your wallet? + 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. + 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! + Warning: The Caps Lock key is on! + + + + + Wallet encrypted + Wallet encrypted + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + + + + + + + Wallet encryption failed + Wallet encryption failed + + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + + + + + The supplied passphrases do not match. + The supplied passphrases do not match. + + + + Wallet unlock failed + Wallet unlock failed + + + + + + The passphrase entered for the wallet decryption was incorrect. + The passphrase entered for the wallet decryption was incorrect. + + + + Wallet decryption failed + Wallet decryption failed + + + + Wallet passphrase was successfully changed. + Wallet passphrase was successfully changed. + + + + GameCreditsGUI + + + Sign &message... + Sign &message... + + + + Synchronizing with network... + Synchronizing with network... + + + + &Overview + &Overview + + + + Node + + + + + Show general overview of wallet + Show general overview of wallet + + + + &Transactions + &Transactions + + + + Browse transaction history + Browse transaction history + + + + E&xit + E&xit + + + + Quit application + Quit application + + + + Show information about GameCredits + Show information about GameCredits + + + + + About &Qt + About &Qt + + + + Show information about Qt + Show information about Qt + + + + &Options... + &Options... + + + + &Encrypt Wallet... + &Encrypt Wallet... + + + + &Backup Wallet... + &Backup Wallet... + + + + &Change Passphrase... + &Change Passphrase... + + + + &Sending addresses... + + + + + &Receiving addresses... + + + + + Open &URI... + + + + + Importing blocks from disk... + Importing blocks from disk... + + + + Reindexing blocks on disk... + Reindexing blocks on disk... + + + + Send coins to a GameCredits address + Send coins to a GameCredits address + + + + Modify configuration options for GameCredits + Modify configuration options for GameCredits + + + + Backup wallet to another location + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + Change the passphrase used for wallet encryption + + + + &Debug window + &Debug window + + + + Open debugging and diagnostic console + Open debugging and diagnostic console + + + + &Verify message... + &Verify message... + + + + GameCredits + GameCredits + + + + Wallet + Wallet + + + + &Send + &Send + + + + &Receive + &Receive + + + + + &Show / Hide + &Show / Hide + + + + Show or hide the main Window + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &File + + + + &Settings + &Settings + + + + &Help + &Help + + + + Tabs toolbar + Tabs toolbar + + + + + [testnet] + [testnet] + + + + GameCredits Core + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + + + &About GameCredits Core + + + + + Show the list of used sending addresses and labels + + + + + Show the list of used receiving addresses and labels + + + + + Open a gamecredits: URI or payment request + + + + + &Command-line options + + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + + + GameCredits client + GameCredits client + + + + %n active connection(s) to GameCredits network + + %n active connection to GameCredits network + %n active connections to GameCredits network + + + + + No block source available... + No block source available... + + + + Processed %1 of %2 (estimated) blocks of transaction history. + Processed %1 of %2 (estimated) blocks of transaction history. + + + + Processed %1 blocks of transaction history. + Processed %1 blocks of transaction history. + + + + %n hour(s) + + %n hour + %n hours + + + + + %n day(s) + + %n day + %n days + + + + + + %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. + + + + Transactions after this will not yet be visible. + Transactions after this will not yet be visible. + + + + Error + Error + + + + Warning + Warning + + + + Information + Information + + + + Up to date + Up to date + + + + Catching up... + Catching up... + + + + Sent transaction + Sent transaction + + + + Incoming transaction + Incoming transaction + + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + 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>unlocked</b> + + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + Wallet is <b>encrypted</b> and currently <b>locked</b> + + + + A fatal error occurred. GameCredits can no longer continue safely and will quit. + A fatal error occurred. GameCredits can no longer continue safely and will quit. + + + + 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 + + + Edit Address + Edit 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 + New receiving address + + + + New sending address + New sending address + + + + Edit receiving address + Edit receiving address + + + + Edit sending address + Edit sending address + + + + The entered address "%1" is already in the address book. + The entered address "%1" is already in the address book. + + + + The entered address "%1" is not a valid GameCredits address. + The entered address "%1" is not a valid GameCredits address. + + + + Could not unlock wallet. + Could not unlock wallet. + + + + New key generation failed. + New key generation failed. + + + + FreespaceChecker + + + 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 + + + GameCredits Core - Command-line options + + + + + GameCredits Core + GameCredits Core + + + + version + version + + + + Usage: + Usage: + + + + command-line options + command-line options + + + + UI options + UI options + + + + Set language, for example "de_DE" (default: system locale) + Set language, for example "de_DE" (default: system locale) + + + + 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) + + + + Choose data directory on startup (default: 0) + Choose data directory on startup (default: 0) + + + + Intro + + + Welcome + Welcome + + + + Welcome to GameCredits Core. + + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + GameCredits + + + + 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 + + + + + OptionsDialog + + + Options + 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. + + + + Pay transaction &fee + Pay transaction &fee + + + + Automatically start GameCredits after logging in to the system. + Automatically start GameCredits after logging in to the system. + + + + &Start GameCredits on system login + &Start GameCredits on system login + + + + Size of &database cache + + + + + MB + + + + + Number of script &verification threads + + + + + Connect to the GameCredits 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. + + + + &Reset Options + &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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + + + + Map port using &UPnP + Map port using &UPnP + + + + Proxy &IP: + Proxy &IP: + + + + &Port: + &Port: + + + + Port of the proxy (e.g. 9050) + Port of the proxy (e.g. 9050) + + + + SOCKS &Version: + SOCKS &Version: + + + + SOCKS version of the proxy (e.g. 5) + SOCKS version of the proxy (e.g. 5) + + + + &Window + &Window + + + + Show only a tray icon after minimizing the window. + Show only a tray icon after minimizing the window. + + + + &Minimize to the tray instead of the taskbar + &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. + 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 + M&inimize on close + + + + &Display + &Display + + + + User Interface &language: + User Interface &language: + + + + The user interface language can be set here. This setting will take effect after restarting GameCredits. + The user interface language can be set here. This setting will take effect after restarting GameCredits. + + + + &Unit to show amounts in: + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits addresses in the transaction list or not. + Whether to show GameCredits addresses in the transaction list or not. + + + + &Display addresses in transaction list + &Display addresses in transaction list + + + + Whether to show coin control features or not. + + + + + &OK + &OK + + + + &Cancel + &Cancel + + + + default + default + + + + none + + + + + Confirm options reset + 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. + The supplied proxy address is invalid. + + + + OverviewPage + + + Form + Form + + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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 GameCredits network after a connection is established, but this process has not completed yet. + + + + Wallet + Wallet + + + + Available: + + + + + Your current spendable balance + 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: + + + + Mined balance that has not yet matured + Mined balance that has not yet matured + + + + Total: + Total: + + + + Your current total balance + Your current total balance + + + + <b>Recent transactions</b> + <b>Recent transactions</b> + + + + + out of sync + out of sync + + + + PaymentServer + + + + URI handling + URI handling + + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + + + + + + + Payment request error + + + + + Cannot start gamecredits: 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 + + + + + GameCredits + GameCredits + + + + Error: Specified data directory "%1" does not exist. + 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. + + + + + GameCredits Core didn't yet exit safely... + + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + + &Save Image... + + + + + &Copy Image + + + + + Save QR Code + Save QR Code + + + + PNG Image (*.png) + + + + + RPCConsole + + + Client name + Client name + + + + + + + + + + + + + + N/A + N/A + + + + Client version + Client version + + + + &Information + &Information + + + + Debug window + + + + + General + + + + + Using OpenSSL version + Using OpenSSL version + + + + Startup time + Startup time + + + + Network + Network + + + + Name + + + + + Number of connections + Number of connections + + + + Block chain + Block chain + + + + Current number of blocks + Current number of blocks + + + + Estimated total blocks + Estimated total blocks + + + + Last block time + Last block time + + + + &Open + &Open + + + + &Console + &Console + + + + &Network Traffic + + + + + &Clear + + + + + Totals + + + + + + In: + + + + + + Out: + + + + + Build date + Build date + + + + Debug log file + Debug log file + + + + Open the GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Open the GameCredits 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 GameCredits RPC console. + Welcome to the GameCredits RPC console. + + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + 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. + 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 GameCredits 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 + + + + Add &Recipient + Add &Recipient + + + + Clear all fields of the form. + + + + + Clear &All + Clear &All + + + + Balance: + Balance: + + + + Confirm the send action + Confirm the send action + + + + S&end + S&end + + + + Confirm send coins + Confirm send coins + + + + + + + %1 to %2 + + + + + Copy quantity + + + + + Copy amount + 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 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. + + + + 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 GameCredits 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 + + + + + A&mount: + A&mount: + + + + Pay &To: + Pay &To: + + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 previously used address + + + + + This is a normal payment. + + + + + Alt+A + Alt+A + + + + Paste address from clipboard + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + + This is an unverified payment request. + + + + + + Pay To: + + + + + + Memo: + + + + + ShutdownWindow + + + GameCredits Core is shutting down... + + + + + Do not shut down the computer until this window disappears. + + + + + SignVerifyMessageDialog + + + Signatures - Sign / Verify a Message + Signatures - Sign / Verify a Message + + + + &Sign 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. + 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + The address to sign the message with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + Choose previously used address + + + + + + Alt+A + Alt+A + + + + Paste address from clipboard + Paste address from clipboard + + + + Alt+P + Alt+P + + + + Enter the message you want to sign here + Enter the message you want to sign here + + + + Signature + Signature + + + + Copy the current signature to the system clipboard + Copy the current signature to the system clipboard + + + + Sign the message to prove you own this GameCredits address + Sign the message to prove you own this GameCredits address + + + + Sign &Message + Sign &Message + + + + Reset all sign message fields + Reset all sign message fields + + + + + Clear &All + Clear &All + + + + &Verify Message + &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. + 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + The address the message was signed with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + Verify &Message + + + + Reset all verify message fields + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Click "Sign Message" to generate signature + Click "Sign Message" to generate 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. + + + + Private key for the entered address is not available. + Private key for the entered address is not available. + + + + Message signing failed. + Message signing failed. + + + + Message signed. + Message signed. + + + + The signature could not be decoded. + The signature could not be decoded. + + + + + Please check the signature and try again. + Please check the signature and try again. + + + + The signature did not match the message digest. + The signature did not match the message digest. + + + + Message verification failed. + Message verification failed. + + + + Message verified. + Message verified. + + + + SplashScreen + + + GameCredits Core + GameCredits Core + + + + The Bitcoin Core Developers + + + + + [testnet] + [testnet] + + + + TrafficGraphWidget + + + KB/s + + + + + TransactionDesc + + + Open until %1 + Open until %1 + + + + conflicted + + + + + %1/offline + %1/offline + + + + %1/unconfirmed + %1/unconfirmed + + + + %1 confirmations + %1 confirmations + + + + Status + Status + + + + , broadcast through %n node(s) + + , broadcast through %n node + , broadcast through %n nodes + + + + + Date + Date + + + + Source + Source + + + + Generated + Generated + + + + + From + From + + + + + + To + To + + + + + own address + own address + + + + label + label + + + + + + + + Credit + Credit + + + + matures in %n more block(s) + + matures in %n more block + matures in %n more blocks + + + + + not accepted + not accepted + + + + + + + Debit + Debit + + + + Transaction fee + Transaction fee + + + + Net amount + Net amount + + + + + Message + Message + + + + Comment + Comment + + + + Transaction ID + 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 + Debug information + + + + Transaction + Transaction + + + + Inputs + Inputs + + + + Amount + Amount + + + + true + true + + + + false + false + + + + , has not been successfully broadcast yet + , has not been successfully broadcast yet + + + + Open for %n more block(s) + + Open for %n more block + Open for %n more blocks + + + + + unknown + unknown + + + + TransactionDescDialog + + + Transaction details + Transaction details + + + + This pane shows a detailed description of the transaction + This pane shows a detailed description of the transaction + + + + TransactionTableModel + + + Date + Date + + + + Type + Type + + + + Address + Address + + + + Amount + Amount + + + + Immature (%1 confirmations, will be available after %2) + + + + + Open for %n more block(s) + + Open for %n more block + Open for %n more blocks + + + + + Open until %1 + Open until %1 + + + + Confirmed (%1 confirmations) + Confirmed (%1 confirmations) + + + + 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! + + + + Generated but not accepted + Generated but not accepted + + + + Offline + + + + + Unconfirmed + + + + + Confirming (%1 of %2 recommended confirmations) + + + + + Conflicted + + + + + Received with + Received with + + + + Received from + Received from + + + + Sent to + Sent to + + + + Payment to yourself + Payment to yourself + + + + Mined + Mined + + + + (n/a) + (n/a) + + + + Transaction status. Hover over this field to show number of confirmations. + Transaction status. Hover over this field to show number of confirmations. + + + + Date and time that the transaction was received. + Date and time that the transaction was received. + + + + Type of transaction. + Type of transaction. + + + + Destination address of transaction. + Destination address of transaction. + + + + Amount removed from or added to balance. + Amount removed from or added to balance. + + + + TransactionView + + + + All + All + + + + Today + Today + + + + This week + This week + + + + This month + This month + + + + Last month + Last month + + + + This year + This year + + + + Range... + Range... + + + + Received with + Received with + + + + Sent to + Sent to + + + + To yourself + To yourself + + + + Mined + Mined + + + + Other + Other + + + + Enter address or label to search + Enter address or label to search + + + + Min amount + Min amount + + + + Copy address + Copy address + + + + Copy label + Copy label + + + + Copy amount + Copy amount + + + + Copy transaction ID + Copy transaction ID + + + + Edit label + Edit label + + + + Show transaction details + 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) + Comma separated file (*.csv) + + + + Confirmed + Confirmed + + + + Date + Date + + + + Type + Type + + + + Label + Label + + + + Address + Address + + + + Amount + Amount + + + + ID + ID + + + + Range: + Range: + + + + to + to + + + + WalletFrame + + + No wallet has been loaded. + + + + + WalletModel + + + Send Coins + Send Coins + + + + WalletView + + + &Export + &Export + + + + Export the data in the current tab to a file + 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 %1. + + + + + The wallet data was successfully saved to %1. + + + + + Backup Successful + Backup Successful + + + + gamecredits-core + + + Usage: + Usage: + + + + List commands + List commands + + + + Get help for a command + Get help for a command + + + + Options: + Options: + + + + Specify configuration file (default: gamecredits.conf) + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + Accept command line and JSON-RPC commands + + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=gamecreditsrpc +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 "GameCredits 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 + 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 + 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. 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: 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! + 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) + 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 + 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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong GameCredits 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. + + + + Warning: error reading wallet.dat! All keys read correctly, but transaction data or address book entries might be missing or incorrect. + 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. + 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 + + + + GameCredits Core Daemon + + + + + Block creation options: + Block creation options: + + + + 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: 40001 or testnet: 50000) + + + + + 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? + Do you want to rebuild the block database now? + + + + Error initializing block database + Error initializing block database + + + + Error initializing wallet database environment %s! + Error initializing wallet database environment %s! + + + + Error loading block database + Error loading block database + + + + Error opening block database + Error opening block database + + + + Error: Disk space is low! + Error: Disk space is low! + + + + Error: Wallet locked, unable to create transaction! + Error: Wallet locked, unable to create transaction! + + + + Error: system error: + Error: system error: + + + + Failed to listen on any port. Use -listen=0 if you want this. + Failed to listen on any port. Use -listen=0 if you want this. + + + + Failed to read block info + Failed to read block info + + + + Failed to read block + Failed to read block + + + + Failed to sync block index + Failed to sync block index + + + + Failed to write block index + Failed to write block index + + + + Failed to write block info + Failed to write block info + + + + Failed to write block + Failed to write block + + + + Failed to write file info + Failed to write file info + + + + Failed to write to coin database + Failed to write to coin database + + + + Failed to write transaction index + Failed to write transaction index + + + + Failed to write undo data + 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) + Generate coins (default: 0) + + + + How many blocks to check at startup (default: 288, 0 = all) + 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? + 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 gamecredits-cli): + + + + + Verifying blocks... + Verifying blocks... + + + + Verifying wallet... + 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 + + + + Cannot obtain a lock on data directory %s. GameCredits 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 amount for -minrelaytxfee=<amount>: '%s' + Invalid amount for -minrelaytxfee=<amount>: '%s' + + + + Invalid amount for -mintxfee=<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) + Maintain a full transaction index (default: 0) + + + + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + Maximum per-connection receive buffer, <n>*1000 bytes (default: 5000) + + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + Maximum per-connection send buffer, <n>*1000 bytes (default: 1000) + + + + Only accept block chain matching built-in checkpoints (default: 1) + Only accept block chain matching built-in checkpoints (default: 1) + + + + Only connect to nodes in network <net> (IPv4, IPv6 or Tor) + 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL options: (see the GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits Core + + + + + Send trace/debug info to console instead of debug.log file + Send trace/debug info to console instead of debug.log file + + + + 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) + + + + Signing transaction failed + Signing transaction failed + + + + Specify connection timeout in milliseconds (default: 5000) + Specify connection timeout in milliseconds (default: 5000) + + + + Start GameCredits Core Daemon + + + + + System error: + System error: + + + + Transaction amount too small + Transaction amount too small + + + + Transaction amounts must be positive + Transaction amounts must be positive + + + + Transaction too large + Transaction too large + + + + Use UPnP to map the listening port (default: 0) + Use UPnP to map the listening port (default: 0) + + + + Use UPnP to map the listening port (default: 1 when listening) + Use UPnP to map the listening port (default: 1 when listening) + + + + 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) + + + + Rescan the block chain for missing wallet transactions + 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) + + + + Server private key (default: server.pem) + Server private key (default: server.pem) + + + + 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) + + + + 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 + + + + Error loading wallet.dat: Wallet requires newer version of GameCredits + Error loading wallet.dat: Wallet requires newer version of GameCredits + + + + Wallet needed to be rewritten: restart GameCredits to complete + Wallet needed to be rewritten: restart GameCredits 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' + + + + Unknown -socks proxy version requested: %i + Unknown -socks proxy version requested: %i + + + + Cannot resolve -bind address: '%s' + Cannot resolve -bind address: '%s' + + + + Cannot resolve -externalip address: '%s' + Cannot resolve -externalip address: '%s' + + + + Invalid amount for -paytxfee=<amount>: '%s' + Invalid amount for -paytxfee=<amount>: '%s' + + + + Invalid amount + Invalid amount + + + + Insufficient funds + 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 + + + + Loading wallet... + Loading wallet... + + + + Cannot downgrade wallet + Cannot downgrade wallet + + + + Cannot write default address + 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. + 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/bitmark_eo.ts b/src/qt/locale/bitmark_eo.ts index 4854bc1..6d4774f 100644 --- a/src/qt/locale/bitmark_eo.ts +++ b/src/qt/locale/bitmark_eo.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core Pri la Bitmona Kerno - <b>Pfennig Core</b> version + <b>pfennig Core</b> version Versio de <b>Bitmona Kerno</b> @@ -103,11 +103,11 @@ Tiu ĉi produkto enhavas erojn kreitajn de la "OpenSSL Project" por uz Ricevaj adresoj - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig 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 Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig 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. @@ -205,7 +205,7 @@ Tiu ĉi produkto enhavas erojn kreitajn de la "OpenSSL Project" por uz Konfirmo de ĉifrado de la monujo - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! Atentu! Se vi ĉifras vian monujon kaj perdas la pasfrazon, vi <b>PERDOS LA TUTON DE VIA BITMONO<b>! @@ -225,7 +225,7 @@ Tiu ĉi produkto enhavas erojn kreitajn de la "OpenSSL Project" por uz La monujo estas ĉifrita - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs 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. @@ -258,7 +258,7 @@ Tiu ĉi produkto enhavas erojn kreitajn de la "OpenSSL Project" por uz - PfennigGUI + pfennigGUI Sign &message... Subskribi &mesaĝon... @@ -296,7 +296,7 @@ Tiu ĉi produkto enhavas erojn kreitajn de la "OpenSSL Project" por uz Eliri la aplikaĵon - Show information about Pfennig + Show information about pfennig Vidigi informojjn pri Bitmono @@ -344,11 +344,11 @@ Tiu ĉi produkto enhavas erojn kreitajn de la "OpenSSL Project" por uz Reindeksado de blokoj sur disko... - Send coins to a Pfennig address + Send coins to a pfennig address Sendi monon al Bitmon-adreso - Modify configuration options for Pfennig + Modify configuration options for pfennig Modifi agordaĵojn por Bitmono @@ -372,7 +372,7 @@ Tiu ĉi produkto enhavas erojn kreitajn de la "OpenSSL Project" por uz &Kontroli mesaĝon... - Pfennig + pfennig Bitmono @@ -400,11 +400,11 @@ Tiu ĉi produkto enhavas erojn kreitajn de la "OpenSSL Project" por uz Ĉifri la privatajn ŝlosilojn de via monujo - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig 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 Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses Kontroli mesaĝojn por kontroli ĉu ili estas subskribitaj per specifaj Bitmon-adresoj @@ -428,7 +428,7 @@ Tiu ĉi produkto enhavas erojn kreitajn de la "OpenSSL Project" por uz [testnet] - Pfennig Core + pfennig Core Kerno de Bitmono @@ -436,7 +436,7 @@ Tiu ĉi produkto enhavas erojn kreitajn de la "OpenSSL Project" por uz Peti pagon (kreas QR-kodojn kaj URI-ojn kun prefikso pfennig:) - &About Pfennig Core + &About pfennig Core &Pri la Bitmona Kerno @@ -456,15 +456,15 @@ Tiu ĉi produkto enhavas erojn kreitajn de la "OpenSSL Project" por uz &Komandliniaj agordaĵoj - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client Bitmon-kliento - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network %n aktiva konekto al la bitmona reto%n aktivaj konektoj al la bitmona reto @@ -560,7 +560,7 @@ Adreso: %4 Monujo estas <b>ĉifrita</b> kaj aktuale <b>ŝlosita</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. Okazis neriparebla eraro. Bitmono ne plu povas sekure daŭri, do ĝi sekure ĉesos. @@ -845,7 +845,7 @@ Adreso: %4 La adreso enigita "%1" jam ekzistas en la adresaro. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. La adreso enigita "%1" ne estas valida Bitmon-adreso. @@ -883,11 +883,11 @@ Adreso: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options Bitmona Kerno - Komandliniaj agordaĵoj - Pfennig Core + pfennig Core Kerno de Bitmono @@ -934,16 +934,16 @@ Adreso: %4 Bonvenon - Welcome to Pfennig Core. - Bonvenon al la bitmona kerno, Pfennig Core. + Welcome to pfennig Core. + Bonvenon al la bitmona kerno, pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Dum tiu ĉi unua uzo de la programo, vi povas elekti lokon, kie Pfennig Core stokos siajn datumojn. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Dum tiu ĉi unua uzo de la programo, vi povas elekti lokon, kie pfennig Core stokos siajn datumojn. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. + pfennig 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 @@ -954,7 +954,7 @@ Adreso: %4 Uzi alian dosierujon por datumoj: - Pfennig + pfennig Bitmono @@ -1016,11 +1016,11 @@ Adreso: %4 Krompago - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. Aŭtomate lanĉi Bitmonon post ensaluto al la sistemo. - &Start Pfennig on system login + &Start pfennig on system login &Lanĉi Bitmonon tuj post ensaluto al la sistemo @@ -1036,7 +1036,7 @@ Adreso: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1096,7 +1096,7 @@ Adreso: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig 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. @@ -1152,7 +1152,7 @@ Adreso: %4 &Lingvo de la fasado: - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. Vi povas elekti la lingvon uzata en la aplikaĵo ĉi tie. Tiu ekefikos nur post relanĉo de Bitmono. @@ -1164,7 +1164,7 @@ Adreso: %4 Elekti la defaŭltan manieron por montri bitmonajn sumojn en la interfaco, kaj kiam vi sendos bitmonon. - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. Elekti ĉu videblu Bitmon-adresoj en la listo de transakcioj. @@ -1219,7 +1219,7 @@ Adreso: %4 Formularo - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig 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. @@ -1274,7 +1274,7 @@ Adreso: %4 Traktado de URI-oj - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig 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. @@ -1341,7 +1341,7 @@ Adreso: %4 QObject - Pfennig + pfennig Bitmono @@ -1357,11 +1357,11 @@ Adreso: %4 Eraro: nevalida kunigo de -regtest kaj -testnet - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Enigi Bitmon-adreson (ekz. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,7 +1483,7 @@ Adreso: %4 Sencimiga protokoldosiero - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig 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. @@ -1491,7 +1491,7 @@ Adreso: %4 Malplenigi konzolon - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. Bonvenon al la RPC-konzolo de Bitmono. @@ -1554,7 +1554,7 @@ Adreso: %4 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 Pfennig network. + 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 pfennig network. @@ -1867,7 +1867,7 @@ Adreso: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address Averto: Nevalida Bitmon-adreso @@ -1954,7 +1954,7 @@ Adreso: %4 Tajpu etikedon por tiu ĉi adreso por aldoni ĝin al la listo de uzitaj adresoj - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1973,7 +1973,7 @@ Adreso: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2028,7 +2028,7 @@ Adreso: %4 Kopii la aktualan subskribon al la tondejo - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address Subskribi la mesaĝon por pravigi, ke vi estas la posedanto de tiu Bitmon-adreso @@ -2056,7 +2056,7 @@ Adreso: %4 La adreso per kio oni subskribis la mesaĝon (ekz. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address Kontroli la mesaĝon por pravigi, ke ĝi ja estas subskribita per la specifa Bitmon-adreso @@ -2068,7 +2068,7 @@ Adreso: %4 Reagordigi ĉiujn prikontrolajn kampojn - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Enigi Bitmon-adreson (ekz. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2127,7 +2127,7 @@ Adreso: %4 SplashScreen - Pfennig Core + pfennig Core Kerno de Bitmono @@ -2622,8 +2622,8 @@ Adreso: %4 Specifi dosieron por datumoj - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Aŭskulti al <port> por konektoj (defaŭlte: P2PPORT aŭ testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Aŭskulti al <port> por konektoj (defaŭlte: 40002 aŭ testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2650,15 +2650,15 @@ Adreso: %4 Eraro okazis dum estigo de RPC-pordo %u por aŭskulti per IPv4: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Aŭskulti al <port> por JSON-RPC-konektoj (defaŭlte: RPCPORT aŭ testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Aŭskulti al <port> por JSON-RPC-konektoj (defaŭlte: 40001 aŭ testnet: 50000) Accept command line and JSON-RPC commands Akcepti komandojn JSON-RPC kaj el komandlinio - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2683,7 +2683,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, vi devas specifi rpcpassword en la konfigura dosiero: %s @@ -2766,7 +2766,7 @@ ekzemple: alertnotify=echo %%s | mail -s "Averto de Bitmono" admin@foo 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. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2778,7 +2778,7 @@ ekzemple: alertnotify=echo %%s | mail -s "Averto de Bitmono" admin@foo Averto: -paytxfee estas agordita per tre alta valoro! Tio estas la krompago, kion vi pagos se vi sendas la transakcion. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig 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. @@ -2814,7 +2814,7 @@ ekzemple: alertnotify=echo %%s | mail -s "Averto de Bitmono" admin@foo Provo ripari privatajn ŝlosilojn el difektita wallet.dat - Pfennig Core Daemon + pfennig Core Daemon Bitmonakerna Demono @@ -2834,8 +2834,8 @@ ekzemple: alertnotify=echo %%s | mail -s "Averto de Bitmono" admin@foo - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Konekti al la JSON-RPC per <port> (defaŭlte: RPCPORT aŭ testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Konekti al la JSON-RPC per <port> (defaŭlte: 40001 aŭ testnet: 50000) Connection options: @@ -3058,7 +3058,7 @@ ekzemple: alertnotify=echo %%s | mail -s "Averto de Bitmono" admin@foo Importas blokojn el ekstera dosiero blk000??.dat - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3122,7 +3122,7 @@ ekzemple: alertnotify=echo %%s | mail -s "Averto de Bitmono" admin@foo - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3142,11 +3142,11 @@ ekzemple: alertnotify=echo %%s | mail -s "Averto de Bitmono" admin@foo - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) SSL-agordaĵoj: (vidu la vikio de Bitmono por instrukcioj pri agordado de SSL) - Send command to Pfennig Core + Send command to pfennig Core @@ -3182,7 +3182,7 @@ ekzemple: alertnotify=echo %%s | mail -s "Averto de Bitmono" admin@foo Specifi konektan tempolimon je milisekundoj (defaŭlte: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3298,11 +3298,11 @@ ekzemple: alertnotify=echo %%s | mail -s "Averto de Bitmono" admin@foo Eraro dum ŝargado de wallet.dat: monujo difektita - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig Eraro dum ŝargo de wallet.dat: monujo bezonas pli novan version de Bitmono - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete Monujo bezonas esti reskribita: relanĉu Bitmonon por finfari tion diff --git a/src/qt/locale/bitmark_eo.ts~ b/src/qt/locale/bitmark_eo.ts~ new file mode 100644 index 0000000..d3a9c32 --- /dev/null +++ b/src/qt/locale/bitmark_eo.ts~ @@ -0,0 +1,3389 @@ + + + AboutDialog + + About GameCredits Core + Pri la Bitmona Kerno + + + <b>GameCredits 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 Bitcoin Core Developers + La programistoj de Bitmona Kerno + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Duoble-klaku por redakti adreson aŭ etikedon + + + Create a new address + Krei novan adreson + + + &New + &Nova + + + Copy the currently selected address to the system clipboard + Kopii elektitan adreson al la tondejo + + + &Copy + &Kopii + + + C&lose + &Fermi + + + &Copy Address + &Kopii Adreson + + + 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 + + + &Delete + &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 GameCredits 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 GameCredits 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 + Kopii &Etikedon + + + &Edit + &Redakti + + + Export Address List + Eksporti Adresliston + + + Comma separated file (*.csv) + Perkome disigita dosiero (*.csv) + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Etikedo + + + Address + Adreso + + + (no label) + (neniu etikedo) + + + + AskPassphraseDialog + + Passphrase Dialog + Dialogo pri pasfrazo + + + Enter passphrase + Enigu pasfrazon + + + New passphrase + Nova pasfrazo + + + Repeat new passphrase + 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 uzi pasfrazon kun <b>almenaŭ 10 hazardaj signoj</b>, aŭ <b>almenaŭ ok vortoj</b>. + + + Encrypt wallet + Ĉifri la monujon + + + This operation needs your wallet passphrase to unlock the wallet. + Ĉi tiu operacio bezonas vian monujan pasfrazon, por malŝlosi la monujon. + + + Unlock wallet + Malŝlosi la monujon + + + This operation needs your wallet passphrase to decrypt the wallet. + Ĉi tiu operacio bezonas vian monujan pasfrazon, por malĉifri la monujon. + + + Decrypt wallet + Malĉifri la monujon + + + Change passphrase + Ŝanĝi la pasfrazon + + + Enter the old and new passphrase to the wallet. + Tajpu la malnovan kaj novan monujajn pasfrazojn. + + + Confirm wallet encryption + Konfirmo de ĉifrado de la monujo + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR GameCreditsS</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 + La monujo estas ĉifrita + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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 + Ĉifrado de la monujo fiaskis + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + Ĉifrado de monujo fiaskis pro interna eraro. Via monujo ne estas ĉifrita. + + + The supplied passphrases do not match. + La pasfrazoj entajpitaj ne samas. + + + Wallet unlock failed + Malŝloso de la monujo fiaskis + + + The passphrase entered for the wallet decryption was incorrect. + La pasfrazo enigita por ĉifrado de monujo ne ĝustas. + + + Wallet decryption failed + Malĉifrado de la monujo fiaskis + + + Wallet passphrase was successfully changed. + Vi sukcese ŝanĝis la pasfrazon de la monujo. + + + + GameCreditsGUI + + Sign &message... + Subskribi &mesaĝon... + + + Synchronizing with network... + Sinkronigante kun reto... + + + &Overview + &Superrigardo + + + Node + Nodo + + + Show general overview of wallet + Vidigi ĝeneralan superrigardon de la monujo + + + &Transactions + &Transakcioj + + + Browse transaction history + Esplori historion de transakcioj + + + E&xit + &Eliri + + + Quit application + Eliri la aplikaĵon + + + Show information about GameCredits + Vidigi informojjn pri Bitmono + + + About &Qt + Pri &Qt + + + Show information about Qt + Vidigi informojn pri Qt + + + &Options... + &Agordoj... + + + &Encrypt Wallet... + Ĉifri &Monujon... + + + &Backup Wallet... + &Krei sekurkopion de la monujo... + + + &Change Passphrase... + Ŝ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 GameCredits address + Sendi monon al Bitmon-adreso + + + Modify configuration options for GameCredits + 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... + &Kontroli mesaĝon... + + + GameCredits + Bitmono + + + Wallet + Monujo + + + &Send + &Sendi + + + &Receive + &Ricevi + + + &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 GameCredits 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 GameCredits 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] + + + GameCredits Core + Kerno de Bitmono + + + Request payments (generates QR codes and gamecredits: URIs) + Peti pagon (kreas QR-kodojn kaj URI-ojn kun prefikso gamecredits:) + + + &About GameCredits 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 gamecredits: URI or payment request + Malfermi gamecredits:-URI-on aŭ pagpeton + + + &Command-line options + &Komandliniaj agordaĵoj + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + Bitmon-kliento + + + %n active connection(s) to GameCredits 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 + + + Up to date + Ĝisdata + + + Catching up... + Ĝisdatigante... + + + Sent transaction + Sendita transakcio + + + Incoming transaction + Envenanta transakcio + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Dato: %1 +Sumo: %2 +Tipo: %3 +Adreso: %4 + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</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 aktuale <b>ŝlosita</b> + + + A fatal error occurred. GameCredits 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 + + + + CoinControlDialog + + 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 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 + + + 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 GameCredits address. + La adreso enigita "%1" ne estas valida Bitmon-adreso. + + + Could not unlock wallet. + Ne eblis malŝlosi monujon. + + + New key generation failed. + Fiaskis kreo de nova ŝlosilo. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + Bitmona Kerno - Komandliniaj agordaĵoj + + + GameCredits 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 GameCredits Core. + Bonvenon al la bitmona kerno, GameCredits Core. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Dum tiu ĉi unua uzo de la programo, vi povas elekti lokon, kie GameCredits Core stokos siajn datumojn. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits 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: + + + GameCredits + 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 + 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 GameCredits after logging in to the system. + Aŭtomate lanĉi Bitmonon post ensaluto al la sistemo. + + + &Start GameCredits 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 GameCredits 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 GameCredits 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 + + + Proxy &IP: + Prokurila &IP: + + + &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 GameCredits. + 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 GameCredits 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 + &Bone + + + &Cancel + &Nuligi + + + default + defaŭlta + + + none + neniu + + + Confirm options reset + Konfirmi reŝargo de agordoj + + + 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. + La prokurila adreso estas malvalida. + + + + OverviewPage + + Form + Formularo + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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. + + + 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> + + + out of sync + nesinkronigita + + + + PaymentServer + + URI handling + Traktado de URI-oj + + + URI can not be parsed! This can be caused by an invalid GameCredits 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 gamecredits: 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 + + + + QObject + + GameCredits + 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. + + + + Error: Invalid combination of -regtest and -testnet. + Eraro: nevalida kunigo de -regtest kaj -testnet + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enigi Bitmon-adreson (ekz. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + &Konservi Bildon... + + + &Copy Image + &Kopii Bildon + + + Save QR Code + Konservi QR-kodon + + + 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 + + + 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 + &Malfermi + + + &Console + &Konzolo + + + &Network Traffic + &Reta Trafiko + + + &Clear + &Forigi ĉion + + + Totals + Totaloj + + + In: + En: + + + Out: + El: + + + Build date + Dato de kompilado + + + Debug log file + Sencimiga protokoldosiero + + + Open the GameCredits 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 GameCredits 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 GameCredits 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. + 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 + 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 + Sendi samtempe al pluraj ricevantoj + + + Add &Recipient + Aldoni &Ricevonton + + + Clear all fields of the form. + Malplenigi ĉiujn kampojn de la formularo. + + + Clear &All + &Forigi ĉion + + + Balance: + Saldo: + + + Confirm the send action + Konfirmi la sendon + + + S&end + Ŝendi + + + Confirm send coins + Konfirmi sendon de bitmono + + + %1 to %2 + %1 al %2 + + + 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 + + + + 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. + + + + Warning: Invalid GameCredits address + Averto: Nevalida Bitmon-adreso + + + (no label) + (neniu etikedo) + + + Warning: Unknown change address + + + + 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 + + A&mount: + &Sumo: + + + Pay &To: + &Ricevonto: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + La adreso kie vi sendos la pagon (ekz. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 + Alglui adreson el tondejo + + + Alt+P + Alt+P + + + Remove this entry + Forigu ĉi tiun enskribon + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + Pagi Al: + + + Memo: + Memorando: + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + La adreso por subskribi la mesaĝon (ekz. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Choose previously used address + Elektu la jam uzitan adreson + + + Alt+A + Alt+A + + + Paste address from clipboard + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + La adreso per kio oni subskribis la mesaĝon (ekz. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits 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 GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enigi Bitmon-adreson (ekz. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Klaku "Subskribi Mesaĝon" por krei subskribon + + + 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 + + GameCredits Core + Kerno de Bitmono + + + The Bitcoin 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/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 + + + 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 + + + + 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 + + + Confirmed (%1 confirmations) + 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. + 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 + Kopii adreson + + + Copy label + Kopii etikedon + + + Copy amount + Kopii sumon + + + Copy transaction ID + Kopii transakcian ID-on + + + Edit label + Redakti etikedon + + + Show transaction details + Montri detalojn de transakcio + + + 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) + Perkome disigita dosiero (*.csv) + + + Confirmed + Konfirmita + + + Date + Dato + + + Type + Tipo + + + Label + Etikedo + + + Address + Adreso + + + Amount + Sumo + + + ID + ID + + + 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. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + Sukcesis krei sekurkopion + + + + gamecredits-core + + Usage: + Uzado: + + + List commands + Listigi komandojn + + + Get help for a command + Vidigi helpon pri iu komando + + + Options: + Agordoj: + + + Specify configuration file (default: gamecredits.conf) + Specifi konfiguran dosieron (defaŭlte: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Specifi pid-dosieron (defaŭlte: gamecreditsd.pid) + + + Specify data directory + Specifi dosieron por datumoj + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Aŭskulti al <port> por konektoj (defaŭlte: 40002 aŭ testnet: 50001) + + + 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: 40001 or testnet: 50000) + Aŭskulti al <port> por JSON-RPC-konektoj (defaŭlte: 40001 aŭ testnet: 50000) + + + Accept command line and JSON-RPC commands + Akcepti komandojn JSON-RPC kaj el komandlinio + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, vi devas specifi rpcpassword en la konfigura dosiero: +%s +Estas konsilinde uzi tiun ĉi aleatore kreitan pasvorton: +rpcuser=gamecreditsrpc +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) + + + + 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 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: + + + + 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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits 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 + + + GameCredits 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: 40001 or testnet: 50000) + Konekti al la JSON-RPC per <port> (defaŭlte: 40001 aŭ testnet: 50000) + + + 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. + + + + 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 gamecredits-cli): + Uzado (malaktuala, uzu anstataŭe gamecredits-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. GameCredits 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) + 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 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 + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL-agordaĵoj: (vidu la vikio de Bitmono por instrukcioj pri agordado de SSL) + + + Send command to GameCredits Core + + + + Send trace/debug info to console instead of debug.log file + Sendi spurajn/sencimigajn informojn al la konzolo anstataŭ al dosiero debug.log + + + 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 GameCredits 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) + + + 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... + + + + 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) + + + 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) + + + 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 GameCredits + Eraro dum ŝargo de wallet.dat: monujo bezonas pli novan version de Bitmono + + + Wallet needed to be rewritten: restart GameCredits 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 + + + Loading wallet... + Ŝargado de monujo... + + + Cannot downgrade wallet + Ne eblas malpromocii monujon + + + Cannot write default address + Ne eblas skribi defaŭltan adreson + + + Rescanning... + Reskanado... + + + Done loading + Ŝargado finiĝis + + + To use the %s option + 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/bitmark_es.ts b/src/qt/locale/bitmark_es.ts index a2813fd..55157ad 100644 --- a/src/qt/locale/bitmark_es.ts +++ b/src/qt/locale/bitmark_es.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Acerca de Pfennig Core + About pfennig Core + Acerca de pfennig Core - <b>Pfennig Core</b> version - Versión de <b>Pfennig Core<b> + <b>pfennig Core</b> version + Versión de <b>pfennig Core<b> @@ -32,7 +32,7 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.
The Bitcoin Core Developers - Los desarrolladores de Pfennig Core + Los desarrolladores de pfennig Core (%1-bit) @@ -106,12 +106,12 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.
Direcciones de recepción - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Estas son sus direcciones Pfennig para enviar pagos. Compruebe siempre la cantidad y la dirección receptora antes de enviar pfennigs. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Estas son sus direcciones pfennig para enviar pagos. Compruebe siempre la cantidad y la dirección receptora antes de enviar pfennigs. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Estas son sus direcciones de Pfennig para recibir pagos. Se recomienda utilizar una nueva dirección de recepción para cada transacción. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Estas son sus direcciones de pfennig para recibir pagos. Se recomienda utilizar una nueva dirección de recepción para cada transacción. Copy &Label @@ -208,8 +208,8 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.
Confirmar cifrado del monedero - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Atencion: ¡Si cifra su monedero y pierde la contraseña perderá <b>TODOS SUS PfennigS</b>!" + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Atencion: ¡Si cifra su monedero y pierde la contraseña perderá <b>TODOS SUS pfennigS</b>!" Are you sure you wish to encrypt your wallet? @@ -228,8 +228,8 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.
Monedero cifrado - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig se cerrará para finalizar el proceso de cifrado. Recuerde que el cifrado de su monedero no puede proteger totalmente sus pfennigs de robo por malware que infecte su sistema. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig se cerrará para finalizar el proceso de cifrado. Recuerde que el cifrado de su monedero no puede proteger totalmente sus pfennigs de robo por malware que infecte su sistema. Wallet encryption failed @@ -261,7 +261,7 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.
- PfennigGUI + pfennigGUI Sign &message... Firmar &mensaje... @@ -299,8 +299,8 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.
Salir de la aplicación - Show information about Pfennig - Mostrar información acerca de Pfennig + Show information about pfennig + Mostrar información acerca de pfennig About &Qt @@ -347,12 +347,12 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.
Reindexando bloques en disco... - Send coins to a Pfennig address - Enviar pfennigs a una dirección Pfennig + Send coins to a pfennig address + Enviar pfennigs a una dirección pfennig - Modify configuration options for Pfennig - Modificar las opciones de configuración de Pfennig + Modify configuration options for pfennig + Modificar las opciones de configuración de pfennig Backup wallet to another location @@ -375,8 +375,8 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.
&Verificar mensaje... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -403,12 +403,12 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.
Cifrar las claves privadas de su monedero - Sign messages with your Pfennig addresses to prove you own them - Firmar mensajes con sus direcciones Pfennig para demostrar la propiedad + Sign messages with your pfennig addresses to prove you own them + Firmar mensajes con sus direcciones pfennig para demostrar la propiedad - Verify messages to ensure they were signed with specified Pfennig addresses - Verificar mensajes comprobando que están firmados con direcciones Pfennig concretas + Verify messages to ensure they were signed with specified pfennig addresses + Verificar mensajes comprobando que están firmados con direcciones pfennig concretas &File @@ -431,16 +431,16 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.
[testnet] - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core Request payments (generates QR codes and pfennig: URIs) - Solicitar pagos (genera codigo QR y URL's de Pfennig) + Solicitar pagos (genera codigo QR y URL's de pfennig) - &About Pfennig Core - &Acerca de Pfennig Core + &About pfennig Core + &Acerca de pfennig Core Show the list of used sending addresses and labels @@ -459,16 +459,16 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.
&Opciones de consola de comandos - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Muestra el mensaje de ayuda Pfennig Core para obtener una lista con las posibles opciones de la consola de comandos de Pfennig + Show the pfennig Core help message to get a list with possible pfennig command-line options + Muestra el mensaje de ayuda pfennig Core para obtener una lista con las posibles opciones de la consola de comandos de pfennig - Pfennig client - Cliente Pfennig + pfennig client + Cliente pfennig - %n active connection(s) to Pfennig network - %n conexión activa hacia la red Pfennig%n conexiones activas hacia la red Pfennig + %n active connection(s) to pfennig network + %n conexión activa hacia la red pfennig%n conexiones activas hacia la red pfennig No block source available... @@ -563,8 +563,8 @@ Dirección: %4 El monedero está <b>cifrado</b> y actualmente <b>bloqueado</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Ha ocurrido un error crítico. Pfennig ya no puede continuar con seguridad y se cerrará. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Ha ocurrido un error crítico. pfennig ya no puede continuar con seguridad y se cerrará. @@ -848,8 +848,8 @@ Dirección: %4 La dirección introducida "%1" ya está presente en la libreta de direcciones. - The entered address "%1" is not a valid Pfennig address. - La dirección introducida "%1" no es una dirección Pfennig válida. + The entered address "%1" is not a valid pfennig address. + La dirección introducida "%1" no es una dirección pfennig válida. Could not unlock wallet. @@ -886,12 +886,12 @@ Dirección: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core - Opciones de consola de comandos + pfennig Core - Command-line options + pfennig Core - Opciones de consola de comandos - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core version @@ -937,16 +937,16 @@ Dirección: %4 Bienvenido - Welcome to Pfennig Core. - Bienvenido a Pfennig Core + Welcome to pfennig Core. + Bienvenido a pfennig Core - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Al ser la primera vez que se ejecuta el programa, puede elegir dónde almacenará sus datos Pfennig Core. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Al ser la primera vez que se ejecuta el programa, puede elegir dónde almacenará sus datos pfennig Core. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig Core va a descargar y guardar una copia de la cadena de bloques de Pfennig. 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. + pfennig Core will download and store a copy of the pfennig 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. + pfennig Core va a descargar y guardar una copia de la cadena de bloques de pfennig. 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 @@ -957,8 +957,8 @@ Dirección: %4 Utilice un directorio de datos personalizado: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1019,12 +1019,12 @@ Dirección: %4 Comisión de &transacciones - Automatically start Pfennig after logging in to the system. - Iniciar Pfennig automáticamente al encender el sistema. + Automatically start pfennig after logging in to the system. + Iniciar pfennig automáticamente al encender el sistema. - &Start Pfennig on system login - &Iniciar Pfennig al iniciar el sistema + &Start pfennig on system login + &Iniciar pfennig al iniciar el sistema Size of &database cache @@ -1039,8 +1039,8 @@ Dirección: %4 Número de procesos de &verificación de scripts - Connect to the Pfennig network through a SOCKS proxy. - Conectarse a la red Pfennig a través de un proxy SOCKS. + Connect to the pfennig network through a SOCKS proxy. + Conectarse a la red pfennig a través de un proxy SOCKS. &Connect through SOCKS proxy (default proxy): @@ -1099,8 +1099,8 @@ Dirección: %4 &Gastar cambio no confirmado - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Abrir automáticamente el puerto del cliente Pfennig en el router. Esta opción solo funciona si el router admite UPnP y está activado. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Abrir automáticamente el puerto del cliente pfennig en el router. Esta opción solo funciona si el router admite UPnP y está activado. Map port using &UPnP @@ -1155,8 +1155,8 @@ Dirección: %4 I&dioma de la interfaz de usuario - The user interface language can be set here. This setting will take effect after restarting Pfennig. - El idioma de la interfaz de usuario puede establecerse aquí. Este ajuste se aplicará cuando se reinicie Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + El idioma de la interfaz de usuario puede establecerse aquí. Este ajuste se aplicará cuando se reinicie pfennig. &Unit to show amounts in: @@ -1167,8 +1167,8 @@ Dirección: %4 Elegir la subdivisión predeterminada para mostrar cantidades en la interfaz y cuando se envían pfennigs. - Whether to show Pfennig addresses in the transaction list or not. - Mostrar o no las direcciones Pfennig en la lista de transacciones. + Whether to show pfennig addresses in the transaction list or not. + Mostrar o no las direcciones pfennig en la lista de transacciones. &Display addresses in transaction list @@ -1222,8 +1222,8 @@ Dirección: %4 Desde - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig después de que se haya establecido una conexión, pero este proceso aún no se ha completado. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig después de que se haya establecido una conexión, pero este proceso aún no se ha completado. Wallet @@ -1277,8 +1277,8 @@ Dirección: %4 Gestión de URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - ¡No se puede interpretar la URI! Esto puede deberse a una dirección Pfennig inválida o a parámetros de URI mal formados. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + ¡No se puede interpretar la URI! Esto puede deberse a una dirección pfennig inválida o a parámetros de URI mal formados. Requested payment amount of %1 is too small (considered dust). @@ -1344,8 +1344,8 @@ Dirección: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1360,12 +1360,12 @@ Dirección: %4 Error: Combinación no válida de -regtest y -testnet. - Pfennig Core didn't yet exit safely... - Pfennig core no se ha cerrado de forma segura todavía... + pfennig Core didn't yet exit safely... + pfennig core no se ha cerrado de forma segura todavía... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introduzca una dirección Pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduzca una dirección pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1486,7 +1486,7 @@ Dirección: %4 Archivo de registro de depuración - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig 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. @@ -1494,8 +1494,8 @@ Dirección: %4 Borrar consola - Welcome to the Pfennig RPC console. - Bienvenido a la consola RPC de Pfennig + Welcome to the pfennig RPC console. + Bienvenido a la consola RPC de pfennig Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1557,8 +1557,8 @@ Dirección: %4 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 Pfennig 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 Pfennig. + 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 pfennig 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 pfennig. An optional label to associate with the new receiving address. @@ -1870,8 +1870,8 @@ Dirección: %4 ¡La transacción fue rechazada! Esto puede haber ocurrido si alguno de los pfennigs de su monedero ya estaba gastado o si ha usado una copia de wallet.dat y los pfennigs estaban gastados en la copia pero no se habían marcado como gastados aqui. - Warning: Invalid Pfennig address - Alerta: Dirección de Pfennig inválida + Warning: Invalid pfennig address + Alerta: Dirección de pfennig inválida (no label) @@ -1879,7 +1879,7 @@ Dirección: %4 Warning: Unknown change address - Alerta: Dirección de Pfennig inválida + Alerta: Dirección de pfennig inválida Are you sure you want to send? @@ -1957,8 +1957,8 @@ Dirección: %4 Introduce una etiqueta para esta dirección para añadirla a la lista de direcciones utilizadas - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. - Un mensaje que se adjuntó a la pfennig: URL que será almacenada con la transacción para su referencia. Nota: Este mensaje no se envía a través de la red Pfennig. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. + Un mensaje que se adjuntó a la pfennig: URL que será almacenada con la transacción para su referencia. Nota: Este mensaje no se envía a través de la red pfennig. This is an unverified payment request. @@ -1976,8 +1976,8 @@ Dirección: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig Core se está cerrando... + pfennig Core is shutting down... + pfennig Core se está cerrando... Do not shut down the computer until this window disappears. @@ -2031,8 +2031,8 @@ Dirección: %4 Copiar la firma actual al portapapeles del sistema - Sign the message to prove you own this Pfennig address - Firmar el mensaje para demostrar que se posee esta dirección Pfennig + Sign the message to prove you own this pfennig address + Firmar el mensaje para demostrar que se posee esta dirección pfennig Sign &Message @@ -2059,8 +2059,8 @@ Dirección: %4 La dirección con la que se firmó el mensaje (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Verificar el mensaje para comprobar que fue firmado con la dirección Pfennig indicada + Verify the message to ensure it was signed with the specified pfennig address + Verificar el mensaje para comprobar que fue firmado con la dirección pfennig indicada Verify &Message @@ -2071,8 +2071,8 @@ Dirección: %4 Vaciar todos los campos de la verificación de mensaje - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introduzca una dirección Pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduzca una dirección pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2130,12 +2130,12 @@ Dirección: %4 SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core The Bitcoin Core Developers - Los desarrolladores de Pfennig Core + Los desarrolladores de pfennig Core [testnet] @@ -2630,8 +2630,8 @@ Dirección: %4 Especificar directorio para los datos - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Escuchar conexiones en <puerto> (predeterminado: P2PPORT o testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Escuchar conexiones en <puerto> (predeterminado: 40002 o testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2658,8 +2658,8 @@ Dirección: %4 Ha ocurrido un error al configurar el puerto RPC %u para escucha en IPv4: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Escuchar conexiones JSON-RPC en <puerto> (predeterminado: RPCPORT o testnet:1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Escuchar conexiones JSON-RPC en <puerto> (predeterminado: 40001 o testnet:50000) Accept command line and JSON-RPC commands @@ -2667,8 +2667,8 @@ Dirección: %4 - Pfennig Core RPC client version - Versión del cliente RPC de Pfennig Core RPC + pfennig Core RPC client version + Versión del cliente RPC de pfennig Core RPC Run in the background as a daemon and accept commands @@ -2694,7 +2694,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, debe establecer un valor rpcpassword en el archivo de configuración: %s @@ -2705,7 +2705,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +Por ejemplo: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2777,8 +2777,8 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 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. Pfennig Core is probably already running. - No se ha podido acceder a %s en esta máquina. Probablemente ya se está ejecutando Pfennig Core. + Unable to bind to %s on this computer. pfennig Core is probably already running. + No se ha podido acceder a %s en esta máquina. Probablemente ya se está ejecutando pfennig Core. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2789,8 +2789,8 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 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 Pfennig will not work properly. - Precaución: Por favor, ¡revise que la fecha y hora de su ordenador son correctas! Si su reloj está mal, Pfennig no funcionará correctamente. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Precaución: Por favor, ¡revise que la fecha y hora de su ordenador son correctas! Si su reloj está mal, pfennig no funcionará correctamente. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2825,8 +2825,8 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Intento de recuperar claves privadas de un wallet.dat corrupto - Pfennig Core Daemon - Pfennig Core Daemon (proceso independiente) + pfennig Core Daemon + pfennig Core Daemon (proceso independiente) Block creation options: @@ -2845,8 +2845,8 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Conectar a través de un proxy SOCKS - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Conectar a JSON-RPC en <puerto> (predeterminado: RPCPORT o testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Conectar a JSON-RPC en <puerto> (predeterminado: 40001 o testnet: 50000) Connection options: @@ -3069,8 +3069,8 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Importa los bloques desde un archivo blk000??.dat externo - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - No se ha podido bloquear el directorio de datos %s. Probablemente ya se está ejecutando Pfennig Core. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + No se ha podido bloquear el directorio de datos %s. Probablemente ya se está ejecutando pfennig Core. Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) @@ -3133,8 +3133,8 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Imprimir árbol de bloques al iniciar (predeterminado: 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) - Opciones SSL de RPC: (véase la wiki de Pfennig para las instrucciones de instalación de SSL) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) + Opciones SSL de RPC: (véase la wiki de pfennig para las instrucciones de instalación de SSL) RPC server options: @@ -3153,12 +3153,12 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Ejecutar un hilo (thread) para limpiar de la memoria el monedero periódicamente (predeterminado: 1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Opciones SSL: (ver la Pfennig Wiki para instrucciones de configuración SSL) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Opciones SSL: (ver la pfennig Wiki para instrucciones de configuración SSL) - Send command to Pfennig Core - Enviar orden a Pfennig Core + Send command to pfennig Core + Enviar orden a pfennig Core Send trace/debug info to console instead of debug.log file @@ -3193,8 +3193,8 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Especificar el tiempo máximo de conexión en milisegundos (predeterminado: 5000) - Start Pfennig Core Daemon - Iniciar Pfennig Core Daemon + Start pfennig Core Daemon + Iniciar pfennig Core Daemon System error: @@ -3318,12 +3318,12 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Error al cargar wallet.dat: el monedero está dañado - Error loading wallet.dat: Wallet requires newer version of Pfennig - Error al cargar wallet.dat: El monedero requiere una versión más reciente de Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Error al cargar wallet.dat: El monedero requiere una versión más reciente de pfennig - Wallet needed to be rewritten: restart Pfennig to complete - El monedero ha necesitado ser reescrito. Reinicie Pfennig para completar el proceso + Wallet needed to be rewritten: restart pfennig to complete + El monedero ha necesitado ser reescrito. Reinicie pfennig para completar el proceso Error loading wallet.dat diff --git a/src/qt/locale/bitmark_es.ts~ b/src/qt/locale/bitmark_es.ts~ new file mode 100644 index 0000000..14dbfd6 --- /dev/null +++ b/src/qt/locale/bitmark_es.ts~ @@ -0,0 +1,3409 @@ + + + AboutDialog + + About GameCredits Core + Acerca de GameCredits Core + + + <b>GameCredits Core</b> version + Versión de <b>GameCredits 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. + +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 Bitcoin Core Developers + Los desarrolladores de GameCredits Core + + + (%1-bit) + (%1-bit) + + + + AddressBookPage + + Double-click to edit address or label + 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 + + + &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 a la que enviar gamecreditss + + + Choose the address to receive coins with + Escoja la dirección de la que recibir gamecreditss + + + C&hoose + &Escoger + + + Sending addresses + Direcciones de envío + + + Receiving addresses + Direcciones de recepción + + + These are your GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Estas son sus direcciones GameCredits para enviar pagos. Compruebe siempre la cantidad y la dirección receptora antes de enviar gamecreditss. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Estas son sus direcciones de GameCredits 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. + Ha habido un error al intentar guardar los datos del monedero en %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 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 GameCreditsS</b>! + Atencion: ¡Si cifra su monedero y pierde la contraseña perderá <b>TODOS SUS GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits se cerrará para finalizar el proceso de cifrado. Recuerde que el cifrado de su monedero no puede proteger totalmente sus gamecreditss 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. + + + + GameCreditsGUI + + 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 GameCredits + Mostrar información acerca de GameCredits + + + About &Qt + Acerca de &Qt + + + Show information about Qt + Mostrar información acerca de Qt + + + &Options... + &Opciones... + + + &Encrypt Wallet... + &Cifrar monedero… + + + &Backup Wallet... + &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 GameCredits address + Enviar gamecreditss a una dirección GameCredits + + + Modify configuration options for GameCredits + Modificar las opciones de configuración de GameCredits + + + 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... + + + GameCredits + GameCredits + + + 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 GameCredits addresses to prove you own them + Firmar mensajes con sus direcciones GameCredits para demostrar la propiedad + + + Verify messages to ensure they were signed with specified GameCredits addresses + Verificar mensajes comprobando que están firmados con direcciones GameCredits concretas + + + &File + &Archivo + + + &Settings + &Configuración + + + &Help + A&yuda + + + Tabs toolbar + Barra de pestañas + + + [testnet] + [testnet] + + + GameCredits Core + GameCredits Core + + + Request payments (generates QR codes and gamecredits: URIs) + Solicitar pagos (genera codigo QR y URL's de GameCredits) + + + &About GameCredits Core + &Acerca de GameCredits 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 gamecredits: URI or payment request + Abrir un gamecredits: URI o petición de pago + + + &Command-line options + &Opciones de consola de comandos + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Muestra el mensaje de ayuda GameCredits Core para obtener una lista con las posibles opciones de la consola de comandos de GameCredits + + + GameCredits client + Cliente GameCredits + + + %n active connection(s) to GameCredits network + %n conexión activa hacia la red GameCredits%n conexiones activas hacia la red GameCredits + + + 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 + %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ú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. GameCredits can no longer continue safely and will quit. + Ha ocurrido un error crítico. GameCredits ya no puede continuar con seguridad y se cerrará. + + + + 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 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 GameCredits address. + La dirección introducida "%1" no es una dirección GameCredits 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 + + GameCredits Core - Command-line options + GameCredits Core - Opciones de consola de comandos + + + GameCredits Core + GameCredits Core + + + version + versión + + + Usage: + Uso: + + + command-line options + 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 GameCredits Core. + Bienvenido a GameCredits Core + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Al ser la primera vez que se ejecuta el programa, puede elegir dónde almacenará sus datos GameCredits Core. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits Core va a descargar y guardar una copia de la cadena de bloques de GameCredits. 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: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Iniciar GameCredits automáticamente al encender el sistema. + + + &Start GameCredits on system login + &Iniciar GameCredits 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 GameCredits network through a SOCKS proxy. + Conectarse a la red GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Abrir automáticamente el puerto del cliente GameCredits 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 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ú. + + + 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 GameCredits. + El idioma de la interfaz de usuario puede establecerse aquí. Este ajuste se aplicará cuando se reinicie GameCredits. + + + &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 gamecreditss. + + + Whether to show GameCredits addresses in the transaction list or not. + Mostrar o no las direcciones GameCredits 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 + + + default + predeterminado + + + none + ninguna + + + Confirm options reset + Confirme el restablecimiento de las opciones + + + Client restart required to activate changes. + Se necesita reiniciar el cliente para activar los cambios. + + + Client will be shutdown, do you want to proceed? + El cliente se cerrará. ¿Desea continuar? + + + This change would require a client restart. + Este cambio exige el reinicio 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 GameCredits 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 GameCredits después de que se haya establecido una conexión, pero este proceso aún no se ha completado. + + + 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> + + + out of sync + desincronizado + + + + PaymentServer + + URI handling + Gestión de URI + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + ¡No se puede interpretar la URI! Esto puede deberse a una dirección GameCredits 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 gamecredits: click-to-pay handler + No se pudo iniciar gamecredits: 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 + + + + QObject + + GameCredits + GameCredits + + + 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: No se ha podido leer el archivo de configuración: %1. Debe utilizarse solamente la sintaxis clave=valor. + + + Error: Invalid combination of -regtest and -testnet. + Error: Combinación no válida de -regtest y -testnet. + + + GameCredits Core didn't yet exit safely... + GameCredits core no se ha cerrado de forma segura todavía... + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduzca una dirección GameCredits (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + &Vaciar + + + Totals + Total: + + + In: + Entrante: + + + Out: + Saliente: + + + Build date + Fecha de compilación + + + Debug log file + Archivo de registro de depuración + + + Open the GameCredits 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 GameCredits RPC console. + Bienvenido a la consola RPC de GameCredits + + + 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 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 GameCredits 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 GameCredits. + + + 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 gamecreditss + + + 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 múltiples destinatarios de una vez + + + Add &Recipient + Añadir &destinatario + + + Clear all fields of the form. + Vaciar todos los campos del formulario + + + Clear &All + Vaciar &todo + + + Balance: + Saldo: + + + Confirm the send action + Confirmar el envío + + + S&end + &Enviar + + + Confirm send coins + Confirmar el envío de gamecreditss + + + %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 alguno de los gamecreditss de su monedero ya estaba gastado o si ha usado una copia de wallet.dat y los gamecreditss estaban gastados en la copia pero no se habían marcado como gastados aqui. + + + Warning: Invalid GameCredits address + Alerta: Dirección de GameCredits inválida + + + (no label) + (sin etiqueta) + + + Warning: Unknown change address + Alerta: Dirección de GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + La dirección a la que enviar el pago (p. ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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: + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + Un mensaje que se adjuntó a la gamecredits: URL que será almacenada con la transacción para su referencia. Nota: Este mensaje no se envía a través de la red GameCredits. + + + This is an unverified payment request. + Esto es una petición de pago no verificado. + + + Pay To: + Paga a: + + + Memo: + Memo: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + La dirección con la que firmar el mensaje (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Firmar el mensaje para demostrar que se posee esta dirección GameCredits + + + Sign &Message + Firmar &mensaje + + + Reset all sign message fields + Vaciar todos los campos de la firma de mensaje + + + Clear &All + 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + La dirección con la que se firmó el mensaje (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Verificar el mensaje para comprobar que fue firmado con la dirección GameCredits indicada + + + Verify &Message + Verificar &mensaje + + + Reset all verify message fields + Vaciar todos los campos de la verificación de mensaje + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduzca una dirección GameCredits (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + GameCredits Core + + + The Bitcoin Core Developers + Los desarrolladores de GameCredits 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 + + + 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 gamecreditss 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 + + + + 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) + 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 + + + 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 + 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. + + + + 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 gamecreditss + + + + 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 + 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 %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 la copia de seguridad del monedero + + + + gamecredits-core + + Usage: + Uso: + + + List commands + Muestra comandos + + + + Get help for a command + Recibir ayuda para un comando + + + + Options: + Opciones: + + + + Specify configuration file (default: gamecredits.conf) + Especificar archivo de configuración (predeterminado: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + Especificar archivo pid (predeterminado: gamecredits.pid) + + + + Specify data directory + Especificar directorio para los datos + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Escuchar conexiones en <puerto> (predeterminado: 40002 o testnet: 50001) + + + 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: 40001 or testnet: 50000) + Escuchar conexiones JSON-RPC en <puerto> (predeterminado: 40001 o testnet:50000) + + + Accept command line and JSON-RPC commands + Aceptar comandos consola y JSON-RPC + + + + GameCredits Core RPC client version + Versión del cliente RPC de GameCredits Core RPC + + + 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=gamecreditsrpc +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 "GameCredits 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=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + + + 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 + + + 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 algunos de los gamecreditss del monedero, como ocurriría si hubiera hecho una copia de wallet.dat y se hubieran gastado gamecreditss 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 cantidad, 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: + 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. GameCredits Core is probably already running. + No se ha podido acceder a %s en esta máquina. Probablemente ya se está ejecutando GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Precaución: Por favor, ¡revise que la fecha y hora de su ordenador son correctas! Si su reloj está mal, GameCredits 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 + + + GameCredits Core Daemon + GameCredits 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: 40001 or testnet: 50000) + Conectar a JSON-RPC en <puerto> (predeterminado: 40001 o testnet: 50000) + + + 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 gamecreditss + + + 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) + + + Force safe mode (default: 0) + Forzar modo seguro (predeterminado: 0) + + + Generate coins (default: 0) + Generar gamecreditss (predeterminado: 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... + 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 + + + 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 gamecredits-cli): + Uso (desaconsejado, usar gamecredits-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 + + + Cannot obtain a lock on data directory %s. GameCredits Core is probably already running. + No se ha podido bloquear el directorio de datos %s. Probablemente ya se está ejecutando GameCredits 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 amount for -minrelaytxfee=<amount>: '%s' + Cantidad inválida para -minrelaytxfee=<amount>: '%s' + + + Invalid amount for -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) + + + Print block on startup, if found in block index + Imprimir bloque al iniciar, si se encuentra en el índice de bloques + + + Print block tree on startup (default: 0) + Imprimir árbol de bloques al iniciar (predeterminado: 0) + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + Opciones SSL de RPC: (véase la wiki de GameCredits para las instrucciones de instalación de SSL) + + + RPC server options: + Opciones de servidor RPC: + + + 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 GameCredits Wiki for SSL setup instructions) + Opciones SSL: (ver la GameCredits Wiki para instrucciones de configuración SSL) + + + Send command to GameCredits Core + Enviar orden a GameCredits 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) + 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 GameCredits Core Daemon + Iniciar GameCredits Core Daemon + + + System error: + Error de sistema: + + + Transaction amount too small + Cantidad de la transacción demasiado pequeña + + + Transaction amounts must be positive + 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) + + + 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... + 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) + + + + 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 GameCredits + Error al cargar wallet.dat: El monedero requiere una versión más reciente de GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + El monedero ha necesitado ser reescrito. Reinicie GameCredits 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/bitmark_es_CL.ts b/src/qt/locale/bitmark_es_CL.ts index 3ba16dd..916c81c 100644 --- a/src/qt/locale/bitmark_es_CL.ts +++ b/src/qt/locale/bitmark_es_CL.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -106,11 +106,11 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard. - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -208,8 +208,8 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard.Confirma la codificación de cartera - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Atención: ¡Si codificas tu billetera y pierdes la contraseña perderás <b>TODOS TUS PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Atención: ¡Si codificas tu billetera y pierdes la contraseña perderás <b>TODOS TUS pfennigS</b>! Are you sure you wish to encrypt your wallet? @@ -228,8 +228,8 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard.Billetera codificada - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig se cerrará para finalizar el proceso de encriptación. Recuerde que encriptar su billetera no protegera completatamente sus pfennigs de ser robados por malware que infecte su computador + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig se cerrará para finalizar el proceso de encriptación. Recuerde que encriptar su billetera no protegera completatamente sus pfennigs de ser robados por malware que infecte su computador Wallet encryption failed @@ -261,7 +261,7 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard. - PfennigGUI + pfennigGUI Sign &message... Firmar &Mensaje... @@ -299,8 +299,8 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard.Salir del programa - Show information about Pfennig - Muestra información acerca de Pfennig + Show information about pfennig + Muestra información acerca de pfennig About &Qt @@ -347,11 +347,11 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard.Cargando el index de bloques... - Send coins to a Pfennig address + Send coins to a pfennig address Enviar monedas a una dirección pfennig - Modify configuration options for Pfennig + Modify configuration options for pfennig Modifica las opciones de configuración de pfennig @@ -375,8 +375,8 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard. - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -403,11 +403,11 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard. - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig 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 Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -431,7 +431,7 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard.[red-de-pruebas] - Pfennig Core + pfennig Core @@ -439,7 +439,7 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard. - &About Pfennig Core + &About pfennig Core @@ -459,16 +459,16 @@ Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard. - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Cliente Pfennig + pfennig client + Cliente pfennig - %n active connection(s) to Pfennig network - %n conexión activa hacia la red Pfennig%n conexiones activas hacia la red Pfennig + %n active connection(s) to pfennig network + %n conexión activa hacia la red pfennig%n conexiones activas hacia la red pfennig No block source available... @@ -562,7 +562,7 @@ Dirección: %4 La billetera esta <b>codificada</b> y actualmente <b>bloqueda</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -847,8 +847,8 @@ Dirección: %4 La dirección introducida "%1" ya esta guardada en la libreta de direcciones. - The entered address "%1" is not a valid Pfennig address. - La dirección introducida "%1" no es una dirección Pfennig valida. + The entered address "%1" is not a valid pfennig address. + La dirección introducida "%1" no es una dirección pfennig valida. Could not unlock wallet. @@ -885,11 +885,11 @@ Dirección: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -937,15 +937,15 @@ Dirección: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -957,8 +957,8 @@ Dirección: %4 - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1019,12 +1019,12 @@ Dirección: %4 Comisión de &transacciónes - Automatically start Pfennig after logging in to the system. - Inicia Pfennig automáticamente despues de encender el computador + Automatically start pfennig after logging in to the system. + Inicia pfennig automáticamente despues de encender el computador - &Start Pfennig on system login - &Inicia Pfennig al iniciar el sistema + &Start pfennig on system login + &Inicia pfennig al iniciar el sistema Size of &database cache @@ -1039,7 +1039,7 @@ Dirección: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1099,8 +1099,8 @@ Dirección: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Abre automáticamente el puerto del cliente Pfennig en el router. Esto funciona solo cuando tu router es compatible con UPnP y está habilitado. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Abre automáticamente el puerto del cliente pfennig en el router. Esto funciona solo cuando tu router es compatible con UPnP y está habilitado. Map port using &UPnP @@ -1155,7 +1155,7 @@ Dirección: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1167,7 +1167,7 @@ Dirección: %4 Elige la subdivisión por defecto para mostrar cantidaded en la interfaz cuando se envien monedas - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1222,7 +1222,7 @@ Dirección: %4 Formulario - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1277,7 +1277,7 @@ Dirección: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1344,8 +1344,8 @@ Dirección: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1360,12 +1360,12 @@ Dirección: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introduce una dirección Pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduce una dirección pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1486,7 +1486,7 @@ Dirección: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1494,7 +1494,7 @@ Dirección: %4 Limpiar Consola - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1557,7 +1557,7 @@ Dirección: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1870,7 +1870,7 @@ Dirección: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1957,7 +1957,7 @@ Dirección: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1976,7 +1976,7 @@ Dirección: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2000,7 +2000,7 @@ Dirección: %4 The address to sign the message with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introduce una dirección Pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduce una dirección pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Choose previously used address @@ -2031,7 +2031,7 @@ Dirección: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address Firmar un mensjage para probar que usted es dueño de esta dirección @@ -2056,10 +2056,10 @@ Dirección: %4 The address the message was signed with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introduce una dirección Pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduce una dirección pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2071,8 +2071,8 @@ Dirección: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introduce una dirección Pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduce una dirección pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2080,11 +2080,11 @@ Dirección: %4 The entered address is invalid. - La dirección introducida "%1" no es una dirección Pfennig valida. + La dirección introducida "%1" no es una dirección pfennig valida. Please check the address and try again. - Por favor, revise la dirección Pfennig e inténtelo denuevo + Por favor, revise la dirección pfennig e inténtelo denuevo The entered address does not refer to a key. @@ -2130,7 +2130,7 @@ Dirección: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2631,8 +2631,8 @@ Dirección: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Escuchar por conecciones en <puerto> (Por defecto: P2PPORT o red de prueba: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Escuchar por conecciones en <puerto> (Por defecto: 40002 o red de prueba: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2659,8 +2659,8 @@ Dirección: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Escucha conexiones JSON-RPC en el puerto <port> (predeterminado: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Escucha conexiones JSON-RPC en el puerto <port> (predeterminado: 40001 or testnet: 50000) Accept command line and JSON-RPC commands @@ -2668,7 +2668,7 @@ Dirección: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2695,7 +2695,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2768,7 +2768,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2780,8 +2780,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Precaución: -paytxfee es muy alta. Esta es la comisión que pagarás si envias una transacción. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig 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 Pfennig no funcionará correctamente. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig 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 pfennig no funcionará correctamente. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2816,7 +2816,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2837,7 +2837,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3061,7 +3061,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Importar bloques desde el archivo externo blk000??.dat - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3125,7 +3125,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3145,11 +3145,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Opciones SSL: (ver la Pfennig Wiki para instrucciones de configuración SSL) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Opciones SSL: (ver la pfennig Wiki para instrucciones de configuración SSL) - Send command to Pfennig Core + Send command to pfennig Core @@ -3185,7 +3185,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Especifica tiempo de espera para conexion en milisegundos (predeterminado: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3312,12 +3312,12 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Error cargando wallet.dat: Billetera corrupta - Error loading wallet.dat: Wallet requires newer version of Pfennig - Error cargando wallet.dat: Billetera necesita una vercion reciente de Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Error cargando wallet.dat: Billetera necesita una vercion reciente de pfennig - Wallet needed to be rewritten: restart Pfennig to complete - La billetera necesita ser reescrita: reinicie Pfennig para completar + Wallet needed to be rewritten: restart pfennig to complete + La billetera necesita ser reescrita: reinicie pfennig para completar Error loading wallet.dat diff --git a/src/qt/locale/bitmark_es_CL.ts~ b/src/qt/locale/bitmark_es_CL.ts~ new file mode 100644 index 0000000..0b3849c --- /dev/null +++ b/src/qt/locale/bitmark_es_CL.ts~ @@ -0,0 +1,3401 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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. + +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/), software criptográfico escrito por +Eric Young (eay@cryptsoft.com) y UPnP software escrito por Thomas Bernard. + + + Copyright + Copyright + + + The Bitcoin Core Developers + + + + (%1-bit) + + + + + AddressBookPage + + 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 + + + &Copy + + + + C&lose + + + + &Copy Address + &Copia dirección + + + 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 + + + + &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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + Copia &etiqueta + + + &Edit + &Editar + + + 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 + Dirección + + + (no label) + (sin etiqueta) + + + + AskPassphraseDialog + + Passphrase Dialog + + + + Enter passphrase + Introduce contraseña actual + + + New passphrase + Nueva contraseña + + + Repeat new passphrase + 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 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 GameCreditsS</b>! + Atención: ¡Si codificas tu billetera y pierdes la contraseña perderás <b>TODOS TUS GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits se cerrará para finalizar el proceso de encriptación. Recuerde que encriptar su billetera no protegera completatamente sus gamecreditss 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. + + + + GameCreditsGUI + + 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 + &Transacciones + + + Browse transaction history + Explora el historial de transacciónes + + + E&xit + &Salir + + + Quit application + Salir del programa + + + Show information about GameCredits + Muestra información acerca de GameCredits + + + 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 GameCredits address + Enviar monedas a una dirección gamecredits + + + Modify configuration options for GameCredits + Modifica las opciones de configuración de gamecredits + + + 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... + + + + GameCredits + GameCredits + + + Wallet + Cartera + + + &Send + + + + &Receive + + + + &Show / Hide + &Mostrar/Ocultar + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits 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 GameCredits addresses + + + + &File + &Archivo + + + &Settings + &Configuración + + + &Help + &Ayuda + + + Tabs toolbar + Barra de pestañas + + + [testnet] + [red-de-pruebas] + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + Cliente GameCredits + + + %n active connection(s) to GameCredits network + %n conexión activa hacia la red GameCredits%n conexiones activas hacia la red GameCredits + + + 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 + + + Up to date + Actualizado + + + Catching up... + Recuperando... + + + 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> + 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. GameCredits can no longer continue safely and will quit. + + + + + 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 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 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 GameCredits address. + La dirección introducida "%1" no es una dirección GameCredits valida. + + + Could not unlock wallet. + No se pudo desbloquear la billetera. + + + New key generation failed. + La generación de nueva clave falló. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Inicia GameCredits automáticamente despues de encender el computador + + + &Start GameCredits on system login + &Inicia GameCredits al iniciar el sistema + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Abre automáticamente el puerto del cliente GameCredits 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 + + + Proxy &IP: + &IP Proxy: + + + &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 GameCredits. + + + + &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 GameCredits 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 + + + default + predeterminado + + + none + + + + Confirm options reset + Confirmar reestablecimiento de las opciones + + + 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 GameCredits network after a connection is established, but this process has not completed yet. + + + + 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> + + + out of sync + desincronizado + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + + + + QObject + + GameCredits + GameCredits + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduce una dirección GameCredits (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + Guardar imagen... + + + &Copy Image + Copiar Imagen + + + Save QR Code + + + + 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 + + + Block chain + Bloquea cadena + + + Current number of blocks + + + + Estimated total blocks + + + + Last block time + + + + &Open + &Abrir + + + &Console + &Consola + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the GameCredits 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 GameCredits 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 GameCredits 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 + + + Clear all fields of the form. + + + + Clear &All + &Borra todos + + + Balance: + Balance: + + + Confirm the send action + Confirma el envio + + + S&end + &Envía + + + Confirm send coins + Confirmar el envio de monedas + + + %1 to %2 + + + + 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. + + + 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 GameCredits 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: + Cantidad: + + + Pay &To: + &Pagar a: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + La dirección donde enviar el pago (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduce una dirección GameCredits (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduce una dirección GameCredits (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + &Firmar Mensaje + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduce una dirección GameCredits (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Click en "Firmar Mensage" para conseguir firma + + + The entered address is invalid. + La dirección introducida "%1" no es una dirección GameCredits valida. + + + Please check the address and try again. + Por favor, revise la dirección GameCredits 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 + + GameCredits Core + + + + The Bitcoin 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 + + + 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 + + + + 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) + Abierto para &n bloque másAbierto 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 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 + + + + 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 + + + + 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 + + + Range: + Rango: + + + to + para + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + Enviar monedas + + + + 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 %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + gamecredits-core + + Usage: + Uso: + + + List commands + Muestra comandos + + + + Get help for a command + Recibir ayuda para un comando + + + + Options: + Opciones: + + + + Specify configuration file (default: gamecredits.conf) + Especifica archivo de configuración (predeterminado: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + Especifica archivo pid (predeterminado: gamecredits.pid) + + + + Specify data directory + Especifica directorio para los datos + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Escuchar por conecciones en <puerto> (Por defecto: 40002 o red de prueba: 50001) + + + 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: 40001 or testnet: 50000) + Escucha conexiones JSON-RPC en el puerto <port> (predeterminado: 40001 or testnet: 50000) + + + Accept command line and JSON-RPC commands + Aceptar comandos consola y JSON-RPC + + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits 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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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) + + + + 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 gamecredits-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. GameCredits 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ón + + + 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + Opciones SSL: (ver la GameCredits Wiki para instrucciones de configuración SSL) + + + Send command to GameCredits 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 + + + 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) + + + Start GameCredits 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) + + + 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... + + + + 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) + + + + 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) + + + 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 GameCredits + Error cargando wallet.dat: Billetera necesita una vercion reciente de GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + La billetera necesita ser reescrita: reinicie GameCredits 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 + + + 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. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_es_DO.ts b/src/qt/locale/bitmark_es_DO.ts index d3794ce..0a77e30 100644 --- a/src/qt/locale/bitmark_es_DO.ts +++ b/src/qt/locale/bitmark_es_DO.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Acerca del Núcleo de Pfennig + About pfennig Core + Acerca del Núcleo de pfennig - <b>Pfennig Core</b> version - Versión del <b>Núcleo de Pfennig<b> + <b>pfennig Core</b> version + Versión del <b>Núcleo de pfennig<b> @@ -32,7 +32,7 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard. The Bitcoin Core Developers - Los desarrolladores del Núcleo de Pfennig + Los desarrolladores del Núcleo de pfennig (%1-bit) @@ -106,12 +106,12 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.Recibiendo dirección - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Estas son sus direcciones Pfennig para enviar pagos. Compruebe siempre la cantidad y la dirección receptora antes de transferir monedas. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Estas son sus direcciones pfennig para enviar pagos. Compruebe siempre la cantidad y la dirección receptora antes de transferir monedas. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Estas son sus direcciones de Pfennig para recibir pagos. Se recomienda utilizar una nueva dirección de recepción para cada transacción. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Estas son sus direcciones de pfennig para recibir pagos. Se recomienda utilizar una nueva dirección de recepción para cada transacción. Copy &Label @@ -208,8 +208,8 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.Confirmar cifrado de la cartera - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Atencion: ¡Si cifra su monedero y pierde la contraseña perderá <b>TODOS SUS PfennigS</b>!" + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Atencion: ¡Si cifra su monedero y pierde la contraseña perderá <b>TODOS SUS pfennigS</b>!" Are you sure you wish to encrypt your wallet? @@ -228,8 +228,8 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.Monedero cifrado - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig se cerrará para finalizar el proceso de cifrado. Recuerde que el cifrado de su monedero no puede proteger totalmente sus pfennigs de robo por malware que infecte su sistema. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig se cerrará para finalizar el proceso de cifrado. Recuerde que el cifrado de su monedero no puede proteger totalmente sus pfennigs de robo por malware que infecte su sistema. Wallet encryption failed @@ -261,7 +261,7 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard. - PfennigGUI + pfennigGUI Sign &message... Firmar &mensaje... @@ -299,8 +299,8 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.Salir de la aplicación - Show information about Pfennig - Mostrar información acerca de Pfennig + Show information about pfennig + Mostrar información acerca de pfennig About &Qt @@ -347,12 +347,12 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.Reindexando bloques en disco... - Send coins to a Pfennig address - Enviar monedas a una dirección Pfennig + Send coins to a pfennig address + Enviar monedas a una dirección pfennig - Modify configuration options for Pfennig - Modificar las opciones de configuración de Pfennig + Modify configuration options for pfennig + Modificar las opciones de configuración de pfennig Backup wallet to another location @@ -375,8 +375,8 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.&Verificar mensaje... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -403,12 +403,12 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.Cifrar las claves privadas de su monedero - Sign messages with your Pfennig addresses to prove you own them - Firmar mensajes con sus direcciones Pfennig para demostrar la propiedad + Sign messages with your pfennig addresses to prove you own them + Firmar mensajes con sus direcciones pfennig para demostrar la propiedad - Verify messages to ensure they were signed with specified Pfennig addresses - Verificar mensajes comprobando que están firmados con direcciones Pfennig concretas + Verify messages to ensure they were signed with specified pfennig addresses + Verificar mensajes comprobando que están firmados con direcciones pfennig concretas &File @@ -431,16 +431,16 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.[testnet] - Pfennig Core - Núcleo de Pfennig + pfennig Core + Núcleo de pfennig Request payments (generates QR codes and pfennig: URIs) - Solicitar pagos (genera codigo QR y URL's de Pfennig) + Solicitar pagos (genera codigo QR y URL's de pfennig) - &About Pfennig Core - &Acerca del Núcleo de Pfennig + &About pfennig Core + &Acerca del Núcleo de pfennig Show the list of used sending addresses and labels @@ -459,16 +459,16 @@ Eric Young (eay@cryptsoft.com) y el software UPnP escrito por Thomas Bernard.&Opciones de linea de comando - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Cliente Pfennig + pfennig client + Cliente pfennig - %n active connection(s) to Pfennig network - %n conexión activa hacia la red Pfennig%n conexiones activas hacia la red Pfennig + %n active connection(s) to pfennig network + %n conexión activa hacia la red pfennig%n conexiones activas hacia la red pfennig No block source available... @@ -563,8 +563,8 @@ Dirección: %4 El monedero está <b>cifrado</b> y actualmente <b>bloqueado</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Ha ocurrido un error crítico. Pfennig ya no puede continuar con seguridad y se cerrará. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Ha ocurrido un error crítico. pfennig ya no puede continuar con seguridad y se cerrará. @@ -848,8 +848,8 @@ Dirección: %4 La dirección introducida "%1" ya está presente en la libreta de direcciones. - The entered address "%1" is not a valid Pfennig address. - La dirección introducida "%1" no es una dirección Pfennig válida. + The entered address "%1" is not a valid pfennig address. + La dirección introducida "%1" no es una dirección pfennig válida. Could not unlock wallet. @@ -886,12 +886,12 @@ Dirección: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Núcleo de Pfennig + pfennig Core + Núcleo de pfennig version @@ -937,16 +937,16 @@ Dirección: %4 Bienvenido - Welcome to Pfennig Core. - Bienvenido al Núcleo de Pfennig + Welcome to pfennig Core. + Bienvenido al Núcleo de pfennig - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Al ser la primera vez que se ejecuta el programa, puede elegir dónde almacenará sus datos Pfennig-Qt. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Al ser la primera vez que se ejecuta el programa, puede elegir dónde almacenará sus datos pfennig-Qt. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig-Qt va a descargar y guardar una copia de la cadena de bloques de Pfennig. 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. + pfennig Core will download and store a copy of the pfennig 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. + pfennig-Qt va a descargar y guardar una copia de la cadena de bloques de pfennig. 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 @@ -957,8 +957,8 @@ Dirección: %4 Utilice un directorio de datos personalizado: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1019,12 +1019,12 @@ Dirección: %4 Comisión de &transacciones - Automatically start Pfennig after logging in to the system. - Iniciar Pfennig automáticamente al encender el sistema. + Automatically start pfennig after logging in to the system. + Iniciar pfennig automáticamente al encender el sistema. - &Start Pfennig on system login - &Iniciar Pfennig al iniciar el sistema + &Start pfennig on system login + &Iniciar pfennig al iniciar el sistema Size of &database cache @@ -1039,8 +1039,8 @@ Dirección: %4 - Connect to the Pfennig network through a SOCKS proxy. - Conéctese a la red Pfennig través de un proxy SOCKS. + Connect to the pfennig network through a SOCKS proxy. + Conéctese a la red pfennig través de un proxy SOCKS. &Connect through SOCKS proxy (default proxy): @@ -1099,8 +1099,8 @@ Dirección: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Abrir automáticamente el puerto del cliente Pfennig en el router. Esta opción solo funciona si el router admite UPnP y está activado. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Abrir automáticamente el puerto del cliente pfennig en el router. Esta opción solo funciona si el router admite UPnP y está activado. Map port using &UPnP @@ -1155,8 +1155,8 @@ Dirección: %4 I&dioma de la interfaz de usuario - The user interface language can be set here. This setting will take effect after restarting Pfennig. - El idioma de la interfaz de usuario puede establecerse aquí. Este ajuste se aplicará cuando se reinicie Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + El idioma de la interfaz de usuario puede establecerse aquí. Este ajuste se aplicará cuando se reinicie pfennig. &Unit to show amounts in: @@ -1167,8 +1167,8 @@ Dirección: %4 Elegir la subdivisión predeterminada para mostrar cantidades en la interfaz y cuando se envían monedas. - Whether to show Pfennig addresses in the transaction list or not. - Mostrar o no las direcciones Pfennig en la lista de transacciones. + Whether to show pfennig addresses in the transaction list or not. + Mostrar o no las direcciones pfennig en la lista de transacciones. &Display addresses in transaction list @@ -1222,8 +1222,8 @@ Dirección: %4 Desde - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig después de que se haya establecido una conexión, pero este proceso aún no se ha completado. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig después de que se haya establecido una conexión, pero este proceso aún no se ha completado. Wallet @@ -1277,8 +1277,8 @@ Dirección: %4 Gestión de URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - ¡No se puede interpretar la URI! Esto puede deberse a una dirección Pfennig inválida o a parámetros de URI mal formados. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + ¡No se puede interpretar la URI! Esto puede deberse a una dirección pfennig inválida o a parámetros de URI mal formados. Requested payment amount of %1 is too small (considered dust). @@ -1344,8 +1344,8 @@ Dirección: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1360,12 +1360,12 @@ Dirección: %4 Error: Combinación no válida de -regtest y -testnet. - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introduzca una dirección Pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduzca una dirección pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1486,7 +1486,7 @@ Dirección: %4 Archivo de registro de depuración - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig 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. @@ -1494,8 +1494,8 @@ Dirección: %4 Borrar consola - Welcome to the Pfennig RPC console. - Bienvenido a la consola RPC de Pfennig + Welcome to the pfennig RPC console. + Bienvenido a la consola RPC de pfennig Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1557,7 +1557,7 @@ Dirección: %4 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 Pfennig network. + 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 pfennig network. @@ -1870,8 +1870,8 @@ Dirección: %4 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 Pfennig address - Alerta: Dirección de Pfennig inválida + Warning: Invalid pfennig address + Alerta: Dirección de pfennig inválida (no label) @@ -1879,7 +1879,7 @@ Dirección: %4 Warning: Unknown change address - Alerta: Dirección de Pfennig inválida + Alerta: Dirección de pfennig inválida Are you sure you want to send? @@ -1957,7 +1957,7 @@ Dirección: %4 Introduce una etiqueta para esta dirección para añadirla a la lista de direcciones utilizadas - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1976,7 +1976,7 @@ Dirección: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2031,8 +2031,8 @@ Dirección: %4 Copiar la firma actual al portapapeles del sistema - Sign the message to prove you own this Pfennig address - Firmar el mensaje para demostrar que se posee esta dirección Pfennig + Sign the message to prove you own this pfennig address + Firmar el mensaje para demostrar que se posee esta dirección pfennig Sign &Message @@ -2059,8 +2059,8 @@ Dirección: %4 La dirección con la que se firmó el mensaje (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Verificar el mensaje para comprobar que fue firmado con la dirección Pfennig indicada + Verify the message to ensure it was signed with the specified pfennig address + Verificar el mensaje para comprobar que fue firmado con la dirección pfennig indicada Verify &Message @@ -2071,8 +2071,8 @@ Dirección: %4 Limpiar todos los campos de la verificación de mensaje - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introduzca una dirección Pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduzca una dirección pfennig (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2130,12 +2130,12 @@ Dirección: %4 SplashScreen - Pfennig Core - Núcleo de Pfennig + pfennig Core + Núcleo de pfennig The Bitcoin Core Developers - Los desarrolladores del Núcleo de Pfennig + Los desarrolladores del Núcleo de pfennig [testnet] @@ -2630,8 +2630,8 @@ Dirección: %4 Especificar directorio para los datos - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Escuchar conexiones en <puerto> (predeterminado: P2PPORT o testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Escuchar conexiones en <puerto> (predeterminado: 40002 o testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2658,8 +2658,8 @@ Dirección: %4 Ha ocurrido un error al configurar el puerto RPC %u para escucha en IPv4: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Escuchar conexiones JSON-RPC en <puerto> (predeterminado: RPCPORT o testnet:1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Escuchar conexiones JSON-RPC en <puerto> (predeterminado: 40001 o testnet:50000) Accept command line and JSON-RPC commands @@ -2667,7 +2667,7 @@ Dirección: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2694,7 +2694,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, debe establecer un valor rpcpassword en el archivo de configuración: %s @@ -2705,7 +2705,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +Por ejemplo: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2777,7 +2777,7 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 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. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2789,8 +2789,8 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 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 Pfennig will not work properly. - Precaución: Por favor, ¡revise que la fecha y hora de su ordenador son correctas! Si su reloj está mal, Pfennig no funcionará correctamente. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Precaución: Por favor, ¡revise que la fecha y hora de su ordenador son correctas! Si su reloj está mal, pfennig no funcionará correctamente. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2825,8 +2825,8 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Intento de recuperar claves privadas de un wallet.dat corrupto - Pfennig Core Daemon - Proceso Pfennig-QT + pfennig Core Daemon + Proceso pfennig-QT Block creation options: @@ -2845,8 +2845,8 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Conectar a través de un proxy SOCKS - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Conectar a JSON-RPC en <puerto> (predeterminado: RPCPORT o testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Conectar a JSON-RPC en <puerto> (predeterminado: 40001 o testnet: 50000) Connection options: @@ -3069,7 +3069,7 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Importa los bloques desde un archivo blk000??.dat externo - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3133,7 +3133,7 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3153,11 +3153,11 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Opciones SSL: (ver la Pfennig Wiki para instrucciones de configuración SSL) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Opciones SSL: (ver la pfennig Wiki para instrucciones de configuración SSL) - Send command to Pfennig Core + Send command to pfennig Core @@ -3193,7 +3193,7 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Especificar el tiempo máximo de conexión en milisegundos (predeterminado: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3318,12 +3318,12 @@ Por ejemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Error al cargar wallet.dat: el monedero está dañado - Error loading wallet.dat: Wallet requires newer version of Pfennig - Error al cargar wallet.dat: El monedero requiere una versión más reciente de Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Error al cargar wallet.dat: El monedero requiere una versión más reciente de pfennig - Wallet needed to be rewritten: restart Pfennig to complete - El monedero ha necesitado ser reescrito. Reinicie Pfennig para completar el proceso + Wallet needed to be rewritten: restart pfennig to complete + El monedero ha necesitado ser reescrito. Reinicie pfennig para completar el proceso Error loading wallet.dat diff --git a/src/qt/locale/bitmark_es_DO.ts~ b/src/qt/locale/bitmark_es_DO.ts~ new file mode 100644 index 0000000..13c018b --- /dev/null +++ b/src/qt/locale/bitmark_es_DO.ts~ @@ -0,0 +1,3409 @@ + + + AboutDialog + + About GameCredits Core + Acerca del Núcleo de GameCredits + + + <b>GameCredits Core</b> version + Versión del <b>Núcleo de GameCredits<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 Bitcoin Core Developers + Los desarrolladores del Núcleo de GameCredits + + + (%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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Estas son sus direcciones GameCredits para enviar pagos. Compruebe siempre la cantidad y la dirección receptora antes de transferir monedas. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Estas son sus direcciones de GameCredits 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 GameCreditsS</b>! + Atencion: ¡Si cifra su monedero y pierde la contraseña perderá <b>TODOS SUS GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits se cerrará para finalizar el proceso de cifrado. Recuerde que el cifrado de su monedero no puede proteger totalmente sus gamecreditss 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. + + + + GameCreditsGUI + + 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 GameCredits + Mostrar información acerca de GameCredits + + + 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 GameCredits address + Enviar monedas a una dirección GameCredits + + + Modify configuration options for GameCredits + Modificar las opciones de configuración de GameCredits + + + 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... + + + GameCredits + GameCredits + + + 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 GameCredits addresses to prove you own them + Firmar mensajes con sus direcciones GameCredits para demostrar la propiedad + + + Verify messages to ensure they were signed with specified GameCredits addresses + Verificar mensajes comprobando que están firmados con direcciones GameCredits concretas + + + &File + &Archivo + + + &Settings + &Configuración + + + &Help + A&yuda + + + Tabs toolbar + Barra de pestañas + + + [testnet] + [testnet] + + + GameCredits Core + Núcleo de GameCredits + + + Request payments (generates QR codes and gamecredits: URIs) + Solicitar pagos (genera codigo QR y URL's de GameCredits) + + + &About GameCredits Core + &Acerca del Núcleo de GameCredits + + + 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 gamecredits: URI or payment request + Abrir un gamecredits: URI o petición de pago + + + &Command-line options + &Opciones de linea de comando + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + Cliente GameCredits + + + %n active connection(s) to GameCredits network + %n conexión activa hacia la red GameCredits%n conexiones activas hacia la red GameCredits + + + 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. GameCredits can no longer continue safely and will quit. + Ha ocurrido un error crítico. GameCredits 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 GameCredits address. + La dirección introducida "%1" no es una dirección GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + Núcleo de GameCredits + + + 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 GameCredits Core. + Bienvenido al Núcleo de GameCredits + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Al ser la primera vez que se ejecuta el programa, puede elegir dónde almacenará sus datos GameCredits-Qt. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits-Qt va a descargar y guardar una copia de la cadena de bloques de GameCredits. 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: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Iniciar GameCredits automáticamente al encender el sistema. + + + &Start GameCredits on system login + &Iniciar GameCredits al iniciar el sistema + + + Size of &database cache + + + + MB + MB + + + Number of script &verification threads + + + + Connect to the GameCredits network through a SOCKS proxy. + Conéctese a la red GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Abrir automáticamente el puerto del cliente GameCredits 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 GameCredits. + El idioma de la interfaz de usuario puede establecerse aquí. Este ajuste se aplicará cuando se reinicie GameCredits. + + + &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 GameCredits addresses in the transaction list or not. + Mostrar o no las direcciones GameCredits 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 GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + ¡No se puede interpretar la URI! Esto puede deberse a una dirección GameCredits 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 gamecredits: click-to-pay handler + No se pudo iniciar gamecredits: 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 + + GameCredits + GameCredits + + + 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. + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduzca una dirección GameCredits (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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 GameCredits RPC console. + Bienvenido a la consola RPC de GameCredits + + + 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 GameCredits 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 GameCredits address + Alerta: Dirección de GameCredits inválida + + + (no label) + (sin etiqueta) + + + Warning: Unknown change address + Alerta: Dirección de GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + La dirección a la que enviar el pago (p. ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + Esto es una petición de pago no verificado. + + + Pay To: + Paga a: + + + Memo: + Memo: + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + La dirección con la que firmar el mensaje (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Firmar el mensaje para demostrar que se posee esta dirección GameCredits + + + 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + La dirección con la que se firmó el mensaje (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Verificar el mensaje para comprobar que fue firmado con la dirección GameCredits indicada + + + Verify &Message + Verificar &mensaje + + + Reset all verify message fields + Limpiar todos los campos de la verificación de mensaje + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduzca una dirección GameCredits (ej. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + Núcleo de GameCredits + + + The Bitcoin Core Developers + Los desarrolladores del Núcleo de GameCredits + + + [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 + + + + gamecredits-core + + Usage: + Uso: + + + List commands + Muestra comandos + + + + Get help for a command + Recibir ayuda para un comando + + + + Options: + Opciones: + + + + Specify configuration file (default: gamecredits.conf) + Especificar archivo de configuración (predeterminado: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + Especificar archivo pid (predeterminado: gamecredits.pid) + + + + Specify data directory + Especificar directorio para los datos + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Escuchar conexiones en <puerto> (predeterminado: 40002 o testnet: 50001) + + + 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: 40001 or testnet: 50000) + Escuchar conexiones JSON-RPC en <puerto> (predeterminado: 40001 o testnet:50000) + + + Accept command line and JSON-RPC commands + Aceptar comandos consola y JSON-RPC + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits will not work properly. + Precaución: Por favor, ¡revise que la fecha y hora de su ordenador son correctas! Si su reloj está mal, GameCredits 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 + + + GameCredits Core Daemon + Proceso GameCredits-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: 40001 or testnet: 50000) + Conectar a JSON-RPC en <puerto> (predeterminado: 40001 o testnet: 50000) + + + 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 gamecredits-cli): + Uso (desaconsejado, usar gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + Opciones SSL: (ver la GameCredits Wiki para instrucciones de configuración SSL) + + + Send command to GameCredits 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 GameCredits 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 GameCredits + Error al cargar wallet.dat: El monedero requiere una versión más reciente de GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + El monedero ha necesitado ser reescrito. Reinicie GameCredits 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/bitmark_es_MX.ts b/src/qt/locale/bitmark_es_MX.ts index 7f9f7f5..cbceeb9 100644 --- a/src/qt/locale/bitmark_es_MX.ts +++ b/src/qt/locale/bitmark_es_MX.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -24,7 +24,7 @@ This product includes software developed by the OpenSSL Project for use in the O The Bitcoin Core Developers - El nucleo de Pfennig de desarrolladores + El nucleo de pfennig de desarrolladores (%1-bit) @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O Confirmar la encriptación de cartera - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O Cartera encriptada - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,8 +291,8 @@ This product includes software developed by the OpenSSL Project for use in the O Salir de la aplicación - Show information about Pfennig - Mostrar información acerca de Pfennig + Show information about pfennig + Mostrar información acerca de pfennig About &Qt @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,15 +423,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core - nucleo Pfennig + pfennig Core + nucleo pfennig Request payments (generates QR codes and pfennig: URIs) - &About Pfennig Core + &About pfennig Core @@ -451,16 +451,16 @@ This product includes software developed by the OpenSSL Project for use in the O opciones de la &Linea de comandos - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Mostrar mensaje de ayuda del nucleo de Pfennig para optener una lista con los posibles comandos de Pfennig + Show the pfennig Core help message to get a list with possible pfennig command-line options + Mostrar mensaje de ayuda del nucleo de pfennig para optener una lista con los posibles comandos de pfennig - Pfennig client + pfennig client - %n active connection(s) to Pfennig network - %n Activar conexión a la red de Pfennig%n Activar conexiones a la red de Pfennig + %n active connection(s) to pfennig network + %n Activar conexión a la red de pfennig%n Activar conexiones a la red de pfennig No block source available... @@ -551,7 +551,7 @@ Address: %4 La cartera esta <b>encriptada</b> y <b>bloqueada</b> actualmente - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 El domicilio ingresado "%1" ya existe en la libreta de direcciones - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,12 +874,12 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options - Opciones de lineas de comando del nucleo de Pfennig + pfennig Core - Command-line options + Opciones de lineas de comando del nucleo de pfennig - Pfennig Core - nucleo Pfennig + pfennig Core + nucleo pfennig version @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 Formulario - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,12 +1348,12 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Ingrese una direccion Pfennig (ejem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ingrese una direccion pfennig (ejem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,8 +1545,8 @@ Address: %4 - 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 Pfennig 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 Pfennig. + 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 pfennig 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 pfennig. An optional label to associate with the new receiving address. @@ -1858,8 +1858,8 @@ Address: %4 ¡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 Pfennig address - Advertencia: Dirección de Pfennig invalida + Warning: Invalid pfennig address + Advertencia: Dirección de pfennig invalida (no label) @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,8 +1964,8 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... - Apagando el nucleo de Pfennig... + pfennig Core is shutting down... + Apagando el nucleo de pfennig... Do not shut down the computer until this window disappears. @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,8 +2059,8 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Ingrese una direccion Pfennig (ejem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ingrese una direccion pfennig (ejem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2118,12 +2118,12 @@ Address: %4 SplashScreen - Pfennig Core - nucleo Pfennig + pfennig Core + nucleo pfennig The Bitcoin Core Developers - El nucleo de Pfennig de desarrolladores + El nucleo de pfennig de desarrolladores [testnet] @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_es_MX.ts~ b/src/qt/locale/bitmark_es_MX.ts~ new file mode 100644 index 0000000..120d31d --- /dev/null +++ b/src/qt/locale/bitmark_es_MX.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin Core Developers + El nucleo de GameCredits 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + 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 GameCredits + Mostrar información acerca de GameCredits + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + 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... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &Archivo + + + &Settings + &Configuraciones + + + &Help + &Ayuda + + + Tabs toolbar + Pestañas + + + [testnet] + + + + GameCredits Core + nucleo GameCredits + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + opciones de la &Linea de comandos + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Mostrar mensaje de ayuda del nucleo de GameCredits para optener una lista con los posibles comandos de GameCredits + + + GameCredits client + + + + %n active connection(s) to GameCredits network + %n Activar conexión a la red de GameCredits%n Activar conexiones a la red de GameCredits + + + 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + Opciones de lineas de comando del nucleo de GameCredits + + + GameCredits Core + nucleo GameCredits + + + 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ingrese una direccion GameCredits (ejem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits. + + + 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 GameCredits address + Advertencia: Dirección de GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + Esta es una solicitud de pago no verificada. + + + Pay To: + Pago para: + + + Memo: + + + + + ShutdownWindow + + GameCredits Core is shutting down... + Apagando el nucleo de GameCredits... + + + 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ingrese una direccion GameCredits (ejem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + nucleo GameCredits + + + The Bitcoin Core Developers + El nucleo de GameCredits 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 + + + + + gamecredits-core + + Usage: + Uso: + + + List commands + Lista de comandos + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_es_UY.ts b/src/qt/locale/bitmark_es_UY.ts index 33fa909..9d16ce0 100644 --- a/src/qt/locale/bitmark_es_UY.ts +++ b/src/qt/locale/bitmark_es_UY.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O Confirme el cifrado del monedero - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O Monedero cifrado - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,8 +291,8 @@ This product includes software developed by the OpenSSL Project for use in the O Salir de la aplicacion - Show information about Pfennig - Mostrar informacion sobre Pfennig + Show information about pfennig + Mostrar informacion sobre pfennig About &Qt @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O [prueba_de_red] - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,16 +451,16 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network - %n conexión activa a la red Pfennig %n conexiones activas a la red Pfennig + %n active connection(s) to pfennig network + %n conexión activa a la red pfennig %n conexiones activas a la red pfennig No block source available... @@ -551,7 +551,7 @@ Address: %4 El Monedero esta <b>cifrado</b> y actualmente <b>bloqueado</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 La dirección introducida "% 1" ya está en la libreta de direcciones. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 Formulario - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_es_UY.ts~ b/src/qt/locale/bitmark_es_UY.ts~ new file mode 100644 index 0000000..29a80f8 --- /dev/null +++ b/src/qt/locale/bitmark_es_UY.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + 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 GameCredits + Mostrar informacion sobre GameCredits + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + 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... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &Archivo + + + &Settings + &Configuracion + + + &Help + &Ayuda + + + Tabs toolbar + Barra de herramientas + + + [testnet] + [prueba_de_red] + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits network + %n conexión activa a la red GameCredits %n conexiones activas a la red GameCredits + + + 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_et.ts b/src/qt/locale/bitmark_et.ts index b94893c..d352550 100644 --- a/src/qt/locale/bitmark_et.ts +++ b/src/qt/locale/bitmark_et.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -103,11 +103,11 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Need on sinu Pfennigi aadressid maksete saatmiseks. Müntide saatmisel kontrolli alati summat ning saaja aadressi. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Need on sinu pfennigi aadressid maksete saatmiseks. Müntide saatmisel kontrolli alati summat ning saaja aadressi. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -205,8 +205,8 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS Kinnita rahakoti krüpteering - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Hoiatus: Kui sa kaotad oma, rahakoti krüpteerimisel kasutatud, salafraasi, siis <b>KAOTAD KA KÕIK OMA PfennigID</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Hoiatus: Kui sa kaotad oma, rahakoti krüpteerimisel kasutatud, salafraasi, siis <b>KAOTAD KA KÕIK OMA pfennigID</b>! Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS Rahakott krüpteeritud - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig sulgub krüpteeringu lõpetamiseks. Pea meeles, et rahakoti krüpteerimine ei välista pfennigide vargust, kui sinu arvuti on nakatunud pahavaraga. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig sulgub krüpteeringu lõpetamiseks. Pea meeles, et rahakoti krüpteerimine ei välista pfennigide vargust, kui sinu arvuti on nakatunud pahavaraga. Wallet encryption failed @@ -258,7 +258,7 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS - PfennigGUI + pfennigGUI Sign &message... Signeeri &sõnum @@ -296,8 +296,8 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS Väljumine - Show information about Pfennig - Kuva info Pfennigi kohta + Show information about pfennig + Kuva info pfennigi kohta About &Qt @@ -344,12 +344,12 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS Kettal olevate blokkide re-indekseerimine... - Send coins to a Pfennig address - Saada münte Pfennigi aadressile + Send coins to a pfennig address + Saada münte pfennigi aadressile - Modify configuration options for Pfennig - Muuda Pfennigi seadeid + Modify configuration options for pfennig + Muuda pfennigi seadeid Backup wallet to another location @@ -372,8 +372,8 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS &Kontrolli sõnumit... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS Krüpteeri oma rahakoti privaatvõtmed - Sign messages with your Pfennig addresses to prove you own them - Omandi tõestamiseks allkirjasta sõnumid oma Pfennigi aadressiga + Sign messages with your pfennig addresses to prove you own them + Omandi tõestamiseks allkirjasta sõnumid oma pfennigi aadressiga - Verify messages to ensure they were signed with specified Pfennig addresses - Kinnita sõnumid kindlustamaks et need allkirjastati määratud Pfennigi aadressiga + Verify messages to ensure they were signed with specified pfennig addresses + Kinnita sõnumid kindlustamaks et need allkirjastati määratud pfennigi aadressiga &File @@ -428,15 +428,15 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS [testnet] - Pfennig Core - Pfennigi tuumik + pfennig Core + pfennigi tuumik Request payments (generates QR codes and pfennig: URIs) - &About Pfennig Core + &About pfennig Core @@ -456,16 +456,16 @@ Toode sisaldab OpenSSL Projekti all toodetud tarkvara, mis on kasutamiseks OpenS - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Pfennigi klient + pfennig client + pfennigi klient - %n active connection(s) to Pfennig network - %n aktiivne ühendus Pfennigi võrku%n aktiivset ühendust Pfennigi võrku + %n active connection(s) to pfennig network + %n aktiivne ühendus pfennigi võrku%n aktiivset ühendust pfennigi võrku No block source available... @@ -559,8 +559,8 @@ Aadress: %4⏎ Rahakott on <b>krüpteeritud</b> ning hetkel <b>suletud</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Ilmnes kriitiline tõrge. Pfennig suletakse turvakaalutluste tõttu. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Ilmnes kriitiline tõrge. pfennig suletakse turvakaalutluste tõttu. @@ -844,8 +844,8 @@ Aadress: %4⏎ Selline aadress on juba olemas: "%1" - The entered address "%1" is not a valid Pfennig address. - Sisestatud aadress "%1" ei ole Pfennigis kehtiv. + The entered address "%1" is not a valid pfennig address. + Sisestatud aadress "%1" ei ole pfennigis kehtiv. Could not unlock wallet. @@ -882,12 +882,12 @@ Aadress: %4⏎ HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Pfennigi tuumik + pfennig Core + pfennigi tuumik version @@ -933,15 +933,15 @@ Aadress: %4⏎ - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -953,8 +953,8 @@ Aadress: %4⏎ - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1015,12 +1015,12 @@ Aadress: %4⏎ Tasu tehingu &fee - Automatically start Pfennig after logging in to the system. - Käivita Pfennig süsteemi logimisel. + Automatically start pfennig after logging in to the system. + Käivita pfennig süsteemi logimisel. - &Start Pfennig on system login - &Start Pfennig sisselogimisel + &Start pfennig on system login + &Start pfennig sisselogimisel Size of &database cache @@ -1035,7 +1035,7 @@ Aadress: %4⏎ - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1095,8 +1095,8 @@ Aadress: %4⏎ - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Pfennigi kliendi pordi automaatne avamine ruuteris. Toimib, kui sinu ruuter aktsepteerib UPnP ühendust. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + pfennigi kliendi pordi automaatne avamine ruuteris. Toimib, kui sinu ruuter aktsepteerib UPnP ühendust. Map port using &UPnP @@ -1151,8 +1151,8 @@ Aadress: %4⏎ Kasutajaliidese &keel: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Kasutajaliidese keele valimise koht. Valik rakendub Pfennigi käivitamisel. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Kasutajaliidese keele valimise koht. Valik rakendub pfennigi käivitamisel. &Unit to show amounts in: @@ -1163,8 +1163,8 @@ Aadress: %4⏎ Vali liideses ning müntide saatmisel kuvatav vaikimisi alajaotus. - Whether to show Pfennig addresses in the transaction list or not. - Kuvada Pfennigi aadress tehingute loetelus või mitte. + Whether to show pfennig addresses in the transaction list or not. + Kuvada pfennigi aadress tehingute loetelus või mitte. &Display addresses in transaction list @@ -1218,7 +1218,7 @@ Aadress: %4⏎ Vorm - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig 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. @@ -1273,8 +1273,8 @@ Aadress: %4⏎ URI käsitsemine - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI ei suudeta parsida. Põhjuseks võib olla kehtetu Pfennigi aadress või vigased URI parameetrid. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI ei suudeta parsida. Põhjuseks võib olla kehtetu pfennigi aadress või vigased URI parameetrid. Requested payment amount of %1 is too small (considered dust). @@ -1286,7 +1286,7 @@ Aadress: %4⏎ Cannot start pfennig: click-to-pay handler - Pfennig ei käivitu: vajuta-maksa toiming + pfennig ei käivitu: vajuta-maksa toiming Net manager warning @@ -1340,8 +1340,8 @@ Aadress: %4⏎ QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1356,12 +1356,12 @@ Aadress: %4⏎ - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Sisesta Pfennigi aadress (nt: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Sisesta pfennigi aadress (nt: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1482,16 +1482,16 @@ Aadress: %4⏎ Debugimise logifail - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Ava Pfennigi logifail praegusest andmekaustast. Toiminguks võib kuluda kuni mõni sekund. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Ava pfennigi logifail praegusest andmekaustast. Toiminguks võib kuluda kuni mõni sekund. Clear console Puhasta konsool - Welcome to the Pfennig RPC console. - Teretulemast Pfennigi RPC konsooli. + Welcome to the pfennig RPC console. + Teretulemast pfennigi RPC konsooli. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1553,7 +1553,7 @@ Aadress: %4⏎ - 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 Pfennig network. + 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 pfennig network. @@ -1866,7 +1866,7 @@ Aadress: %4⏎ - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1953,7 +1953,7 @@ Aadress: %4⏎ - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1972,7 +1972,7 @@ Aadress: %4⏎ ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2027,8 +2027,8 @@ Aadress: %4⏎ Kopeeri praegune signatuur vahemällu - Sign the message to prove you own this Pfennig address - Allkirjasta sõnum Pfennigi aadressi sulle kuulumise tõestamiseks + Sign the message to prove you own this pfennig address + Allkirjasta sõnum pfennigi aadressi sulle kuulumise tõestamiseks Sign &Message @@ -2055,8 +2055,8 @@ Aadress: %4⏎ Aadress, millega sõnum allkirjastati (nt: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Kinnita sõnum tõestamaks selle allkirjastatust määratud Pfennigi aadressiga. + Verify the message to ensure it was signed with the specified pfennig address + Kinnita sõnum tõestamaks selle allkirjastatust määratud pfennigi aadressiga. Verify &Message @@ -2067,8 +2067,8 @@ Aadress: %4⏎ Tühjenda kõik sõnumi kinnitamise väljad - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Sisesta Pfennigi aadress (nt: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Sisesta pfennigi aadress (nt: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2126,8 +2126,8 @@ Aadress: %4⏎ SplashScreen - Pfennig Core - Pfennigi tuumik + pfennig Core + pfennigi tuumik The Bitcoin Core Developers @@ -2621,8 +2621,8 @@ Aadress: %4⏎ Täpsusta andmekataloog - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Kuula ühendusi pordil <port> (vaikeväärtus: P2PPORT või testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Kuula ühendusi pordil <port> (vaikeväärtus: 40002 või testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2649,15 +2649,15 @@ Aadress: %4⏎ RPC pordi %u kuulamiseks seadistamisel ilmnes viga IPv4'l: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Kuula JSON-RPC ühendusel seda porti <port> (vaikeväärtus: RPCPORT või testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Kuula JSON-RPC ühendusel seda porti <port> (vaikeväärtus: 40001 või testnet: 50000) Accept command line and JSON-RPC commands Luba käsurea ning JSON-RPC käsklusi - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2682,7 +2682,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, sul tuleb rpcpassword määrata seadete failis: %s @@ -2693,7 +2693,7 @@ rpcpassword=%s Kasutajanimi ning parool EI TOHI kattuda. Kui faili ei leita, loo see ainult-omaniku-loetavas failiõigustes . Soovitatav on seadistada tõrgete puhul teavitus; -nt: alertnotify=echo %%s | email -s "Pfennig Alert" admin@foo.com +nt: alertnotify=echo %%s | email -s "pfennig Alert" admin@foo.com @@ -2765,7 +2765,7 @@ nt: alertnotify=echo %%s | email -s "Pfennig Alert" admin@foo.com See on test-versioon - kasutamine omal riisikol - ära kasuta mining'uks ega kaupmeeste programmides - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2777,8 +2777,8 @@ nt: alertnotify=echo %%s | email -s "Pfennig Alert" admin@foo.com Hoiatus: -paytxfee on seatud väga kõrgeks! See on sinu poolt makstav tehingu lisatasu. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Hoiatus: Palun kontrolli oma arvuti kuupäeva/kellaaega! Kui arvuti kell on vale, siis Pfennig ei tööta korralikult + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Hoiatus: Palun kontrolli oma arvuti kuupäeva/kellaaega! Kui arvuti kell on vale, siis pfennig ei tööta korralikult Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2813,7 +2813,7 @@ nt: alertnotify=echo %%s | email -s "Pfennig Alert" admin@foo.com Püüa vigasest wallet.dat failist taastada turvavõtmed - Pfennig Core Daemon + pfennig Core Daemon @@ -2833,7 +2833,7 @@ nt: alertnotify=echo %%s | email -s "Pfennig Alert" admin@foo.com - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3057,7 +3057,7 @@ nt: alertnotify=echo %%s | email -s "Pfennig Alert" admin@foo.com Impordi blokid välisest blk000??.dat failist - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3121,7 +3121,7 @@ nt: alertnotify=echo %%s | email -s "Pfennig Alert" admin@foo.com - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3141,11 +3141,11 @@ nt: alertnotify=echo %%s | email -s "Pfennig Alert" admin@foo.com - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL valikud: (vaata Pfennigi Wikist või SSL sätete juhendist) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL valikud: (vaata pfennigi Wikist või SSL sätete juhendist) - Send command to Pfennig Core + Send command to pfennig Core @@ -3181,7 +3181,7 @@ nt: alertnotify=echo %%s | email -s "Pfennig Alert" admin@foo.com Sea ühenduse timeout millisekundites (vaikeväärtus: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3297,12 +3297,12 @@ nt: alertnotify=echo %%s | email -s "Pfennig Alert" admin@foo.com Viga wallet.dat käivitamisel. Vigane rahakkott - Error loading wallet.dat: Wallet requires newer version of Pfennig - Viga wallet.dat käivitamisel: Rahakott nõuab Pfennigi uusimat versiooni + Error loading wallet.dat: Wallet requires newer version of pfennig + Viga wallet.dat käivitamisel: Rahakott nõuab pfennigi uusimat versiooni - Wallet needed to be rewritten: restart Pfennig to complete - Rahakott tuli ümberkirjutada: toimingu lõpetamiseks taaskäivita Pfennig + Wallet needed to be rewritten: restart pfennig to complete + Rahakott tuli ümberkirjutada: toimingu lõpetamiseks taaskäivita pfennig Error loading wallet.dat diff --git a/src/qt/locale/bitmark_et.ts~ b/src/qt/locale/bitmark_et.ts~ new file mode 100644 index 0000000..1fb0bf4 --- /dev/null +++ b/src/qt/locale/bitmark_et.ts~ @@ -0,0 +1,3388 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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. + ⏎ +See on eksperimentaalne tarkvara.⏎ +⏎ +Levitatud MIT/X11 tarkvara litsentsi all, vaata kaasasolevat faili COPYING või http://www.opensource.org/licenses/mit-license.php⏎ +⏎ +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 Bitcoin Core Developers + + + + (%1-bit) + + + + + AddressBookPage + + 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 + + + &Copy + + + + C&lose + + + + &Copy Address + &Aadressi kopeerimine + + + Delete the currently selected address from the list + Kustuta märgistatud aadress loetelust + + + Export the data in the current tab to a file + + + + &Export + + + + &Delete + &Kustuta + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Need on sinu GameCreditsi aadressid maksete saatmiseks. Müntide saatmisel kontrolli alati summat ning saaja aadressi. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + &Märgise kopeerimine + + + &Edit + &Muuda + + + Export Address List + + + + Comma separated file (*.csv) + Komaeraldatud fail (*.csv) + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Silt + + + Address + Aadress + + + (no label) + (silti pole) + + + + 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 GameCreditsS</b>! + Hoiatus: Kui sa kaotad oma, rahakoti krüpteerimisel kasutatud, salafraasi, siis <b>KAOTAD KA KÕIK OMA GameCreditsID</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits sulgub krüpteeringu lõpetamiseks. Pea meeles, et rahakoti krüpteerimine ei välista gamecreditside 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. + + + + GameCreditsGUI + + 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 + + + E&xit + V&älju + + + Quit application + Väljumine + + + Show information about GameCredits + Kuva info GameCreditsi 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 GameCredits address + Saada münte GameCreditsi aadressile + + + Modify configuration options for GameCredits + Muuda GameCreditsi 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... + + + GameCredits + GameCredits + + + Wallet + Rahakott + + + &Send + &Saada + + + &Receive + &Saama + + + &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 GameCredits addresses to prove you own them + Omandi tõestamiseks allkirjasta sõnumid oma GameCreditsi aadressiga + + + Verify messages to ensure they were signed with specified GameCredits addresses + Kinnita sõnumid kindlustamaks et need allkirjastati määratud GameCreditsi aadressiga + + + &File + &Fail + + + &Settings + &Seaded + + + &Help + &Abi + + + Tabs toolbar + Vahelehe tööriistariba + + + [testnet] + [testnet] + + + GameCredits Core + GameCreditsi tuumik + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + GameCreditsi klient + + + %n active connection(s) to GameCredits network + %n aktiivne ühendus GameCreditsi võrku%n aktiivset ühendust GameCreditsi 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 + + + Up to date + Ajakohane + + + Catching up... + Jõuan... + + + Sent transaction + Saadetud tehing + + + Incoming transaction + Sisenev tehing + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Kuupäev: %1⏎ +Summa: %2⏎ +Tüüp: %3⏎ +Aadress: %4⏎ + + + 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. GameCredits can no longer continue safely and will quit. + Ilmnes kriitiline tõrge. GameCredits suletakse turvakaalutluste tõttu. + + + + 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 list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Aadress + + + 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 GameCredits address. + Sisestatud aadress "%1" ei ole GameCreditsis kehtiv. + + + Could not unlock wallet. + Rahakotti ei avatud + + + New key generation failed. + Tõrge uue võtme loomisel. + + + + 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + GameCreditsi 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Käivita GameCredits süsteemi logimisel. + + + &Start GameCredits on system login + &Start GameCredits sisselogimisel + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 + + + (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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + GameCreditsi kliendi pordi automaatne avamine ruuteris. Toimib, kui sinu ruuter aktsepteerib UPnP ühendust. + + + Map port using &UPnP + Suuna port &UPnP kaudu + + + Proxy &IP: + Proxi &IP: + + + &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 GameCredits. + Kasutajaliidese keele valimise koht. Valik rakendub GameCreditsi 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 GameCredits addresses in the transaction list or not. + Kuvada GameCreditsi 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 + + + default + vaikeväärtus + + + none + + + + Confirm options reset + Kinnita valikute algseadistamine + + + 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. + Sisestatud kehtetu proxy aadress. + + + + OverviewPage + + Form + Vorm + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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. + + + 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> + + + out of sync + sünkimata + + + + PaymentServer + + URI handling + URI käsitsemine + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + URI ei suudeta parsida. Põhjuseks võib olla kehtetu GameCreditsi aadress või vigased URI parameetrid. + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: click-to-pay handler + GameCredits 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 + + + + + QObject + + GameCredits + GameCredits + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Sisesta GameCreditsi aadress (nt: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + Salvesta QR kood + + + 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 + + + Block chain + Ploki jada + + + Current number of blocks + Plokkide hetkearv + + + Estimated total blocks + Ligikaudne plokkide kogus + + + Last block time + Viimane ploki aeg + + + &Open + &Ava + + + &Console + &Konsool + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + Valmistusaeg + + + Debug log file + Debugimise logifail + + + Open the GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Ava GameCreditsi logifail praegusest andmekaustast. Toiminguks võib kuluda kuni mõni sekund. + + + Clear console + Puhasta konsool + + + Welcome to the GameCredits RPC console. + Teretulemast GameCreditsi 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 GameCredits 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 + + + Clear all fields of the form. + + + + Clear &All + Puhasta &Kõik + + + Balance: + Jääk: + + + Confirm the send action + Saatmise kinnitamine + + + S&end + S&aada + + + Confirm send coins + Müntide saatmise kinnitamine + + + %1 to %2 + + + + 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. + + + 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 GameCredits 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 + + A&mount: + S&umma: + + + Pay &To: + Maksa &: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Tehingu saaja aadress (nt: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Enter a label for this address to add it to your address book + Aadressiraamatusse sisestamiseks märgista aadress + + + &Label: + &Märgis + + + 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 entry + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Sõnumi signeerimise aadress (nt: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Allkirjasta sõnum GameCreditsi 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Aadress, millega sõnum allkirjastati (nt: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Kinnita sõnum tõestamaks selle allkirjastatust määratud GameCreditsi aadressiga. + + + Verify &Message + Kinnita &Sõnum + + + Reset all verify message fields + Tühjenda kõik sõnumi kinnitamise väljad + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Sisesta GameCreditsi aadress (nt: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Signatuuri genereerimiseks vajuta "Allkirjasta Sõnum" + + + 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. + + + + SplashScreen + + GameCredits Core + GameCreditsi tuumik + + + The Bitcoin 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 + + + 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 + + + + TransactionDescDialog + + Transaction details + Tehingu üksikasjad + + + This pane shows a detailed description of the transaction + Paan kuvab tehingu detailid + + + + 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 + + + Confirmed (%1 confirmations) + Kinnitatud (%1 kinnitust) + + + 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. + + + + 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 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 + + + Range: + Ulatus: + + + to + saaja + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + + + + + 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 %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + Varundamine õnnestus + + + + gamecredits-core + + Usage: + Kasutus: + + + List commands + Käskluste loetelu + + + Get help for a command + Käskluste abiinfo + + + Options: + Valikud: + + + Specify configuration file (default: gamecredits.conf) + Täpsusta sätete fail (vaikimisi: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Täpsusta PID fail (vaikimisi: gamecredits.pid) + + + Specify data directory + Täpsusta andmekataloog + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Kuula ühendusi pordil <port> (vaikeväärtus: 40002 või testnet: 50001) + + + 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: 40001 or testnet: 50000) + Kuula JSON-RPC ühendusel seda porti <port> (vaikeväärtus: 40001 või testnet: 50000) + + + Accept command line and JSON-RPC commands + Luba käsurea ning JSON-RPC käsklusi + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, sul tuleb rpcpassword määrata seadete failis: +%s +Soovitatav on kasutada järgmist juhuslikku parooli: +rpcuser=gamecreditsrpc +rpcpassword=%s +(seda parooli ei pea meeles pidama) +Kasutajanimi ning parool EI TOHI kattuda. +Kui faili ei leita, loo see ainult-omaniku-loetavas failiõigustes . +Soovitatav on seadistada tõrgete puhul teavitus; +nt: alertnotify=echo %%s | email -s "GameCredits 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 + + + 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 wallet transaction changes (%s in cmd is replaced by TxID) + Käivita käsklus, kui rahakoti tehing muutub (%s cmd's muudetakse TxID'ks) + + + 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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Hoiatus: Palun kontrolli oma arvuti kuupäeva/kellaaega! Kui arvuti kell on vale, siis GameCredits 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 + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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) + + + 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 gamecredits-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 + + + Cannot obtain a lock on data directory %s. GameCredits 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 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) + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL valikud: (vaata GameCreditsi Wikist või SSL sätete juhendist) + + + Send command to GameCredits Core + + + + Send trace/debug info to console instead of debug.log file + Saada jälitus/debug, debug.log faili asemel, konsooli + + + 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 GameCredits 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) + + + 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! + + + 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) + + + 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) + + + 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 GameCredits + Viga wallet.dat käivitamisel: Rahakott nõuab GameCreditsi uusimat versiooni + + + Wallet needed to be rewritten: restart GameCredits to complete + Rahakott tuli ümberkirjutada: toimingu lõpetamiseks taaskäivita GameCredits + + + 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 + + + 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. + rpcpassword=<password> peab sätete failis olema seadistatud:⏎ +%s⏎ +Kui seda faili ei ole, loo see ainult-omanikule-lugemiseks faili õigustes. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_eu_ES.ts b/src/qt/locale/bitmark_eu_ES.ts index d99a6b0..bea7797 100644 --- a/src/qt/locale/bitmark_eu_ES.ts +++ b/src/qt/locale/bitmark_eu_ES.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O Berretsi zorroaren enkriptazioa - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O Zorroa enkriptatuta - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,8 +291,8 @@ This product includes software developed by the OpenSSL Project for use in the O Irten aplikaziotik - Show information about Pfennig - Erakutsi Pfennig-i buruzko informazioa + Show information about pfennig + Erakutsi pfennig-i buruzko informazioa About &Qt @@ -300,7 +300,7 @@ This product includes software developed by the OpenSSL Project for use in the O Show information about Qt - Erakutsi Pfennig-i buruzko informazioa + Erakutsi pfennig-i buruzko informazioa &Options... @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,16 +451,16 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network - Konexio aktibo %n Pfennig-en sarera%n konexio aktibo Pfennig-en sarera + %n active connection(s) to pfennig network + Konexio aktibo %n pfennig-en sarera%n konexio aktibo pfennig-en sarera No block source available... @@ -551,7 +551,7 @@ Address: %4 Zorroa <b>enkriptatuta</b> eta <b>blokeatuta</b> dago une honetan - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 Sartu berri den helbidea, "%1", helbide-liburuan dago jadanik. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 Inprimakia - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Sartu Bitocin helbide bat (adb.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Sartu Bitocin helbide bat (adb.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_eu_ES.ts~ b/src/qt/locale/bitmark_eu_ES.ts~ new file mode 100644 index 0000000..76b0962 --- /dev/null +++ b/src/qt/locale/bitmark_eu_ES.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin Core Developers + + + + (%1-bit) + + + + + AddressBookPage + + 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 + + + &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 + &Ezabatu + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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) + Komaz bereizitako artxiboa (*.csv) + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Etiketa + + + Address + Helbidea + + + (no label) + (etiketarik ez) + + + + 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 GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + 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 + + + E&xit + Irten + + + Quit application + Irten aplikaziotik + + + Show information about GameCredits + Erakutsi GameCredits-i buruzko informazioa + + + About &Qt + &Qt-ari buruz + + + Show information about Qt + Erakutsi GameCredits-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 GameCredits address + + + + Modify configuration options for GameCredits + + + + 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... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &Artxiboa + + + &Settings + &Ezarpenak + + + &Help + &Laguntza + + + Tabs toolbar + Fitxen tresna-barra + + + [testnet] + [testnet] + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits network + Konexio aktibo %n GameCredits-en sarera%n konexio aktibo GameCredits-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 + + + + Up to date + Egunean + + + Catching up... + Eguneratzen... + + + Sent transaction + Bidalitako transakzioa + + + Incoming transaction + Sarrerako transakzioa + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + + + + 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. GameCredits can no longer continue safely and will quit. + + + + + 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 list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Helbidea + + + 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 GameCredits address. + + + + Could not unlock wallet. + Ezin desblokeatu zorroa. + + + New key generation failed. + Gako berriaren sorrerak huts egin du. + + + + 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 + Inprimakia + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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>Azken transakzioak</b> + + + out of sync + + + + + PaymentServer + + URI handling + + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Sartu Bitocin helbide bat (adb.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 + + + + Clear all fields of the form. + + + + Clear &All + + + + Balance: + Saldoa: + + + Confirm the send action + Berretsi bidaltzeko ekintza + + + S&end + + + + Confirm send coins + Berretsi txanponak bidaltzea + + + %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. + 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. + + + + 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 GameCredits 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 + + A&mount: + K&opurua: + + + Pay &To: + Ordaindu &honi: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 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 entry + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Sartu Bitocin helbide bat (adb.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + 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 + + + + TransactionDescDialog + + Transaction details + Transakzioaren xehetasunak + + + This pane shows a detailed description of the transaction + Panel honek transakzioaren deskribapen xehea erakusten du + + + + 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 + + + Confirmed (%1 confirmations) + Konfirmatuta (%1 konfirmazio) + + + 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. + + + + 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 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 + + + + 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 + + + + + gamecredits-core + + Usage: + + + + List commands + Komandoen lista + + + Get help for a command + Laguntza komando batean + + + Options: + Aukerak + + + Specify configuration file (default: gamecredits.conf) + Ezarpen fitxategia aukeratu (berezkoa: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + pid fitxategia aukeratu (berezkoa: gamecreditsd.pid) + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 + Laguntza mezu hau + + + 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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... + 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. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_fa.ts b/src/qt/locale/bitmark_fa.ts index 99e4ba5..8fe4186 100644 --- a/src/qt/locale/bitmark_fa.ts +++ b/src/qt/locale/bitmark_fa.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. این‌ها نشانی‌های بیت‌کوین شما برای ارسال وجود هستند. همیشه قبل از ارسال سکه‌ها، نشانی دریافت‌کننده و مقدار ارسالی را بررسی کنید. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O تأیید رمزنگاری کیف پول - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! هشدار: اگر کیف پول خود را رمزنگاری کنید و گذرواژه را فراموش کنید، <b>تمام دارایی بیت‌کوین خود را از دست خواهید داد</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O کیف پول رمزنگاری شد - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. بیت‌کوین هم اکنون بسته می‌شود تا فرایند رمزگذاری را تمام کند. به خاطر داشته باشید که رمزگذاری کردن کیف پول‌تان نمی‌تواند به طور کامل بیت‌کوین‌های شما را در برابر دزدیده شدن توسط بدافزارهایی که احتمالاً رایانهٔ شما را آلوده می‌کنند، محافظت نماید. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... &امضای پیام... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O خروج از برنامه - Show information about Pfennig + Show information about pfennig نمایش اطلاعات در مورد بیت‌کوین @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O بازنشانی بلوک‌ها روی دیسک... - Send coins to a Pfennig address + Send coins to a pfennig address ارسال وجه به نشانی بیت‌کوین - Modify configuration options for Pfennig + Modify configuration options for pfennig تغییر و اصلاح تنظیمات پیکربندی بیت‌کوین @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O با&زبینی پیام... - Pfennig + pfennig بیت‌کوین @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O رمزنگاری کلیدهای خصوصی متعلق به کیف پول شما - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them برای اثبات اینکه پیام‌ها به شما تعلق دارند، آن‌ها را با نشانی بیت‌کوین خود امضا کنید - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses برای حصول اطمینان از اینکه پیام با نشانی بیت‌کوین مشخص شده امضا است یا خیر، پیام را شناسایی کنید @@ -423,15 +423,15 @@ This product includes software developed by the OpenSSL Project for use in the O [شبکهٔ آزمایش] - Pfennig Core - هسته Pfennig + pfennig Core + هسته pfennig Request payments (generates QR codes and pfennig: URIs) - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client کلاینت بیت‌کوین - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network %n ارتباط فعال با شبکهٔ بیت‌کوین @@ -555,7 +555,7 @@ Address: %4 کیف پول <b>رمزنگاری شده</b> است و هم‌اکنون <b>قفل</b> است - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. یک خطای مهلک اتفاق افتاده است. بیت‌کوین نمی‌تواند بدون مشکل به کار خود ادامه دهد و بسته خواهد شد. @@ -840,7 +840,7 @@ Address: %4 نشانی وارد شده «%1» در حال حاضر در دفترچه وجود دارد. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. نشانی وارد شده «%1» یک نشانی معتبر بیت‌کوین نیست. @@ -878,12 +878,12 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - هسته Pfennig + pfennig Core + هسته pfennig version @@ -929,15 +929,15 @@ Address: %4 خوش‌آمدید - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -949,7 +949,7 @@ Address: %4 استفاده از یک مسیر سفارشی: - Pfennig + pfennig بیت‌کوین @@ -1011,11 +1011,11 @@ Address: %4 پرداخت &کارمزد تراکنش - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. اجرای خودکار بیت‌کوین در زمان ورود به سیستم. - &Start Pfennig on system login + &Start pfennig on system login &اجرای بیت‌کوین با ورود به سیستم @@ -1031,7 +1031,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1091,7 +1091,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. باز کردن خودکار درگاه شبکهٔ بیت‌کوین روی روترها. تنها زمانی کار می‌کند که روتر از پروتکل UPnP پشتیبانی کند و این پروتکل فعال باشد. @@ -1147,7 +1147,7 @@ Address: %4 زبان &رابط کاربری: - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. زبان رابط کاربر می‌تواند در این‌جا تنظیم شود. تنظیمات بعد از ظروع مجدد بیت‌کوین اعمال خواهد شد. @@ -1159,7 +1159,7 @@ Address: %4 انتخاب واحد پول مورد استفاده برای نمایش در پنجره‌ها و برای ارسال سکه. - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. نمایش یا عدم نمایش نشانی‌های بیت‌کوین در لیست تراکنش‌ها. @@ -1214,7 +1214,7 @@ Address: %4 فرم - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. اطلاعات نمایش‌داده شده ممکن است قدیمی باشند. بعد از این که یک اتصال با شبکه برقرار شد، کیف پول شما به‌صورت خودکار با شبکهٔ بیت‌کوین همگام‌سازی می‌شود. اما این روند هنوز کامل نشده است. @@ -1269,7 +1269,7 @@ Address: %4 مدیریت URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. نشانی اینترنتی قابل تجزیه و تحلیل نیست! دلیل این وضعیت ممکن است یک نشانی نامعتبر بیت‌کوین و یا پارامترهای ناهنجار در URI بوده باشد. @@ -1336,7 +1336,7 @@ Address: %4 QObject - Pfennig + pfennig بیت‌کوین @@ -1352,11 +1352,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) یک آدرس بیت‌کوین وارد کنید (مثلاً bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1478,15 +1478,15 @@ Address: %4 فایلِ لاگِ اشکال زدایی - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - فایلِ لاگِ اشکال زدایی Pfennig را از دایرکتوری جاری داده ها باز کنید. این عملیات ممکن است برای فایلهای لاگِ حجیم طولانی شود. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + فایلِ لاگِ اشکال زدایی pfennig را از دایرکتوری جاری داده ها باز کنید. این عملیات ممکن است برای فایلهای لاگِ حجیم طولانی شود. Clear console پاکسازی کنسول - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. به کنسور RPC بیت‌کوین خوش آمدید. @@ -1549,7 +1549,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1862,7 +1862,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1949,7 +1949,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1968,7 +1968,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2023,7 +2023,7 @@ Address: %4 امضای فعلی را به حافظهٔ سیستم کپی کن - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address برای اثبات تعلق این نشانی به شما، پیام را امضا کنید @@ -2051,7 +2051,7 @@ Address: %4 نشانی مورد استفاده برای امضا کردن پیام (برای مثال bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address برای حصول اطمینان از اینکه پیام با نشانی بیت‌کوین مشخص شده امضا است یا خیر، پیام را شناسایی کنید @@ -2063,7 +2063,7 @@ Address: %4 بازنشانی تمام فیلدهای پیام - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) یک نشانی بیت‌کوین وارد کنید (مثلاً bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2122,8 +2122,8 @@ Address: %4 SplashScreen - Pfennig Core - هسته Pfennig + pfennig Core + هسته pfennig The Bitcoin Core Developers @@ -2617,8 +2617,8 @@ Address: %4 مشخص کردن دایرکتوری داده‌ها - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - پذیرش اتصالات روی پورت <port> (پیش‌فرض: 8833 یا شبکهٔ آزمایشی: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + پذیرش اتصالات روی پورت <port> (پیش‌فرض: 8833 یا شبکهٔ آزمایشی: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2645,15 +2645,15 @@ Address: %4 هنگام تنظیم پورت RPC %u برای گوش دادن روی IPv4 خطایی رخ داده است: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - پورت مورد شنود برای اتصالات JSON-RPC (پیش‌فرض: RPCPORT برای شبکهٔ تست 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + پورت مورد شنود برای اتصالات JSON-RPC (پیش‌فرض: 40001 برای شبکهٔ تست 50000) Accept command line and JSON-RPC commands پذیرش دستورات خط فرمان و دستورات JSON-RPC - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2678,7 +2678,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2751,7 +2751,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. این یک نسخه ی آزمایشی است - با مسئولیت خودتان از آن استفاده کنید - آن را در معدن و بازرگانی بکار نگیرید. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2763,7 +2763,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. هشدار: مبلغ paytxfee بسیار بالایی تنظیم شده است! این مبلغ هزینه‌ای است که شما برای تراکنش‌ها پرداخت می‌کنید. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. هشدار: لطفا زمان و تاریخ رایانه خود را تصحیح نمایید! اگر ساعت رایانه شما اشتباه باشد pfennig ممکن است صحیح کار نکند @@ -2799,7 +2799,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2819,7 +2819,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3043,7 +3043,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3107,7 +3107,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3127,11 +3127,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) گزینه ssl (به ویکیpfennig برای راهنمای راه اندازی ssl مراجعه شود) - Send command to Pfennig Core + Send command to pfennig Core @@ -3167,7 +3167,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. (میلی ثانیه )فاصله ارتباط خاص - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3283,11 +3283,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. خطا در بارگیری wallet.dat: کیف پول خراب شده است - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig خطا در بارگیری wallet.dat: کیف پول به ویرایش جدیدتری از Biticon نیاز دارد - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete سلام diff --git a/src/qt/locale/bitmark_fa.ts~ b/src/qt/locale/bitmark_fa.ts~ new file mode 100644 index 0000000..9c49d54 --- /dev/null +++ b/src/qt/locale/bitmark_fa.ts~ @@ -0,0 +1,3373 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 منتشر شده است. پروندهٔ COPYING یا نشانی http://www.opensource.org/licenses/mit-license.php. را ببینید⏎ ⏎ این محصول شامل نرم‌افزار توسعه داده‌شده در پروژهٔ OpenSSL است. در این نرم‌افزار از OpenSSL Toolkit (http://www.openssl.org/) و نرم‌افزار رمزنگاری نوشته شده توسط اریک یانگ (eay@cryptsoft.com) و UPnP توسط توماس برنارد استفاده شده است. + + + Copyright + حق تألیف + + + The Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + این‌ها نشانی‌های بیت‌کوین شما برای ارسال وجود هستند. همیشه قبل از ارسال سکه‌ها، نشانی دریافت‌کننده و مقدار ارسالی را بررسی کنید. + + + These are your GameCredits 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 جداشونده با کاما (*.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>حداقل ۱۰ حرف تصادفی</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 GameCreditsS</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 + کیف پول رمزنگاری شد + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + گذرواژهٔ کیف پول با موفقیت عوض شد. + + + + GameCreditsGUI + + Sign &message... + &امضای پیام... + + + Synchronizing with network... + همگام‌سازی با شبکه... + + + &Overview + &بررسی اجمالی + + + Node + + + + Show general overview of wallet + نمایش بررسی اجمالی کیف پول + + + &Transactions + &تراکنش‌ها + + + Browse transaction history + مرور تاریخچهٔ تراکنش‌ها + + + E&xit + &خروج + + + Quit application + خروج از برنامه + + + Show information about GameCredits + نمایش اطلاعات در مورد بیت‌کوین + + + 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 GameCredits address + ارسال وجه به نشانی بیت‌کوین + + + Modify configuration options for GameCredits + تغییر و اصلاح تنظیمات پیکربندی بیت‌کوین + + + Backup wallet to another location + تهیهٔ پشتیبان از کیف پول در یک مکان دیگر + + + Change the passphrase used for wallet encryption + تغییر گذرواژهٔ مورد استفاده در رمزنگاری کیف پول + + + &Debug window + پنجرهٔ ا&شکال‌زدایی + + + Open debugging and diagnostic console + باز کردن کنسول خطایابی و اشکال‌زدایی + + + &Verify message... + با&زبینی پیام... + + + GameCredits + بیت‌کوین + + + Wallet + کیف پول + + + &Send + &ارسال + + + &Receive + &دریافت + + + &Show / Hide + &نمایش/ عدم نمایش + + + Show or hide the main Window + نمایش یا مخفی‌کردن پنجرهٔ اصلی + + + Encrypt the private keys that belong to your wallet + رمزنگاری کلیدهای خصوصی متعلق به کیف پول شما + + + Sign messages with your GameCredits addresses to prove you own them + برای اثبات اینکه پیام‌ها به شما تعلق دارند، آن‌ها را با نشانی بیت‌کوین خود امضا کنید + + + Verify messages to ensure they were signed with specified GameCredits addresses + برای حصول اطمینان از اینکه پیام با نشانی بیت‌کوین مشخص شده امضا است یا خیر، پیام را شناسایی کنید + + + &File + &فایل + + + &Settings + &تنظیمات + + + &Help + &کمک‌رسانی + + + Tabs toolbar + نوارابزار برگه‌ها + + + [testnet] + [شبکهٔ آزمایش] + + + GameCredits Core + هسته GameCredits + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + کلاینت بیت‌کوین + + + %n active connection(s) to GameCredits 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 ساعت + + + %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 + اطلاعات + + + 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + هسته GameCredits + + + 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + استفاده از یک مسیر سفارشی: + + + GameCredits + بیت‌کوین + + + 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 GameCredits after logging in to the system. + اجرای خودکار بیت‌کوین در زمان ورود به سیستم. + + + &Start GameCredits on system login + &اجرای بیت‌کوین با ورود به سیستم + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + باز کردن خودکار درگاه شبکهٔ بیت‌کوین روی روترها. تنها زمانی کار می‌کند که روتر از پروتکل UPnP پشتیبانی کند و این پروتکل فعال باشد. + + + Map port using &UPnP + نگاشت درگاه شبکه با استفاده از پروتکل &UPnP + + + Proxy &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. + تنها بعد از کوچک کردن پنجره، 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 GameCredits. + زبان رابط کاربر می‌تواند در این‌جا تنظیم شود. تنظیمات بعد از ظروع مجدد بیت‌کوین اعمال خواهد شد. + + + &Unit to show amounts in: + &واحد نمایش مبالغ: + + + Choose the default subdivision unit to show in the interface and when sending coins. + انتخاب واحد پول مورد استفاده برای نمایش در پنجره‌ها و برای ارسال سکه. + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + نشانی اینترنتی قابل تجزیه و تحلیل نیست! دلیل این وضعیت ممکن است یک نشانی نامعتبر بیت‌کوین و یا پارامترهای ناهنجار در URI بوده باشد. + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + بیت‌کوین + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + یک آدرس بیت‌کوین وارد کنید (مثلاً bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + ذخیرهٔ کد QR + + + 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 + تعداد ارتباطات + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + فایلِ لاگِ اشکال زدایی GameCredits را از دایرکتوری جاری داده ها باز کنید. این عملیات ممکن است برای فایلهای لاگِ حجیم طولانی شود. + + + Clear console + پاکسازی کنسول + + + Welcome to the GameCredits 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 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 GameCredits 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 + ارسال سکه + + + 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. + با احتساب هزینهٔ %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 GameCredits 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: + A&مبلغ : + + + Pay &To: + پرداخ&ت به: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + نشانی مقصد برای پرداخت (مثلاً bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + نشانی مورد استفاده برای امضا کردن پیام (برای مثال bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits 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. + برای شناسایی پیام، نشانیِ امضا کننده و متن پیام را وارد کنید. (مطمئن شوید که فاصله‌ها، تب‌ها و خطوط را عیناً کپی می‌کنید.) مراقب باشید در امضا چیزی بیشتر از آنچه در پیام می‌بینید وجود نداشته باشد تا فریب دزدان اینترنتی و حملات از نوع MITM را نخورید. + + + The address the message was signed with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + نشانی مورد استفاده برای امضا کردن پیام (برای مثال bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + برای حصول اطمینان از اینکه پیام با نشانی بیت‌کوین مشخص شده امضا است یا خیر، پیام را شناسایی کنید + + + Verify &Message + &شناسایی پیام + + + Reset all verify message fields + بازنشانی تمام فیلدهای پیام + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + یک نشانی بیت‌کوین وارد کنید (مثلاً bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + هسته GameCredits + + + The Bitcoin 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 + شناسهٔ تراکنش + + + 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 + + + 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. + + + + Comma separated file (*.csv) + پروندهٔ نوع 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. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + پشتیبان‌گیری موفق + + + + gamecredits-core + + Usage: + استفاده: + + + List commands + نمایش لیست فرمان‌ها + + + Get help for a command + راهنمایی در مورد یک دستور + + + Options: + گزینه‌ها: + + + Specify configuration file (default: gamecredits.conf) + مشخص کردن فایل پیکربندی (پیش‌فرض: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + مشخص کردن فایل شناسهٔ پردازش - pid - (پیش‌فرض: gamecredits.pid) + + + Specify data directory + مشخص کردن دایرکتوری داده‌ها + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + پذیرش اتصالات روی پورت <port> (پیش‌فرض: 8833 یا شبکهٔ آزمایشی: 50001) + + + Maintain at most <n> connections to peers (default: 125) + حداکثر <n> اتصال با همتایان برقرار شود (پیش‌فرض: ۱۲۵) + + + 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 + هنگام تنظیم پورت RPC %u برای گوش دادن روی IPv4 خطایی رخ داده است: %s + + + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + پورت مورد شنود برای اتصالات JSON-RPC (پیش‌فرض: 40001 برای شبکهٔ تست 50000) + + + Accept command line and JSON-RPC commands + پذیرش دستورات خط فرمان و دستورات JSON-RPC + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits 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 + مقید به نشانی داده شده باشید و همیشه از آن پیروی کنید. از نشانه گذاری استاندار IPv6 به صورت Host]:Port] استفاده کنید. + + + 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! + خطا: این تراکنش به علت میزان وجه، دشواری، و یا استفاده از وجوه دریافتی اخیر نیازمند کارمزد به مبلغ حداقل %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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + هشدار: لطفا زمان و تاریخ رایانه خود را تصحیح نمایید! اگر ساعت رایانه شما اشتباه باشد gamecredits ممکن است صحیح کار نکند + + + 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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. + + + + 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 gamecredits-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. GameCredits 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) + حداکثر بافر دریافت شده بر اساس اتصال <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) + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the GameCredits 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 GameCredits Wiki for SSL setup instructions) + گزینه ssl (به ویکیgamecredits برای راهنمای راه اندازی ssl مراجعه شود) + + + Send command to GameCredits Core + + + + Send trace/debug info to console instead of debug.log file + اطلاعات ردگیری/اشکال‌زدایی را به جای فایل لاگ اشکال‌زدایی به کنسول بفرستید + + + 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) + (میلی ثانیه )فاصله ارتباط خاص + + + Start GameCredits 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 + + + + 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پیش فرض: ) کلید خصوصی سرور + + + This help message + پیام کمکی + + + Unable to bind to %s on this computer (bind returned error %d, %s) + امکان اتصال به %s از این رایانه وجود ندارد ( bind returned error %d, %s) + + + 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 GameCredits + خطا در بارگیری wallet.dat: کیف پول به ویرایش جدیدتری از Biticon نیاز دارد + + + Wallet needed to be rewritten: restart GameCredits 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 + به اتصال یک گره اضافه کنید و اتصال را باز نگاه دارید + + + 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. + %s، شما باید یک rpcpassword را در فایل پیکربندی تنظیم کنید :⏎%s⏎ اگر فایل ایجاد نشد، یک فایل فقط متنی ایجاد کنید. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_fa_IR.ts b/src/qt/locale/bitmark_fa_IR.ts index 6f3eff2..bffe295 100644 --- a/src/qt/locale/bitmark_fa_IR.ts +++ b/src/qt/locale/bitmark_fa_IR.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O رمزگذاری wallet را تایید کنید - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,8 +220,8 @@ This product includes software developed by the OpenSSL Project for use in the O تایید رمزگذاری - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig برای اتمام فرایند رمزگذاری بسته خواهد شد. به خاطر داشته باشید که رمزگذاری WALLET شما، کامپیوتر شما را از آلودگی به بدافزارها مصون نمی دارد. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig برای اتمام فرایند رمزگذاری بسته خواهد شد. به خاطر داشته باشید که رمزگذاری WALLET شما، کامپیوتر شما را از آلودگی به بدافزارها مصون نمی دارد. Wallet encryption failed @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... امضا و پیام @@ -291,8 +291,8 @@ This product includes software developed by the OpenSSL Project for use in the O از "درخواست نامه"/ application خارج شو - Show information about Pfennig - اطلاعات در مورد Pfennig را نشان بده + Show information about pfennig + اطلاعات در مورد pfennig را نشان بده About &Qt @@ -339,12 +339,12 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig - اصلاح انتخابها برای پیکربندی Pfennig + Modify configuration options for pfennig + اصلاح انتخابها برای پیکربندی pfennig Backup wallet to another location @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,17 +451,17 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client مشتری pfennig - %n active connection(s) to Pfennig network - %n ارتباط فعال به شبکه Pfennig -%n ارتباط فعال به شبکه Pfennig + %n active connection(s) to pfennig network + %n ارتباط فعال به شبکه pfennig +%n ارتباط فعال به شبکه pfennig No block source available... @@ -553,7 +553,7 @@ Address: %4 wallet رمزگذاری شد و در حال حاضر قفل است - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -839,7 +839,7 @@ Address: %4 حساب وارد شده «1%» از پیش در دفترچه حساب ها موجود است. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. آدرس وارد شده "%1" یک آدرس صحیح برای pfennig نسشت @@ -877,11 +877,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -928,15 +928,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -948,7 +948,7 @@ Address: %4 - Pfennig + pfennig pfennig @@ -1010,11 +1010,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1030,7 +1030,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1090,7 +1090,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1146,7 +1146,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1158,7 +1158,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1213,7 +1213,7 @@ Address: %4 فرم - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. اطلاعات نمایش داده شده ممکن است روزآمد نباشد. wallet شما به صورت خودکار بعد از برقراری اتصال با شبکه pfennig به روز می شود اما این فرایند هنوز تکمیل نشده است. @@ -1268,7 +1268,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1335,7 +1335,7 @@ Address: %4 QObject - Pfennig + pfennig pfennig @@ -1351,11 +1351,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) یک آدرس pfennig وارد کنید (مثال bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1477,7 +1477,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1485,8 +1485,8 @@ Address: %4 - Welcome to the Pfennig RPC console. - به کنسول آر.پی.سی. Pfennig خوش آمدید + Welcome to the pfennig RPC console. + به کنسول آر.پی.سی. pfennig خوش آمدید Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1548,7 +1548,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1861,7 +1861,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1948,7 +1948,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1967,7 +1967,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2022,7 +2022,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2050,7 +2050,7 @@ Address: %4 یک آدرس pfennig وارد کنید (مثال bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2062,7 +2062,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) یک آدرس pfennig وارد کنید (مثال bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2121,7 +2121,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2616,8 +2616,8 @@ Address: %4 دایرکتوری داده را مشخص کن - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - ارتباطات را در <PORT> بشنوید (پیش فرض: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + ارتباطات را در <PORT> بشنوید (پیش فرض: 40002 or testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2644,15 +2644,15 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - ارتباطاتِ JSON-RPC را در <port> گوش کنید (پیش فرض:RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + ارتباطاتِ JSON-RPC را در <port> گوش کنید (پیش فرض:40001) Accept command line and JSON-RPC commands command line و JSON-RPC commands را قبول کنید - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2677,7 +2677,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2750,7 +2750,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2762,7 +2762,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2798,7 +2798,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2818,7 +2818,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3042,7 +3042,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3106,7 +3106,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3126,11 +3126,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3166,7 +3166,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. تعیین مدت زمان وقفه (time out) به هزارم ثانیه - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3282,12 +3282,12 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. خطا در هنگام لود شدن wallet.dat: Wallet corrupted - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig خطا در هنگام لود شدن wallet.dat. به نسخه جدید Bitocin برای wallet نیاز است. - Wallet needed to be rewritten: restart Pfennig to complete - wallet نیاز به بازنویسی دارد. Pfennig را برای تکمیل عملیات دوباره اجرا کنید. + Wallet needed to be rewritten: restart pfennig to complete + wallet نیاز به بازنویسی دارد. pfennig را برای تکمیل عملیات دوباره اجرا کنید. Error loading wallet.dat diff --git a/src/qt/locale/bitmark_fa_IR.ts~ b/src/qt/locale/bitmark_fa_IR.ts~ new file mode 100644 index 0000000..915d2d3 --- /dev/null +++ b/src/qt/locale/bitmark_fa_IR.ts~ @@ -0,0 +1,3372 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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>. + رمز/پَس فرِیز جدید را در 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 GameCreditsS</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 + تایید رمزگذاری + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits برای اتمام فرایند رمزگذاری بسته خواهد شد. به خاطر داشته باشید که رمزگذاری 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. + + + + + GameCreditsGUI + + Sign &message... + امضا و پیام + + + Synchronizing with network... + به روز رسانی با شبکه... + + + &Overview + و بازبینی + + + Node + + + + Show general overview of wallet + نمای کلی از wallet را نشان بده + + + &Transactions + و تراکنش + + + Browse transaction history + تاریخچه تراکنش را باز کن + + + E&xit + خروج + + + Quit application + از "درخواست نامه"/ application خارج شو + + + Show information about GameCredits + اطلاعات در مورد GameCredits را نشان بده + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + اصلاح انتخابها برای پیکربندی GameCredits + + + Backup wallet to another location + گرفتن نسخه پیشتیبان در آدرسی دیگر + + + Change the passphrase used for wallet encryption + رمز مربوط به رمزگذاریِ wallet را تغییر دهید + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + gamecredits + + + Wallet + کیف پول + + + &Send + + + + &Receive + + + + &Show / Hide + &نمایش/ عدم نمایش و + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + و فایل + + + &Settings + و تنظیمات + + + &Help + و راهنما + + + Tabs toolbar + نوار ابزار + + + [testnet] + [testnet] + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + مشتری gamecredits + + + %n active connection(s) to GameCredits network + %n ارتباط فعال به شبکه GameCredits +%n ارتباط فعال به شبکه GameCredits + + + 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> + wallet رمزگذاری شد و در حال حاضر از حالت قفل در آمده است + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + wallet رمزگذاری شد و در حال حاضر قفل است + + + A fatal error occurred. GameCredits 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 GameCredits address. + آدرس وارد شده "%1" یک آدرس صحیح برای gamecredits نسشت + + + Could not unlock wallet. + عدم توانیی برای قفل گشایی 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + gamecredits + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits network after a connection is established, but this process has not completed yet. + اطلاعات نمایش داده شده ممکن است روزآمد نباشد. wallet شما به صورت خودکار بعد از برقراری اتصال با شبکه gamecredits به روز می شود اما این فرایند هنوز تکمیل نشده است. + + + 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + gamecredits + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + یک آدرس gamecredits وارد کنید (مثال bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + + + + 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 + تعداد اتصال + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits RPC console. + به کنسول آر.پی.سی. GameCredits خوش آمدید + + + 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 GameCredits 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 + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + یک آدرس gamecredits وارد کنید (مثال bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + یک آدرس gamecredits وارد کنید (مثال bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + یک آدرس gamecredits وارد کنید (مثال bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + + + + The Bitcoin Core Developers + + + + [testnet] + [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! + این 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. + میزان وجه کم شده یا اضافه شده به حساب + + + + 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) + 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 + + + + + gamecredits-core + + Usage: + میزان استفاده: + + + List commands + فهرست دستورها + + + Get help for a command + درخواست کمک برای یک دستور + + + Options: + انتخابها: + + + Specify configuration file (default: gamecredits.conf) + فایل پیکربندیِ را مشخص کنید (پیش فرض: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + فایل pid را مشخص کنید (پیش فرض: gamecreditsd.pid) + + + Specify data directory + دایرکتوری داده را مشخص کن + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + ارتباطات را در <PORT> بشنوید (پیش فرض: 40002 or testnet: 50001) + + + 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: 40001 or testnet: 50000) + ارتباطاتِ JSON-RPC را در <port> گوش کنید (پیش فرض:40001) + + + Accept command line and JSON-RPC commands + command line و JSON-RPC commands را قبول کنید + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits Core + + + + Send trace/debug info to console instead of debug.log file + ارسال اطلاعات پیگیری/خطایابی به کنسول به جای ارسال به فایل 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) + تعیین مدت زمان وقفه (time out) به هزارم ثانیه + + + Start GameCredits 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 را از آدرس آی.پی. مشخصی برقرار کنید. + + + 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) + + + 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: Wallet corrupted + + + Error loading wallet.dat: Wallet requires newer version of GameCredits + خطا در هنگام لود شدن wallet.dat. به نسخه جدید Bitocin برای wallet نیاز است. + + + Wallet needed to be rewritten: restart GameCredits to complete + wallet نیاز به بازنویسی دارد. GameCredits را برای تکمیل عملیات دوباره اجرا کنید. + + + 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 + یک گره برای اتصال اضافه کنید و تلاش کنید تا اتصال را باز نگاه دارید + + + 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. + شما باید یک رمز rpcpassword=<password> را در فایل تنظیمات ایجاد کنید⏎ %s ⏎ اگر فایل ایجاد نشده است، آن را با یک فایل "فقط متنی" ایجاد کنید. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_fi.ts b/src/qt/locale/bitmark_fi.ts index ad60944..34db6be 100644 --- a/src/qt/locale/bitmark_fi.ts +++ b/src/qt/locale/bitmark_fi.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Tietoja Pfennig Core + About pfennig Core + Tietoja pfennig Core - <b>Pfennig Core</b> version - <b>Pfennig Core</b> versio + <b>pfennig Core</b> version + <b>pfennig Core</b> versio @@ -30,7 +30,7 @@ Tämä ohjelma sisältää OpenSSL projektin OpenSSL työkalupakin (http://www.o The Bitcoin Core Developers - Pfennig Core kehittäjät + pfennig Core kehittäjät (%1-bit) @@ -104,12 +104,12 @@ Tämä ohjelma sisältää OpenSSL projektin OpenSSL työkalupakin (http://www.o Vastaanottava osoite - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Nämä ovat sinun Pfennig osoitteita maksujen lähetykseen. Tarkista aina rahan määrä ja vastaanottajan osoite ennenkuin lähetät kolikkoja. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Nämä ovat sinun pfennig osoitteita maksujen lähetykseen. Tarkista aina rahan määrä ja vastaanottajan osoite ennenkuin lähetät kolikkoja. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Nämä ovat sinun Pfennig-osoitteesi suoritusten vastaanottamiseen. Suositellaan että annat uuden osoitteen kullekin rahansiirrolle + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Nämä ovat sinun pfennig-osoitteesi suoritusten vastaanottamiseen. Suositellaan että annat uuden osoitteen kullekin rahansiirrolle Copy &Label @@ -206,8 +206,8 @@ Tämä ohjelma sisältää OpenSSL projektin OpenSSL työkalupakin (http://www.o Vahvista lompakon salaus - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Varoitus: Jos salaat lompakkosi ja menetät tunnuslauseesi, <b>MENETÄT KAIKKI PfennigISI</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Varoitus: Jos salaat lompakkosi ja menetät tunnuslauseesi, <b>MENETÄT KAIKKI pfennigISI</b>! Are you sure you wish to encrypt your wallet? @@ -226,8 +226,8 @@ Tämä ohjelma sisältää OpenSSL projektin OpenSSL työkalupakin (http://www.o Lompakko salattu - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig sulkeutuu lopettaakseen salausprosessin. Muista, että salattukaan lompakko ei täysin suojaa sitä haittaohjelmien aiheuttamilta varkauksilta. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig sulkeutuu lopettaakseen salausprosessin. Muista, että salattukaan lompakko ei täysin suojaa sitä haittaohjelmien aiheuttamilta varkauksilta. Wallet encryption failed @@ -259,7 +259,7 @@ Tämä ohjelma sisältää OpenSSL projektin OpenSSL työkalupakin (http://www.o - PfennigGUI + pfennigGUI Sign &message... &Allekirjoita viesti... @@ -297,8 +297,8 @@ Tämä ohjelma sisältää OpenSSL projektin OpenSSL työkalupakin (http://www.o Sulje ohjelma - Show information about Pfennig - Näytä tietoa Pfennig-projektista + Show information about pfennig + Näytä tietoa pfennig-projektista About &Qt @@ -345,12 +345,12 @@ Tämä ohjelma sisältää OpenSSL projektin OpenSSL työkalupakin (http://www.o Ladataan lohkoindeksiä... - Send coins to a Pfennig address - Lähetä kolikoita Pfennig-osoitteeseen + Send coins to a pfennig address + Lähetä kolikoita pfennig-osoitteeseen - Modify configuration options for Pfennig - Muuta Pfennigin konfiguraatioasetuksia + Modify configuration options for pfennig + Muuta pfennigin konfiguraatioasetuksia Backup wallet to another location @@ -373,8 +373,8 @@ Tämä ohjelma sisältää OpenSSL projektin OpenSSL työkalupakin (http://www.o Varmista &viesti... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -394,19 +394,19 @@ Tämä ohjelma sisältää OpenSSL projektin OpenSSL työkalupakin (http://www.o Show or hide the main Window - Näytä tai piilota Pfennig-ikkuna + Näytä tai piilota pfennig-ikkuna Encrypt the private keys that belong to your wallet Suojaa yksityiset avaimet, jotka kuuluvat lompakkoosi - Sign messages with your Pfennig addresses to prove you own them - Allekirjoita viestisi omalla Pfennig -osoitteellasi todistaaksesi, että omistat ne + Sign messages with your pfennig addresses to prove you own them + Allekirjoita viestisi omalla pfennig -osoitteellasi todistaaksesi, että omistat ne - Verify messages to ensure they were signed with specified Pfennig addresses - Varmista, että viestisi on allekirjoitettu määritetyllä Pfennig -osoitteella + Verify messages to ensure they were signed with specified pfennig addresses + Varmista, että viestisi on allekirjoitettu määritetyllä pfennig -osoitteella &File @@ -429,16 +429,16 @@ Tämä ohjelma sisältää OpenSSL projektin OpenSSL työkalupakin (http://www.o [testnet] - Pfennig Core - Pfennig-ydin + pfennig Core + pfennig-ydin Request payments (generates QR codes and pfennig: URIs) Pyydä maksuja (Luo QR koodit ja pfennig: URIt) - &About Pfennig Core - &Tietoja Pfennig Core + &About pfennig Core + &Tietoja pfennig Core Show the list of used sending addresses and labels @@ -457,16 +457,16 @@ Tämä ohjelma sisältää OpenSSL projektin OpenSSL työkalupakin (http://www.o &Komentorivin valinnat - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Näytä Pfennig Core ohjeet saadaksesi listan mahdollisista Pfennigin komentorivivalinnoista + Show the pfennig Core help message to get a list with possible pfennig command-line options + Näytä pfennig Core ohjeet saadaksesi listan mahdollisista pfennigin komentorivivalinnoista - Pfennig client - Pfennig-asiakas + pfennig client + pfennig-asiakas - %n active connection(s) to Pfennig network - %n aktiivinen yhteys Pfennig-verkkoon%n aktiivista yhteyttä Pfennig-verkkoon + %n active connection(s) to pfennig network + %n aktiivinen yhteys pfennig-verkkoon%n aktiivista yhteyttä pfennig-verkkoon No block source available... @@ -560,8 +560,8 @@ Osoite: %4 Lompakko on <b>salattu</b> ja tällä hetkellä <b>lukittuna</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Peruuttamaton virhe on tapahtunut. Pfennig ei voi enää jatkaa turvallisesti ja sammutetaan. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Peruuttamaton virhe on tapahtunut. pfennig ei voi enää jatkaa turvallisesti ja sammutetaan. @@ -845,8 +845,8 @@ Osoite: %4 Osoite "%1" on jo osoitekirjassa. - The entered address "%1" is not a valid Pfennig address. - Antamasi osoite "%1" ei ole validi Pfennig-osoite. + The entered address "%1" is not a valid pfennig address. + Antamasi osoite "%1" ei ole validi pfennig-osoite. Could not unlock wallet. @@ -883,12 +883,12 @@ Osoite: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core - Kometorivivalinnat + pfennig Core - Command-line options + pfennig Core - Kometorivivalinnat - Pfennig Core - Pfennig-ydin + pfennig Core + pfennig-ydin version @@ -934,16 +934,16 @@ Osoite: %4 Tervetuloa - Welcome to Pfennig Core. - Tervetuloa Pfennig Core + Welcome to pfennig Core. + Tervetuloa pfennig Core - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Tämän on ensimmäinen kerta kun Pfennig Core on käynnistetty joten voit valita data-hakemiston paikan. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Tämän on ensimmäinen kerta kun pfennig Core on käynnistetty joten voit valita data-hakemiston paikan. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig Core lataa ja tallentaa kopion Pfennigin 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. + pfennig Core will download and store a copy of the pfennig 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. + pfennig Core lataa ja tallentaa kopion pfennigin 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 @@ -954,8 +954,8 @@ Osoite: %4 Määritä oma kansio: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,12 +1016,12 @@ Osoite: %4 Maksa rahansiirtopalkkio - Automatically start Pfennig after logging in to the system. - Käynnistä Pfennig kirjautumisen yhteydessä. + Automatically start pfennig after logging in to the system. + Käynnistä pfennig kirjautumisen yhteydessä. - &Start Pfennig on system login - &Käynnistä Pfennig kirjautumisen yhteydessä + &Start pfennig on system login + &Käynnistä pfennig kirjautumisen yhteydessä Size of &database cache @@ -1036,8 +1036,8 @@ Osoite: %4 Script &varmistuksen threadien määrä - Connect to the Pfennig network through a SOCKS proxy. - Yhdistä Pfennig-verkkoon SOCKS proxyn kautta. + Connect to the pfennig network through a SOCKS proxy. + Yhdistä pfennig-verkkoon SOCKS proxyn kautta. &Connect through SOCKS proxy (default proxy): @@ -1096,8 +1096,8 @@ Osoite: %4 &Käytä varmistamattomia vaihtorahoja - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Avaa Pfennig-asiakasohjelman portti reitittimellä automaattisesti. Tämä toimii vain, jos reitittimesi tukee UPnP:tä ja se on käytössä. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Avaa pfennig-asiakasohjelman portti reitittimellä automaattisesti. Tämä toimii vain, jos reitittimesi tukee UPnP:tä ja se on käytössä. Map port using &UPnP @@ -1137,7 +1137,7 @@ Osoite: %4 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ää Pfennig-ohjelman ikkunan lopettamatta itse ohjelmaa. Kun tämä asetus on valittuna, ohjelman voi sulkea vain valitsemalla Lopeta ohjelman valikosta. + Ikkunaa suljettaessa vain pienentää pfennig-ohjelman ikkunan lopettamatta itse ohjelmaa. Kun tämä asetus on valittuna, ohjelman voi sulkea vain valitsemalla Lopeta ohjelman valikosta. M&inimize on close @@ -1152,8 +1152,8 @@ Osoite: %4 &Käyttöliittymän kieli - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Tässä voit määritellä käyttöliittymän kielen. Muutokset astuvat voimaan seuraavan kerran, kun Pfennig käynnistetään. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Tässä voit määritellä käyttöliittymän kielen. Muutokset astuvat voimaan seuraavan kerran, kun pfennig käynnistetään. &Unit to show amounts in: @@ -1164,8 +1164,8 @@ Osoite: %4 Valitse mitä yksikköä käytetään ensisijaisesti pfennig-määrien näyttämiseen. - Whether to show Pfennig addresses in the transaction list or not. - Näytetäänkö Pfennig-osoitteet rahansiirrot listassa vai ei. + Whether to show pfennig addresses in the transaction list or not. + Näytetäänkö pfennig-osoitteet rahansiirrot listassa vai ei. &Display addresses in transaction list @@ -1219,8 +1219,8 @@ Osoite: %4 Lomake - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig-verkon kanssa automaattisesti yhteyden muodostamisen jälkeen, mutta synkronointi on vielä meneillään. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig-verkon kanssa automaattisesti yhteyden muodostamisen jälkeen, mutta synkronointi on vielä meneillään. Wallet @@ -1256,7 +1256,7 @@ Osoite: %4 Your current total balance - Tililläsi tällä hetkellä olevien Pfennigien määrä + Tililläsi tällä hetkellä olevien pfennigien määrä <b>Recent transactions</b> @@ -1274,8 +1274,8 @@ Osoite: %4 URI käsittely - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URIa ei voitu jäsentää! Tämä voi johtua kelvottomasta Pfennig-osoitteesta tai virheellisistä URI parametreista. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URIa ei voitu jäsentää! Tämä voi johtua kelvottomasta pfennig-osoitteesta tai virheellisistä URI parametreista. Requested payment amount of %1 is too small (considered dust). @@ -1341,8 +1341,8 @@ Osoite: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,12 +1357,12 @@ Osoite: %4 Virhe: Virheellinen yhdistelmä -regtest ja -testnet. - Pfennig Core didn't yet exit safely... - Pfennig Core ei ole vielä sulkeutunut turvallisesti... + pfennig Core didn't yet exit safely... + pfennig Core ei ole vielä sulkeutunut turvallisesti... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Anna Pfennig-osoite (esim. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Anna pfennig-osoite (esim. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,7 +1483,7 @@ Osoite: %4 Debug lokitiedosto - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig 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. @@ -1491,8 +1491,8 @@ Osoite: %4 Tyhjennä konsoli - Welcome to the Pfennig RPC console. - Tervetuloa Pfennig RPC konsoliin. + Welcome to the pfennig RPC console. + Tervetuloa pfennig RPC konsoliin. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1554,8 +1554,8 @@ Osoite: %4 &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 Pfennig network. - Valinnainen viesti liitetään maksupyyntöön ja näytetään avattaessa. Viestiä ei lähetetä Pfennig-verkkoon. + 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 pfennig network. + Valinnainen viesti liitetään maksupyyntöön ja näytetään avattaessa. Viestiä ei lähetetä pfennig-verkkoon. An optional label to associate with the new receiving address. @@ -1704,7 +1704,7 @@ Osoite: %4 SendCoinsDialog Send Coins - Lähetä Pfennigeja + Lähetä pfennigeja Coin Control Features @@ -1792,7 +1792,7 @@ Osoite: %4 Confirm send coins - Hyväksy Pfennigien lähettäminen + Hyväksy pfennigien lähettäminen %1 to %2 @@ -1844,7 +1844,7 @@ Osoite: %4 The amount to pay must be larger than 0. - Maksettavan summan tulee olla suurempi kuin 0 Pfennigia. + Maksettavan summan tulee olla suurempi kuin 0 pfennigia. The amount exceeds your balance. @@ -1867,8 +1867,8 @@ Osoite: %4 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 Pfennig address - Varoitus: Virheellinen Pfennig osoite + Warning: Invalid pfennig address + Varoitus: Virheellinen pfennig osoite (no label) @@ -1907,7 +1907,7 @@ Osoite: %4 The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Osoite, johon Pfennigit lähetetään (esim. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Osoite, johon pfennigit lähetetään (esim. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Enter a label for this address to add it to your address book @@ -1954,8 +1954,8 @@ Osoite: %4 Aseta nimi tälle osoitteelle lisätäksesi sen käytettyjen osoitteiden listalle. - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. - Viesti joka liitettiin pfennig: URI:iin tallennetaan rahansiirtoon viitteeksi. Tätä viestiä ei lähetetä Pfennig-verkkoon. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. + Viesti joka liitettiin pfennig: URI:iin tallennetaan rahansiirtoon viitteeksi. Tätä viestiä ei lähetetä pfennig-verkkoon. This is an unverified payment request. @@ -1973,8 +1973,8 @@ Osoite: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig core sulkeutuu... + pfennig Core is shutting down... + pfennig core sulkeutuu... Do not shut down the computer until this window disappears. @@ -2028,8 +2028,8 @@ Osoite: %4 Kopioi tämänhetkinen allekirjoitus leikepöydälle - Sign the message to prove you own this Pfennig address - Allekirjoita viesti todistaaksesi, että omistat tämän Pfennig-osoitteen + Sign the message to prove you own this pfennig address + Allekirjoita viesti todistaaksesi, että omistat tämän pfennig-osoitteen Sign &Message @@ -2056,8 +2056,8 @@ Osoite: %4 Osoite, jolla viesti allekirjoitettiin (esimerkiksi bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Tarkista viestin allekirjoitus varmistaaksesi, että se allekirjoitettiin tietyllä Pfennig-osoitteella + Verify the message to ensure it was signed with the specified pfennig address + Tarkista viestin allekirjoitus varmistaaksesi, että se allekirjoitettiin tietyllä pfennig-osoitteella Verify &Message @@ -2068,8 +2068,8 @@ Osoite: %4 Tyhjennä kaikki varmista-viesti-kentät - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Anna Pfennig-osoite (esim. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Anna pfennig-osoite (esim. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2127,12 +2127,12 @@ Osoite: %4 SplashScreen - Pfennig Core - Pfennig-ydin + pfennig Core + pfennig-ydin The Bitcoin Core Developers - Pfennig Core kehittäjät + pfennig Core kehittäjät [testnet] @@ -2392,7 +2392,7 @@ Osoite: %4 Destination address of transaction. - Rahansiirron kohteen Pfennig-osoite + Rahansiirron kohteen pfennig-osoite Amount removed from or added to balance. @@ -2553,7 +2553,7 @@ Osoite: %4 WalletModel Send Coins - Lähetä Pfennigeja + Lähetä pfennigeja @@ -2622,8 +2622,8 @@ Osoite: %4 Määritä data-hakemisto - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Kuuntele yhteyksiä portista <port> (oletus: P2PPORT tai testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Kuuntele yhteyksiä portista <port> (oletus: 40002 tai testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2650,16 +2650,16 @@ Osoite: %4 Virhe valmisteltaessa RPC-portin %u avaamista kuunneltavaksi: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Kuuntele JSON-RPC -yhteyksiä portista <port> (oletus: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Kuuntele JSON-RPC -yhteyksiä portista <port> (oletus: 40001 or testnet: 50000) Accept command line and JSON-RPC commands Hyväksy merkkipohjaiset- ja JSON-RPC-käskyt - Pfennig Core RPC client version - Pfennig Core RPC asiakasversio + pfennig Core RPC client version + pfennig Core RPC asiakasversio Run in the background as a daemon and accept commands @@ -2683,7 +2683,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, sinun tulee asettaa rpcpassword asetustietostossa: %s @@ -2694,7 +2694,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +esimerkiksi: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2766,8 +2766,8 @@ esimerkiksi: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 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. Pfennig Core is probably already running. - Ei voida yhdistää %s tässä tietokoneessa. Pfennig Core on luultavasti jo käynnissä. + Unable to bind to %s on this computer. pfennig Core is probably already running. + Ei voida yhdistää %s tässä tietokoneessa. pfennig Core on luultavasti jo käynnissä. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2778,8 +2778,8 @@ esimerkiksi: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Varoitus: -paytxfee on asetettu erittäin korkeaksi! Tämä on maksukulu jonka tulet maksamaan kun lähetät siirron. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Varoitus: Tarkista että tietokoneesi kellonaika ja päivämäärä ovat paikkansapitäviä! Pfennig ei toimi oikein väärällä päivämäärällä ja/tai kellonajalla. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Varoitus: Tarkista että tietokoneesi kellonaika ja päivämäärä ovat paikkansapitäviä! pfennig 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. @@ -2814,8 +2814,8 @@ esimerkiksi: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Yritetään palauttaa privaattiavaimia korruptoituneesta wallet.dat -lompakkotiedostosta - Pfennig Core Daemon - Pfennig Core taustapalvelin + pfennig Core Daemon + pfennig Core taustapalvelin Block creation options: @@ -2834,8 +2834,8 @@ esimerkiksi: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Yhdistä SOCKS proxin kautta - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Yhdistä JSON-RPC portissa <port> (oletus: RPCPORT tai testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Yhdistä JSON-RPC portissa <port> (oletus: 40001 tai testnet: 50000) Connection options: @@ -3058,8 +3058,8 @@ esimerkiksi: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Tuodaan lohkoja ulkoisesta blk000??.dat tiedostosta - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - Ei voida lukita data-hakemistoa %s. Pfennig Core on luultavasti jo käynnissä. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + Ei voida lukita data-hakemistoa %s. pfennig 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) @@ -3122,8 +3122,8 @@ esimerkiksi: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Tulosta lohkopuu käynnistyksessä (oletus: 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) - RPC SSL valinnat: (katso Pfennig Wikistä SSL-asennuksen ohjeet) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) + RPC SSL valinnat: (katso pfennig Wikistä SSL-asennuksen ohjeet) RPC server options: @@ -3142,12 +3142,12 @@ esimerkiksi: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Aja threadi jossa tallennetaan lompakko ajoittain (oletus: 1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL asetukset (katso Pfennig Wikistä tarkemmat SSL ohjeet) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL asetukset (katso pfennig Wikistä tarkemmat SSL ohjeet) - Send command to Pfennig Core - Lähetä komento Pfennig Coreen + Send command to pfennig Core + Lähetä komento pfennig Coreen Send trace/debug info to console instead of debug.log file @@ -3182,8 +3182,8 @@ esimerkiksi: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Määritä yhteyden aikakataisu millisekunneissa (vakioasetus: 5000) - Start Pfennig Core Daemon - Käynnistä Pfennig Core taustapalvelin + Start pfennig Core Daemon + Käynnistä pfennig Core taustapalvelin System error: @@ -3298,12 +3298,12 @@ esimerkiksi: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Virhe ladattaessa wallet.dat-tiedostoa: Lompakko vioittunut - Error loading wallet.dat: Wallet requires newer version of Pfennig - Virhe ladattaessa wallet.dat-tiedostoa: Tarvitset uudemman version Pfennigista + Error loading wallet.dat: Wallet requires newer version of pfennig + Virhe ladattaessa wallet.dat-tiedostoa: Tarvitset uudemman version pfennigista - Wallet needed to be rewritten: restart Pfennig to complete - Lompakko tarvitsee uudelleenkirjoittaa: käynnistä Pfennig uudelleen + Wallet needed to be rewritten: restart pfennig to complete + Lompakko tarvitsee uudelleenkirjoittaa: käynnistä pfennig uudelleen Error loading wallet.dat diff --git a/src/qt/locale/bitmark_fi.ts~ b/src/qt/locale/bitmark_fi.ts~ new file mode 100644 index 0000000..c6acb40 --- /dev/null +++ b/src/qt/locale/bitmark_fi.ts~ @@ -0,0 +1,3389 @@ + + + AboutDialog + + About GameCredits Core + Tietoja GameCredits Core + + + <b>GameCredits Core</b> version + <b>GameCredits Core</b> versio + + + +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. + +Tämä on kokeellinen ohjelmisto. + +Levitetään MIT/X11 ohjelmistolisenssin alaisuudessa. Tarkemmat tiedot löytyvät tiedostosta COPYING tai osoitteesta http://www.opensource.org/licenses/mit-license.php. + +Tämä ohjelma sisältää OpenSSL projektin OpenSSL työkalupakin (http://www.openssl.org/), Eric Youngin (eay@cryptsoft.com) kehittämän salausohjelmiston sekä Thomas Bernardin UPnP ohjelmiston. + + + + Copyright + Tekijänoikeus + + + The Bitcoin Core Developers + GameCredits Core kehittäjät + + + (%1-bit) + (%1-bit) + + + + AddressBookPage + + 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 + + + &Copy + &Kopioi + + + C&lose + &Sulje + + + &Copy Address + &Kopioi Osoite + + + 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... + + + &Delete + &Poista + + + 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Nämä ovat sinun GameCredits osoitteita maksujen lähetykseen. Tarkista aina rahan määrä ja vastaanottajan osoite ennenkuin lähetät kolikkoja. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Nämä ovat sinun GameCredits-osoitteesi suoritusten vastaanottamiseen. Suositellaan että annat uuden osoitteen kullekin rahansiirrolle + + + Copy &Label + Kopioi &Nimi + + + &Edit + &Muokkaa + + + Export Address List + Vie osoitekirja + + + Comma separated file (*.csv) + Comma separated file (*.csv) + + + Exporting Failed + Vienti epäonnistui + + + 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ä) + + + + AskPassphraseDialog + + Passphrase Dialog + Tunnuslauseen Dialogi + + + Enter passphrase + Kirjoita tunnuslause + + + New passphrase + Uusi tunnuslause + + + Repeat new passphrase + 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 GameCreditsS</b>! + Varoitus: Jos salaat lompakkosi ja menetät tunnuslauseesi, <b>MENETÄT KAIKKI GameCreditsISI</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits 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. + + + + GameCreditsGUI + + 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 + + + E&xit + L&opeta + + + Quit application + Sulje ohjelma + + + Show information about GameCredits + Näytä tietoa GameCredits-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 GameCredits address + Lähetä kolikoita GameCredits-osoitteeseen + + + Modify configuration options for GameCredits + Muuta GameCreditsin 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... + + + GameCredits + GameCredits + + + Wallet + Lompakko + + + &Send + &Lähetä + + + &Receive + &Vastaanota + + + &Show / Hide + &Näytä / Piilota + + + Show or hide the main Window + Näytä tai piilota GameCredits-ikkuna + + + Encrypt the private keys that belong to your wallet + Suojaa yksityiset avaimet, jotka kuuluvat lompakkoosi + + + Sign messages with your GameCredits addresses to prove you own them + Allekirjoita viestisi omalla GameCredits -osoitteellasi todistaaksesi, että omistat ne + + + Verify messages to ensure they were signed with specified GameCredits addresses + Varmista, että viestisi on allekirjoitettu määritetyllä GameCredits -osoitteella + + + &File + &Tiedosto + + + &Settings + &Asetukset + + + &Help + &Apua + + + Tabs toolbar + Välilehtipalkki + + + [testnet] + [testnet] + + + GameCredits Core + GameCredits-ydin + + + Request payments (generates QR codes and gamecredits: URIs) + Pyydä maksuja (Luo QR koodit ja gamecredits: URIt) + + + &About GameCredits Core + &Tietoja GameCredits 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 gamecredits: URI or payment request + Avaa gamecredits: URI tai maksupyyntö + + + &Command-line options + &Komentorivin valinnat + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Näytä GameCredits Core ohjeet saadaksesi listan mahdollisista GameCreditsin komentorivivalinnoista + + + GameCredits client + GameCredits-asiakas + + + %n active connection(s) to GameCredits network + %n aktiivinen yhteys GameCredits-verkkoon%n aktiivista yhteyttä GameCredits-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 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 + + + Up to date + Rahansiirtohistoria on ajan tasalla + + + Catching up... + Saavutetaan verkkoa... + + + Sent transaction + Lähetetyt rahansiirrot + + + Incoming transaction + Saapuva rahansiirto + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Päivä: %1 +Määrä: %2 +Tyyppi: %3 +Osoite: %4 + + + 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. GameCredits can no longer continue safely and will quit. + Peruuttamaton virhe on tapahtunut. GameCredits ei voi enää jatkaa turvallisesti ja sammutetaan. + + + + 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 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 + + + 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 GameCredits address. + Antamasi osoite "%1" ei ole validi GameCredits-osoite. + + + Could not unlock wallet. + Lompakkoa ei voitu avata. + + + New key generation failed. + Uuden avaimen luonti epäonnistui. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + GameCredits Core - Kometorivivalinnat + + + GameCredits Core + GameCredits-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 GameCredits Core. + Tervetuloa GameCredits Core + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Tämän on ensimmäinen kerta kun GameCredits Core on käynnistetty joten voit valita data-hakemiston paikan. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits Core lataa ja tallentaa kopion GameCreditsin 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: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Käynnistä GameCredits kirjautumisen yhteydessä. + + + &Start GameCredits on system login + &Käynnistä GameCredits 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 GameCredits network through a SOCKS proxy. + Yhdistä GameCredits-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 + + + (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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Avaa GameCredits-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ä + + + Proxy &IP: + Proxyn &IP: + + + &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ää GameCredits-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 GameCredits. + Tässä voit määritellä käyttöliittymän kielen. Muutokset astuvat voimaan seuraavan kerran, kun GameCredits käynnistetään. + + + &Unit to show amounts in: + Yksikkö jona gamecredits-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 gamecredits-määrien näyttämiseen. + + + Whether to show GameCredits addresses in the transaction list or not. + Näytetäänkö GameCredits-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 + + + default + oletus + + + none + ei mitään + + + Confirm options reset + Varmista asetusten palautus + + + Client restart required to activate changes. + Ohjelman uudelleenkäynnistys aktivoi muutokset. + + + Client will be shutdown, do you want to proceed? + Ohjelma lopetetaan. Haluatko jatkaa? + + + This change would require a client restart. + Tämä muutos vaatii ohjelman uudelleenkäynnistyksen. + + + The supplied proxy address is invalid. + Antamasi proxy-osoite on virheellinen. + + + + OverviewPage + + Form + Lomake + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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 GameCredits-verkon kanssa automaattisesti yhteyden muodostamisen jälkeen, mutta synkronointi on vielä meneillään. + + + 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 GameCreditsien määrä + + + <b>Recent transactions</b> + <b>Viimeisimmät rahansiirrot</b> + + + out of sync + Ei ajan tasalla + + + + PaymentServer + + URI handling + URI käsittely + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + URIa ei voitu jäsentää! Tämä voi johtua kelvottomasta GameCredits-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 gamecredits: click-to-pay handler + Ei voida käynnistää gamecredits: 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 + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Virhe: Annettu data-hakemisto "%1" ei ole olemassa. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Virhe: Ei voida jäsentää asetustiedostoa: %1. Käytä vain avain=arvo syntaksia. + + + Error: Invalid combination of -regtest and -testnet. + Virhe: Virheellinen yhdistelmä -regtest ja -testnet. + + + GameCredits Core didn't yet exit safely... + GameCredits Core ei ole vielä sulkeutunut turvallisesti... + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Anna GameCredits-osoite (esim. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + &Tallenna kuva + + + &Copy Image + &Kopioi kuva + + + Save QR Code + Tallenna QR-koodi + + + 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ä + + + 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 + + + &Console + &Konsoli + + + &Network Traffic + &Verkkoliikenne + + + &Clear + &Tyhjennä + + + Totals + Yhteensä + + + In: + Sisään: + + + Out: + Ulos: + + + Build date + Kääntöpäiväys + + + Debug log file + Debug lokitiedosto + + + Open the GameCredits 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 GameCredits RPC console. + Tervetuloa GameCredits 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 GameCredits network. + Valinnainen viesti liitetään maksupyyntöön ja näytetään avattaessa. Viestiä ei lähetetä GameCredits-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ä GameCreditseja + + + 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ä usealla vastaanottajalle samanaikaisesti + + + Add &Recipient + Lisää &Vastaanottaja + + + Clear all fields of the form. + Tyhjennä lomakkeen kaikki kentät + + + Clear &All + &Tyhjennnä Kaikki + + + Balance: + Balanssi: + + + Confirm the send action + Vahvista lähetys + + + S&end + &Lähetä + + + Confirm send coins + Hyväksy GameCreditsien lähettäminen + + + %1 to %2 + %1 to %2 + + + 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 GameCreditsia. + + + 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. + + + Transaction creation failed! + Rahansiirron luonti epäonnistui! + + + 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 GameCredits address + Varoitus: Virheellinen GameCredits 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 + + A&mount: + M&äärä: + + + Pay &To: + Maksun saaja: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Osoite, johon GameCreditsit lähetetään (esim. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + Poista tämä alkio + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + Viesti joka liitettiin gamecredits: URI:iin tallennetaan rahansiirtoon viitteeksi. Tätä viestiä ei lähetetä GameCredits-verkkoon. + + + This is an unverified payment request. + Tämä on varmistamaton maksupyyntö + + + Pay To: + Saaja: + + + Memo: + Muistio: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Osoite, jolla viesti allekirjoitetaan (esimerkiksi bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Allekirjoita viesti todistaaksesi, että omistat tämän GameCredits-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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Osoite, jolla viesti allekirjoitettiin (esimerkiksi bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Tarkista viestin allekirjoitus varmistaaksesi, että se allekirjoitettiin tietyllä GameCredits-osoitteella + + + Verify &Message + Varmista &viesti... + + + Reset all verify message fields + Tyhjennä kaikki varmista-viesti-kentät + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Anna GameCredits-osoite (esim. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Klikkaa "Allekirjoita Viesti luodaksesi allekirjoituksen + + + 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. + + + + SplashScreen + + GameCredits Core + GameCredits-ydin + + + The Bitcoin Core Developers + GameCredits 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 + + + 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 + + + + TransactionDescDialog + + Transaction details + Rahansiirron yksityiskohdat + + + This pane shows a detailed description of the transaction + Tämä ruutu näyttää yksityiskohtaisen tiedon rahansiirrosta + + + + 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 + + + Confirmed (%1 confirmations) + Vahvistettu (%1 vahvistusta) + + + 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 GameCredits-osoite + + + Amount removed from or added to balance. + Saldoon lisätty tai siitä vähennetty määrä. + + + + 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 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 + + + Range: + Alue: + + + to + kenelle + + + + WalletFrame + + No wallet has been loaded. + Lomakkoa ei ole ladattu. + + + + WalletModel + + Send Coins + Lähetä GameCreditseja + + + + 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 %1. + Lompakon tallennuksessa tapahtui virhe %1. + + + The wallet data was successfully saved to %1. + Lompakko tallennettiin onnistuneesti tiedostoon %1. + + + Backup Successful + Varmuuskopio Onnistui + + + + gamecredits-core + + Usage: + Käyttö: + + + List commands + Lista komennoista + + + Get help for a command + Hanki apua käskyyn + + + Options: + Asetukset: + + + Specify configuration file (default: gamecredits.conf) + Määritä asetustiedosto (oletus: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Määritä pid-tiedosto (oletus: gamecredits.pid) + + + Specify data directory + Määritä data-hakemisto + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Kuuntele yhteyksiä portista <port> (oletus: 40002 tai testnet: 50001) + + + 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: 40001 or testnet: 50000) + Kuuntele JSON-RPC -yhteyksiä portista <port> (oletus: 40001 or testnet: 50000) + + + Accept command line and JSON-RPC commands + Hyväksy merkkipohjaiset- ja JSON-RPC-käskyt + + + GameCredits Core RPC client version + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, sinun tulee asettaa rpcpassword asetustietostossa: +%s +Suositellaan että käytät allaolevaa satunnaista salasanaa: +rpcuser=gamecreditsrpc +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 "GameCredits 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. + + + 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 wallet transaction changes (%s in cmd is replaced by TxID) + Suorita käsky kun lompakossa rahansiirto muuttuu (%s cmd on vaihdettu TxID kanssa) + + + 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. GameCredits Core is probably already running. + Ei voida yhdistää %s tässä tietokoneessa. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Varoitus: Tarkista että tietokoneesi kellonaika ja päivämäärä ovat paikkansapitäviä! GameCredits 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 + + + GameCredits Core Daemon + GameCredits 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 + + + Connect through SOCKS proxy + Yhdistä SOCKS proxin kautta + + + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Yhdistä JSON-RPC portissa <port> (oletus: 40001 tai testnet: 50000) + + + 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) + + + 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 gamecredits-cli): + Käyttö (vanhentunut, käytä gamecredits-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 + + + Cannot obtain a lock on data directory %s. GameCredits Core is probably already running. + Ei voida lukita data-hakemistoa %s. GameCredits 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 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) + + + Print block on startup, if found in block index + Tulosta lohko käynnistyksessä jos löydetään lohkoindeksistä + + + Print block tree on startup (default: 0) + Tulosta lohkopuu käynnistyksessä (oletus: 0) + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + RPC SSL valinnat: (katso GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL asetukset (katso GameCredits Wikistä tarkemmat SSL ohjeet) + + + Send command to GameCredits Core + Lähetä komento GameCredits Coreen + + + Send trace/debug info to console instead of debug.log file + Lähetä jäljitys/debug-tieto konsoliin, debug.log-tiedoston sijaan + + + 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 GameCredits Core Daemon + Käynnistä GameCredits 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) + + + 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! + + + 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) + + + 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) + + + 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 GameCredits + Virhe ladattaessa wallet.dat-tiedostoa: Tarvitset uudemman version GameCreditsista + + + Wallet needed to be rewritten: restart GameCredits to complete + Lompakko tarvitsee uudelleenkirjoittaa: käynnistä GameCredits 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 + + + 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. + Sinun täytyy asettaa rpcpassword=<password> asetustiedostoon: +%s +Jos tiedostoa ei ole, niin luo se ainoastaan omistajan kirjoitusoikeuksin. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_fr.ts b/src/qt/locale/bitmark_fr.ts index e4e093c..a904db9 100644 --- a/src/qt/locale/bitmark_fr.ts +++ b/src/qt/locale/bitmark_fr.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - À propos de Pfennig Core + About pfennig Core + À propos de pfennig Core - <b>Pfennig Core</b> version - Version de <b>Pfennig Core</b> + <b>pfennig Core</b> version + Version de <b>pfennig Core</b> @@ -29,7 +29,7 @@ This product includes software developed by the OpenSSL Project for use in the O The Bitcoin Core Developers - Les développeurs Pfennig Core + Les développeurs pfennig Core (%1-bit) @@ -103,12 +103,12 @@ This product includes software developed by the OpenSSL Project for use in the O Adresses de réception - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Voici vos adresses Pfennig pour envoyer des paiements. Vérifiez toujours le montant et l'adresse du destinataire avant d'envoyer des pièces. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Voici vos adresses pfennig pour envoyer des paiements. Vérifiez toujours le montant et l'adresse du destinataire avant d'envoyer des pièces. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Voici vos adresses Pfennig pour recevoir des paiements. Il est recommandé d'utiliser une nouvelle adresse de réception pour chaque transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Voici vos adresses pfennig pour recevoir des paiements. Il est recommandé d'utiliser une nouvelle adresse de réception pour chaque transaction. Copy &Label @@ -205,8 +205,8 @@ This product includes software developed by the OpenSSL Project for use in the O Confirmer le chiffrement du portefeuille - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Attention : Si vous chiffrez votre portefeuille et perdez votre phrase de passe, vous <b>PERDREZ TOUS VOS PfennigS</b> ! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Attention : Si vous chiffrez votre portefeuille et perdez votre phrase de passe, vous <b>PERDREZ TOUS VOS pfennigS</b> ! Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ This product includes software developed by the OpenSSL Project for use in the O Portefeuille chiffré - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig 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. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig 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 @@ -258,7 +258,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... &Signer le message... @@ -296,8 +296,8 @@ This product includes software developed by the OpenSSL Project for use in the O Quitter l’application - Show information about Pfennig - Afficher des informations à propos de Pfennig + Show information about pfennig + Afficher des informations à propos de pfennig About &Qt @@ -344,12 +344,12 @@ This product includes software developed by the OpenSSL Project for use in the O Réindexation des blocs sur le disque... - Send coins to a Pfennig address - Envoyer des pièces à une adresse Pfennig + Send coins to a pfennig address + Envoyer des pièces à une adresse pfennig - Modify configuration options for Pfennig - Modifier les options de configuration de Pfennig + Modify configuration options for pfennig + Modifier les options de configuration de pfennig Backup wallet to another location @@ -372,8 +372,8 @@ This product includes software developed by the OpenSSL Project for use in the O &Vérifier un message... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ This product includes software developed by the OpenSSL Project for use in the O Chiffrer les clefs privées de votre portefeuille - Sign messages with your Pfennig addresses to prove you own them - Signer les messages avec vos adresses Pfennig pour prouver que vous les détenez + Sign messages with your pfennig addresses to prove you own them + Signer les messages avec vos adresses pfennig pour prouver que vous les détenez - Verify messages to ensure they were signed with specified Pfennig addresses - Vérifier les messages pour vous assurer qu'ils ont été signés avec les adresses Pfennig spécifiées + Verify messages to ensure they were signed with specified pfennig addresses + Vérifier les messages pour vous assurer qu'ils ont été signés avec les adresses pfennig spécifiées &File @@ -428,16 +428,16 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core Request payments (generates QR codes and pfennig: URIs) Demander des paiements (génère des codes QR et des URIs pfennig:) - &About Pfennig Core - À &propos de Pfennig Core + &About pfennig Core + À &propos de pfennig Core Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ This product includes software developed by the OpenSSL Project for use in the O Options de ligne de &commande - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Afficher le message d'aide de Pfennig Core pour obtenir une liste des options de ligne de commande Pfennig possibles. + Show the pfennig Core help message to get a list with possible pfennig command-line options + Afficher le message d'aide de pfennig Core pour obtenir une liste des options de ligne de commande pfennig possibles. - Pfennig client - Client Pfennig + pfennig client + Client pfennig - %n active connection(s) to Pfennig network - %n connexion active avec le réseau Pfennig%n connexions actives avec le réseau Pfennig + %n active connection(s) to pfennig network + %n connexion active avec le réseau pfennig%n connexions actives avec le réseau pfennig No block source available... @@ -560,8 +560,8 @@ Adresse : %4 Le portefeuille est <b>chiffré</b> et actuellement <b>verrouillé</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Une erreur fatale est survenue. Pfennig ne peut plus continuer de façon sûre et va s'arrêter. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Une erreur fatale est survenue. pfennig ne peut plus continuer de façon sûre et va s'arrêter. @@ -845,8 +845,8 @@ Adresse : %4 L’adresse fournie « %1 » est déjà présente dans le carnet d'adresses. - The entered address "%1" is not a valid Pfennig address. - L'adresse fournie « %1 » n'est pas une adresse Pfennig valide. + The entered address "%1" is not a valid pfennig address. + L'adresse fournie « %1 » n'est pas une adresse pfennig valide. Could not unlock wallet. @@ -883,12 +883,12 @@ Adresse : %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core - Options de ligne de commande + pfennig Core - Command-line options + pfennig Core - Options de ligne de commande - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core version @@ -934,16 +934,16 @@ Adresse : %4 Bienvenue - Welcome to Pfennig Core. - Bienvenue à Pfennig Core. + Welcome to pfennig Core. + Bienvenue à pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Comme c'est la première fois que le logiciel est lancé, vous pouvez choisir où Pfennig Core stockera ses données. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Comme c'est la première fois que le logiciel est lancé, vous pouvez choisir où pfennig Core stockera ses données. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig Core va télécharger et stocker une copie de la chaîne de blocs Pfennig. 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. + pfennig Core will download and store a copy of the pfennig 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. + pfennig Core va télécharger et stocker une copie de la chaîne de blocs pfennig. 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 @@ -954,8 +954,8 @@ Adresse : %4 Utiliser un répertoire de données personnalisé : - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,12 +1016,12 @@ Adresse : %4 Payer des &frais de transaction - Automatically start Pfennig after logging in to the system. - Démarrer Pfennig automatiquement après avoir ouvert une session sur l'ordinateur. + Automatically start pfennig after logging in to the system. + Démarrer pfennig automatiquement après avoir ouvert une session sur l'ordinateur. - &Start Pfennig on system login - &Démarrer Pfennig lors de l'ouverture d'une session + &Start pfennig on system login + &Démarrer pfennig lors de l'ouverture d'une session Size of &database cache @@ -1036,8 +1036,8 @@ Adresse : %4 Nombre d'exétrons de &vérification de script - Connect to the Pfennig network through a SOCKS proxy. - Se connecter au réseau Pfennig par un mandataire SOCKS. + Connect to the pfennig network through a SOCKS proxy. + Se connecter au réseau pfennig par un mandataire SOCKS. &Connect through SOCKS proxy (default proxy): @@ -1096,8 +1096,8 @@ Adresse : %4 &Dépenser la monnaie non confirmée - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Ouvrir le port du client Pfennig automatiquement sur le routeur. Ceci ne fonctionne que si votre routeur supporte l'UPnP et si la fonctionnalité est activée. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Ouvrir le port du client pfennig 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 @@ -1152,8 +1152,8 @@ Adresse : %4 &Langue de l'interface utilisateur : - The user interface language can be set here. This setting will take effect after restarting Pfennig. - La langue de l'interface utilisateur peut être définie ici. Ce réglage sera pris en compte après redémarrage de Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + La langue de l'interface utilisateur peut être définie ici. Ce réglage sera pris en compte après redémarrage de pfennig. &Unit to show amounts in: @@ -1164,8 +1164,8 @@ Adresse : %4 Choisissez la sous-unité par défaut pour l'affichage dans l'interface et lors de l'envoi de pièces. - Whether to show Pfennig addresses in the transaction list or not. - Détermine si les adresses Pfennig seront affichées sur la liste des transactions. + Whether to show pfennig addresses in the transaction list or not. + Détermine si les adresses pfennig seront affichées sur la liste des transactions. &Display addresses in transaction list @@ -1219,8 +1219,8 @@ Adresse : %4 Formulaire - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig network after a connection is established, but this process has not completed yet. - Les informations affichées peuvent être obsolètes. Votre portefeuille est automatiquement synchronisé avec le réseau Pfennig lorsque la connexion s'établit, or ce processus n'est pas encore terminé. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig network after a connection is established, but this process has not completed yet. + Les informations affichées peuvent être obsolètes. Votre portefeuille est automatiquement synchronisé avec le réseau pfennig lorsque la connexion s'établit, or ce processus n'est pas encore terminé. Wallet @@ -1274,8 +1274,8 @@ Adresse : %4 Gestion des URIs - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - L'URI ne peut être analysé ! Ceci peut être causé par une adresse Pfennig invalide ou par des paramètres d'URI mal composé. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + L'URI ne peut être analysé ! Ceci peut être causé par une adresse pfennig invalide ou par des paramètres d'URI mal composé. Requested payment amount of %1 is too small (considered dust). @@ -1341,8 +1341,8 @@ Adresse : %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,12 +1357,12 @@ Adresse : %4 Erreur : combinaison invalide de -regtest et de -testnet. - Pfennig Core didn't yet exit safely... - Pfennig Core ne s'est pas encore arrêté en toute sécurité... + pfennig Core didn't yet exit safely... + pfennig Core ne s'est pas encore arrêté en toute sécurité... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Saisir une adresse Pfennig (par ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Saisir une adresse pfennig (par ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,16 +1483,16 @@ Adresse : %4 Journal de débogage - Open the Pfennig 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 Pfennig depuis le répertoire de données actuel. Ceci peut prendre quelques secondes pour les journaux de grande taille. + Open the pfennig 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 pfennig 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 Pfennig RPC console. - Bienvenue sur la console RPC de Pfennig. + Welcome to the pfennig RPC console. + Bienvenue sur la console RPC de pfennig. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1554,8 +1554,8 @@ Adresse : %4 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 Pfennig 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 Pfennig. + 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 pfennig 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 pfennig. An optional label to associate with the new receiving address. @@ -1867,8 +1867,8 @@ Adresse : %4 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 Pfennig address - Attention : adresse Pfennig invalide + Warning: Invalid pfennig address + Attention : adresse pfennig invalide (no label) @@ -1954,8 +1954,8 @@ Adresse : %4 Saisir une étiquette pour cette adresse afin de l'ajouter à la liste d'adresses utilisées - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. - Un message qui était joint à l'URI Pfennig et qui sera stocké avec la transaction pour référence. Note : ce message ne sera pas envoyé par le réseau Pfennig. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. + Un message qui était joint à l'URI pfennig et qui sera stocké avec la transaction pour référence. Note : ce message ne sera pas envoyé par le réseau pfennig. This is an unverified payment request. @@ -1973,8 +1973,8 @@ Adresse : %4 ShutdownWindow - Pfennig Core is shutting down... - Arrêt de Pfennig Core... + pfennig Core is shutting down... + Arrêt de pfennig Core... Do not shut down the computer until this window disappears. @@ -2028,8 +2028,8 @@ Adresse : %4 Copier la signature actuelle dans le presse-papier - Sign the message to prove you own this Pfennig address - Signer le message pour prouver que vous détenez cette adresse Pfennig + Sign the message to prove you own this pfennig address + Signer le message pour prouver que vous détenez cette adresse pfennig Sign &Message @@ -2056,8 +2056,8 @@ Adresse : %4 L'adresse avec laquelle le message a été signé (par ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Vérifier le message pour vous assurer qu'il a bien été signé par l'adresse Pfennig spécifiée + Verify the message to ensure it was signed with the specified pfennig address + Vérifier le message pour vous assurer qu'il a bien été signé par l'adresse pfennig spécifiée Verify &Message @@ -2068,8 +2068,8 @@ Adresse : %4 Réinitialiser tous les champs de vérification de message - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Saisir une adresse Pfennig (par ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Saisir une adresse pfennig (par ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2127,12 +2127,12 @@ Adresse : %4 SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core The Bitcoin Core Developers - Les développeurs Pfennig Core + Les développeurs pfennig Core [testnet] @@ -2622,8 +2622,8 @@ Adresse : %4 Spécifier le répertoire de données - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Écouter les connexions sur le <port> (par défaut : P2PPORT ou testnet : 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Écouter les connexions sur le <port> (par défaut : 40002 ou testnet : 50001) Maintain at most <n> connections to peers (default: 125) @@ -2650,16 +2650,16 @@ Adresse : %4 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: RPCPORT or testnet: 1RPCPORT) - Écouter les connexions JSON-RPC sur le <port> (par défaut : RPCPORT ou tesnet : 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Écouter les connexions JSON-RPC sur le <port> (par défaut : 40001 ou tesnet : 50000) Accept command line and JSON-RPC commands Accepter les commandes de JSON-RPC et de la ligne de commande - Pfennig Core RPC client version - Version du client RPC de Pfennig Core + pfennig Core RPC client version + Version du client RPC de pfennig Core Run in the background as a daemon and accept commands @@ -2683,7 +2683,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, vous devez définir un mot de passe rpc dans le fichier de configuration : %s @@ -2694,7 +2694,7 @@ 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 "Alerte Pfennig" admin@foo.com +par exemple : alertnotify=echo %%s | mail -s "Alerte pfennig" admin@foo.com @@ -2766,8 +2766,8 @@ par exemple : alertnotify=echo %%s | mail -s "Alerte Pfennig" admin@fo 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. Pfennig Core is probably already running. - Impossible de se lier à %s sur cet ordinateur. Pfennig Core fonctionne probablement déjà. + Unable to bind to %s on this computer. pfennig Core is probably already running. + Impossible de se lier à %s sur cet ordinateur. pfennig Core fonctionne probablement déjà. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2778,8 +2778,8 @@ par exemple : alertnotify=echo %%s | mail -s "Alerte Pfennig" admin@fo 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: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Attention : Veuillez vérifier que la date et l'heure de votre ordinateur sont justes ! Si votre horloge n'est pas à l'heure, Pfennig ne fonctionnera pas correctement. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Attention : Veuillez vérifier que la date et l'heure de votre ordinateur sont justes ! Si votre horloge n'est pas à l'heure, pfennig ne fonctionnera pas correctement. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2814,8 +2814,8 @@ par exemple : alertnotify=echo %%s | mail -s "Alerte Pfennig" admin@fo Tenter de récupérer les clefs privées d'un wallet.dat corrompu - Pfennig Core Daemon - Démon Pfennig Core + pfennig Core Daemon + Démon pfennig Core Block creation options: @@ -2834,8 +2834,8 @@ par exemple : alertnotify=echo %%s | mail -s "Alerte Pfennig" admin@fo Connexion à travers un serveur mandataire SOCKS - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Se connecter à JSON-RPC sur le <port> (par défaut : RPCPORT ou testnet : 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Se connecter à JSON-RPC sur le <port> (par défaut : 40001 ou testnet : 50000) Connection options: @@ -3058,8 +3058,8 @@ par exemple : alertnotify=echo %%s | mail -s "Alerte Pfennig" admin@fo Importe des blocs depuis un fichier blk000??.dat externe - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - Impossible d’obtenir un verrou sur le répertoire de données %s. Pfennig Core fonctionne probablement déjà. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + Impossible d’obtenir un verrou sur le répertoire de données %s. pfennig 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) @@ -3122,8 +3122,8 @@ par exemple : alertnotify=echo %%s | mail -s "Alerte Pfennig" admin@fo Imprimer l'arborescence des blocs au démarrage (par défaut : 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) - Options RPC SSL : (voir le wiki Pfennig pour les instructions de configuration de SSL) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) + Options RPC SSL : (voir le wiki pfennig pour les instructions de configuration de SSL) RPC server options: @@ -3142,12 +3142,12 @@ par exemple : alertnotify=echo %%s | mail -s "Alerte Pfennig" admin@fo Exécuter un exétron pour purger le portefeuille périodiquement (par défaut : 1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Options SSL : (voir le Wiki de Pfennig pour les instructions de configuration du SSL) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Options SSL : (voir le Wiki de pfennig pour les instructions de configuration du SSL) - Send command to Pfennig Core - Envoyer une commande à Pfennig Core + Send command to pfennig Core + Envoyer une commande à pfennig Core Send trace/debug info to console instead of debug.log file @@ -3182,8 +3182,8 @@ par exemple : alertnotify=echo %%s | mail -s "Alerte Pfennig" admin@fo Spécifier le délai d'expiration de la connexion en millisecondes (par défaut : 5 000) - Start Pfennig Core Daemon - Démarrer le démon Pfennig Core + Start pfennig Core Daemon + Démarrer le démon pfennig Core System error: @@ -3298,12 +3298,12 @@ par exemple : alertnotify=echo %%s | mail -s "Alerte Pfennig" admin@fo Erreur lors du chargement de wallet.dat : portefeuille corrompu - Error loading wallet.dat: Wallet requires newer version of Pfennig - Erreur lors du chargement de wallet.dat : le portefeuille exige une version plus récente de Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Erreur lors du chargement de wallet.dat : le portefeuille exige une version plus récente de pfennig - Wallet needed to be rewritten: restart Pfennig to complete - Le portefeuille devait être réécrit : redémarrer Pfennig pour terminer l'opération. + Wallet needed to be rewritten: restart pfennig to complete + Le portefeuille devait être réécrit : redémarrer pfennig pour terminer l'opération. Error loading wallet.dat diff --git a/src/qt/locale/bitmark_fr.ts~ b/src/qt/locale/bitmark_fr.ts~ new file mode 100644 index 0000000..39364a0 --- /dev/null +++ b/src/qt/locale/bitmark_fr.ts~ @@ -0,0 +1,3389 @@ + + + AboutDialog + + About GameCredits Core + À propos de GameCredits Core + + + <b>GameCredits Core</b> version + Version de <b>GameCredits 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. + + Ce logiciel est expérimental. + + Distribué sous licence logicielle MIT/X11, voir le fichier COPYING joint ou http://www.opensource.org/licenses/mit-license.php. + + 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 + Tous droits réservés + + + The Bitcoin Core Developers + Les développeurs GameCredits Core + + + (%1-bit) + (%1-bit) + + + + AddressBookPage + + Double-click to edit address or label + 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 courante sélectionnée dans le presse-papier + + + &Copy + &Copier + + + C&lose + &Fermer + + + &Copy Address + &Copier l'adresse + + + 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 + + + &Delete + &Supprimer + + + 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Voici vos adresses GameCredits pour envoyer des paiements. Vérifiez toujours le montant et l'adresse du destinataire avant d'envoyer des pièces. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Voici vos adresses GameCredits pour recevoir des paiements. Il est recommandé d'utiliser une nouvelle adresse de réception pour chaque transaction. + + + Copy &Label + Copier l'é&tiquette + + + &Edit + &Modifier + + + Export Address List + Exporter la liste d'adresses + + + Comma separated file (*.csv) + Valeurs séparées par des virgules (*.csv) + + + Exporting Failed + L'exportation a échoué + + + 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) + + + + AskPassphraseDialog + + Passphrase Dialog + Dialogue de phrase de passe + + + Enter passphrase + Saisir la phrase de passe + + + New passphrase + Nouvelle phrase de passe + + + Repeat new passphrase + 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>. + 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 portefeuille + + + This operation needs your wallet passphrase to unlock the wallet. + Cette opération nécessite votre phrase de passe pour déverrouiller le portefeuille. + + + Unlock wallet + 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échiffrer le portefeuille. + + + Decrypt wallet + Déchiffrer le portefeuille + + + Change passphrase + Changer la phrase de passe + + + Enter the old and new passphrase to the wallet. + Saisir l’ancienne phrase de passe pour le portefeuille ainsi que la nouvelle. + + + Confirm wallet encryption + Confirmer le chiffrement du portefeuille + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR GameCreditsS</b>! + Attention : Si vous chiffrez votre portefeuille et perdez votre phrase de passe, vous <b>PERDREZ TOUS VOS GameCreditsS</b> ! + + + Are you sure you wish to encrypt your wallet? + Ê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 : 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 + Portefeuille chiffré + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits 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 portefeuille a échoué + + + Wallet encryption failed due to an internal error. Your wallet was not encrypted. + 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 saisies ne correspondent pas. + + + Wallet unlock failed + Le déverrouillage du portefeuille a échoué + + + The passphrase entered for the wallet decryption was incorrect. + La phrase de passe saisie pour déchiffrer le portefeuille était incorrecte. + + + Wallet decryption failed + Le déchiffrage du portefeuille a échoué + + + Wallet passphrase was successfully changed. + La phrase de passe du portefeuille a été modifiée avec succès. + + + + GameCreditsGUI + + Sign &message... + &Signer le message... + + + Synchronizing with network... + Synchronisation avec le réseau en cours… + + + &Overview + &Vue d'ensemble + + + 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 + + + E&xit + Q&uitter + + + Quit application + Quitter l’application + + + Show information about GameCredits + Afficher des informations à propos de GameCredits + + + About &Qt + À propos de &Qt + + + Show information about Qt + Afficher des informations sur Qt + + + &Options... + &Options… + + + &Encrypt Wallet... + &Chiffrer le portefeuille... + + + &Backup Wallet... + Sauvegarder le &portefeuille... + + + &Change Passphrase... + &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 GameCredits address + Envoyer des pièces à une adresse GameCredits + + + Modify configuration options for GameCredits + Modifier les options de configuration de GameCredits + + + Backup wallet to another location + 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 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... + + + GameCredits + GameCredits + + + Wallet + Portefeuille + + + &Send + &Envoyer + + + &Receive + &Recevoir + + + &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 + Chiffrer les clefs privées de votre portefeuille + + + Sign messages with your GameCredits addresses to prove you own them + Signer les messages avec vos adresses GameCredits pour prouver que vous les détenez + + + Verify messages to ensure they were signed with specified GameCredits addresses + Vérifier les messages pour vous assurer qu'ils ont été signés avec les adresses GameCredits spécifiées + + + &File + &Fichier + + + &Settings + &Réglages + + + &Help + &Aide + + + Tabs toolbar + Barre d'outils des onglets + + + [testnet] + [testnet] + + + GameCredits Core + GameCredits Core + + + Request payments (generates QR codes and gamecredits: URIs) + Demander des paiements (génère des codes QR et des URIs gamecredits:) + + + &About GameCredits Core + À &propos de GameCredits 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 gamecredits: URI or payment request + Ouvrir un URI gamecredits: ou une demande de paiement + + + &Command-line options + Options de ligne de &commande + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Afficher le message d'aide de GameCredits Core pour obtenir une liste des options de ligne de commande GameCredits possibles. + + + GameCredits client + Client GameCredits + + + %n active connection(s) to GameCredits network + %n connexion active avec le réseau GameCredits%n connexions actives avec le réseau GameCredits + + + No block source available... + Aucune source de blocs disponible... + + + Processed %1 of %2 (estimated) blocks of transaction history. + À traité %1 blocs sur %2 (estimés) de l'historique des transactions. + + + Processed %1 blocks of transaction history. + À 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 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 ceci ne sont pas encore visibles. + + + Error + Erreur + + + Warning + Avertissement + + + Information + Information + + + Up to date + À jour + + + Catching up... + Rattrapage en cours… + + + Sent transaction + Transaction envoyée + + + Incoming transaction + Transaction entrante + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Date : %1 +Montant : %2 +Type : %3 +Adresse : %4 + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</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 portefeuille est <b>chiffré</b> et actuellement <b>verrouillé</b> + + + A fatal error occurred. GameCredits can no longer continue safely and will quit. + Une erreur fatale est survenue. GameCredits ne peut plus continuer de façon sûre et va s'arrêter. + + + + ClientModel + + Network Alert + Alerte réseau + + + + CoinControlDialog + + 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 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 + + + New receiving address + Nouvelle adresse de réception + + + New sending address + Nouvelle adresse d’envoi + + + Edit receiving address + Modifier l’adresse de réception + + + Edit sending address + 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 GameCredits address. + L'adresse fournie « %1 » n'est pas une adresse GameCredits valide. + + + Could not unlock wallet. + Impossible de déverrouiller le portefeuille. + + + New key generation failed. + Échec de génération de la nouvelle clef. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + GameCredits Core - Options de ligne de commande + + + GameCredits Core + GameCredits Core + + + version + version + + + Usage: + Utilisation : + + + command-line options + options de ligne de commande + + + UI options + Options de l'interface utilisateur + + + Set language, for example "de_DE" (default: system locale) + Définir la langue, par exemple « fr_CA » (par défaut : la langue du système) + + + Start minimized + 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 GameCredits Core. + Bienvenue à GameCredits Core. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Comme c'est la première fois que le logiciel est lancé, vous pouvez choisir où GameCredits Core stockera ses données. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits Core va télécharger et stocker une copie de la chaîne de blocs GameCredits. 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é : + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Démarrer GameCredits automatiquement après avoir ouvert une session sur l'ordinateur. + + + &Start GameCredits on system login + &Démarrer GameCredits 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 GameCredits network through a SOCKS proxy. + Se connecter au réseau GameCredits 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. + Réinitialiser toutes les options du client aux valeurs par défaut. + + + &Reset 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Ouvrir le port du client GameCredits 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 + Mapper le port avec l'&UPnP + + + Proxy &IP: + &IP du serveur mandataire : + + + &Port: + &Port : + + + Port of the proxy (e.g. 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 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 GameCredits. + La langue de l'interface utilisateur peut être définie ici. Ce réglage sera pris en compte après redémarrage de GameCredits. + + + &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 GameCredits addresses in the transaction list or not. + Détermine si les adresses GameCredits seront affichées sur la liste des transactions. + + + &Display addresses in transaction list + &Afficher les adresses sur la liste des transactions + + + Whether to show coin control features or not. + Afficher ou non les fonctions de contrôle des pièces. + + + &OK + &OK + + + &Cancel + A&nnuler + + + default + par défaut + + + none + aucune + + + Confirm options reset + Confirmer la réinitialisation des options + + + Client restart required to activate changes. + Le redémarrage du client est nécessaire pour activer les changements. + + + Client will be shutdown, do you want to proceed? + Le client sera arrêté, voulez-vous continuer? + + + This change would require a client restart. + Ce changement nécessite un redémarrage du client. + + + The supplied proxy address is invalid. + 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 GameCredits network after a connection is established, but this process has not completed yet. + Les informations affichées peuvent être obsolètes. Votre portefeuille est automatiquement synchronisé avec le réseau GameCredits lorsque la connexion s'établit, or ce processus n'est pas encore terminé. + + + Wallet + 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> + + + out of sync + désynchronisé + + + + PaymentServer + + URI handling + Gestion des URIs + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + L'URI ne peut être analysé ! Ceci peut être causé par une adresse GameCredits 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 gamecredits: click-to-pay handler + Impossible de démarrer le gestionnaire de cliquer-pour-payer gamecredits : + + + 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 + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Erreur : le répertoire de données spécifié « %1 » n'existe pas. + + + 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. + + + Error: Invalid combination of -regtest and -testnet. + Erreur : combinaison invalide de -regtest et de -testnet. + + + GameCredits Core didn't yet exit safely... + GameCredits Core ne s'est pas encore arrêté en toute sécurité... + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Saisir une adresse GameCredits (par ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + &Sauvegarder l'image... + + + &Copy Image + &Copier l'image + + + Save QR Code + Sauvegarder le code QR + + + PNG Image (*.png) + Image PNG (*.png) + + + + RPCConsole + + Client name + Nom du client + + + N/A + 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 + Heure de démarrage + + + Network + Réseau + + + Name + Nom + + + Number of connections + Nombre de connexions + + + 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 + + + &Console + &Console + + + &Network Traffic + Trafic &réseau + + + &Clear + &Nettoyer + + + Totals + Totaux + + + In: + Entrant : + + + Out: + Sortant : + + + Build date + Date de compilation + + + Debug log file + Journal de débogage + + + Open the GameCredits 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 GameCredits 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 GameCredits RPC console. + Bienvenue sur la console RPC de GameCredits. + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + 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. + 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 GameCredits 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 GameCredits. + + + 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 + + + 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 + + + Clear all fields of the form. + Effacer tous les champs du formulaire. + + + Clear &All + &Tout nettoyer + + + Balance: + Solde : + + + Confirm the send action + Confirmer l’action d'envoi + + + S&end + E&nvoyer + + + Confirm send coins + Confirmer l’envoi des pièces + + + %1 to %2 + %1 à %2 + + + 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. + 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 indentique trouvée, il n'est possible d'envoyer qu'une fois à chaque adresse par opération d'envoi. + + + Transaction creation failed! + La création de la transaction a échoué ! + + + 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 GameCredits address + Attention : adresse GameCredits 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 + + A&mount: + &Montant : + + + Pay &To: + &Payer à : + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + L'adresse à laquelle le paiement sera envoyé (par ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Enter a label for this address to add it to your address book + Saisir une étiquette pour cette adresse afin de l’ajouter à votre carnet d’adresses + + + &Label: + É&tiquette : + + + 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 l'adresse depuis le presse-papier + + + Alt+P + Alt+P + + + Remove this entry + Enlever cette entrée + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + Un message qui était joint à l'URI GameCredits et qui sera stocké avec la transaction pour référence. Note : ce message ne sera pas envoyé par le réseau GameCredits. + + + This is an unverified payment request. + Ceci est une demande de paiement non vérifiée. + + + Pay To: + Payer à : + + + Memo: + Mémo : + + + + ShutdownWindow + + GameCredits Core is shutting down... + Arrêt de GameCredits 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 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + L'adresse avec laquelle le message sera signé (par ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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-papier + + + Alt+P + Alt+P + + + Enter the message you want to sign here + 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-papier + + + Sign the message to prove you own this GameCredits address + Signer le message pour prouver que vous détenez cette adresse GameCredits + + + Sign &Message + Signer le &message + + + Reset all sign message fields + 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. + 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + L'adresse avec laquelle le message a été signé (par ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Vérifier le message pour vous assurer qu'il a bien été signé par l'adresse GameCredits spécifiée + + + Verify &Message + Vérifier le &message + + + Reset all verify message fields + Réinitialiser tous les champs de vérification de message + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Saisir une adresse GameCredits (par ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Cliquez sur « Signer le message » pour générer la signature + + + The entered address is invalid. + L'adresse saisie est invalide. + + + Please check the address and try again. + Veuillez vérifier l'adresse et réessayer. + + + The entered address does not refer to a key. + L'adresse saisie ne fait pas référence à une clef. + + + Wallet unlock was cancelled. + 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éessayer. + + + The signature did not match the message digest. + La signature ne correspond pas à l'empreinte du message. + + + Message verification failed. + Échec de la vérification du message. + + + Message verified. + Message vérifié. + + + + SplashScreen + + GameCredits Core + GameCredits Core + + + The Bitcoin Core Developers + Les développeurs GameCredits 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éré + + + From + De + + + To + À + + + own address + votre propre adresse + + + label + étiquette + + + Credit + Crédit + + + matures in %n more block(s) + arrive à maturité dans %n bloc de plusarrive à maturité dans %n blocs de plus + + + not accepted + refusé + + + Debit + Débit + + + Transaction fee + Frais de transaction + + + Net amount + Montant net + + + Message + Message + + + Comment + Commentaire + + + Transaction ID + ID de la transaction + + + 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 + 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 + + + + 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 + + + + 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 + + + Confirmed (%1 confirmations) + Confirmée (%1 confirmations) + + + 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 + Extrait + + + (n/a) + (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é ou enlevé au solde. + + + + TransactionView + + All + Toutes + + + Today + Aujourd’hui + + + This week + Cette semaine + + + This month + Ce mois-ci + + + Last month + Le mois dernier + + + This year + Cette année + + + Range... + Intervalle… + + + Received with + Reçue avec + + + Sent to + Envoyée à + + + To yourself + À vous-même + + + Mined + Extrait + + + Other + Autres + + + Enter address or label to search + Saisir une adresse ou une étiquette à rechercher + + + Min amount + 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 + Modifier l’étiquette + + + Show transaction details + Afficher les détails de la transaction + + + 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 + + + Range: + Intervalle : + + + to + à + + + + WalletFrame + + No wallet has been loaded. + Aucun portefeuille de chargé. + + + + WalletModel + + Send Coins + Envoyer des pièces + + + + 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 portefeuille + + + Wallet Data (*.dat) + Données de portefeuille (*.dat) + + + Backup Failed + Échec de la sauvegarde + + + 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 + + + + gamecredits-core + + Usage: + Utilisation : + + + List commands + Lister les commandes + + + Get help for a command + Obtenir de l’aide pour une commande + + + Options: + Options : + + + Specify configuration file (default: gamecredits.conf) + Spécifier le fichier de configuration (par défaut : gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Spécifier le fichier PID (par défaut : gamecreditsd.pid) + + + Specify data directory + Spécifier le répertoire de données + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Écouter les connexions sur le <port> (par défaut : 40002 ou testnet : 50001) + + + 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 du réglage du port RPC %u pour écouter sur IPv4 : %s + + + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Écouter les connexions JSON-RPC sur le <port> (par défaut : 40001 ou tesnet : 50000) + + + Accept command line and JSON-RPC commands + Accepter les commandes de JSON-RPC et de la ligne de commande + + + GameCredits Core RPC client version + Version du client RPC de GameCredits 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 aucun -proxy ou -connect ) + + + %s, you must set a rpcpassword in the configuration file: +%s +It is recommended you use the following random password: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, vous devez définir un mot de passe rpc dans le fichier de configuration : +%s +Il vous est conseillé d'utiliser le mot de passe aléatoire suivant : +rpcuser=gamecreditsrpc +rpcpassword=%s +(vous n'avez pas besoin de retenir ce mot de passe) +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 "Alerte GameCredits" admin@foo.com + + + + 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 + + + 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 ! 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 de l'utilisation de fonds reçus récemment ! + + + Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) + Exécuter la commande lorsqu'une transaction de portefeuille change (%s dans la commande est remplacée par TxID) + + + 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 - 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. GameCredits Core is probably already running. + Impossible de se lier à %s sur cet ordinateur. GameCredits 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 envoyez une transaction. + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Attention : Veuillez vérifier que la date et l'heure de votre ordinateur sont justes ! Si votre horloge n'est pas à l'heure, GameCredits 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 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.{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 + + + GameCredits Core Daemon + Démon GameCredits 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: 40001 or testnet: 50000) + Se connecter à JSON-RPC sur le <port> (par défaut : 40001 ou testnet : 50000) + + + Connection options: + Options de connexion : + + + Corrupted block database detected + 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 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 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 des blocs + + + Error: Disk space is low! + Erreur : l'espace disque est faible ! + + + Error: Wallet locked, unable to create 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 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é) + + + 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) + + + 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 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 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 gamecredits-cli): + Utilisation (obsolète, utiliser gamecredits-cli) : + + + Verifying blocks... + Vérification des blocs en cours... + + + Verifying wallet... + 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 + + + Cannot obtain a lock on data directory %s. GameCredits Core is probably already running. + Impossible d’obtenir un verrou sur le répertoire de données %s. GameCredits 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 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>*1 000 octets (par défaut : 5 000) + + + Maximum per-connection send buffer, <n>*1000 bytes (default: 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) + + + Print block on startup, if found in block index + Imprimer le bloc au démarrage s'il est trouvé dans l'index des blocs + + + Print block tree on startup (default: 0) + Imprimer l'arborescence des blocs au démarrage (par défaut : 0) + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + Options RPC SSL : (voir le wiki GameCredits 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 GameCredits Wiki for SSL setup instructions) + Options SSL : (voir le Wiki de GameCredits pour les instructions de configuration du SSL) + + + Send command to GameCredits Core + Envoyer une commande à GameCredits 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 + + + Set minimum block size in bytes (default: 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 : 5 000) + + + Start GameCredits Core Daemon + Démarrer le démon GameCredits Core + + + System error: + Erreur système : + + + Transaction amount too small + Montant de la transaction trop bas + + + Transaction amounts must be positive + 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) + + + 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 à niveau est nécessaire ! + + + 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 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 dans cmd est remplacé par le hachage du bloc) + + + Upgrade wallet to latest format + 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 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 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) + + + 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) + + + 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 : portefeuille corrompu + + + Error loading wallet.dat: Wallet requires newer version of GameCredits + Erreur lors du chargement de wallet.dat : le portefeuille exige une version plus récente de GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + Le portefeuille devait être réécrit : redémarrer GameCredits 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 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 + + + Loading wallet... + Chargement du portefeuille… + + + Cannot downgrade wallet + 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. + Vous devez ajouter la ligne rpcpassword=<mot-de-passe> au fichier de configuration : +%s +Si le fichier n'existe pas, créez-le avec les droits de lecture seule accordés au propriétaire. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_fr_CA.ts b/src/qt/locale/bitmark_fr_CA.ts index 243a33c..a3b0d95 100644 --- a/src/qt/locale/bitmark_fr_CA.ts +++ b/src/qt/locale/bitmark_fr_CA.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -103,11 +103,11 @@ Ce produit comprend des logiciels développés par le projet OpenSSL pour être - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -205,7 +205,7 @@ Ce produit comprend des logiciels développés par le projet OpenSSL pour être - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -225,7 +225,7 @@ Ce produit comprend des logiciels développés par le projet OpenSSL pour être - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -258,7 +258,7 @@ Ce produit comprend des logiciels développés par le projet OpenSSL pour être - PfennigGUI + pfennigGUI Sign &message... @@ -296,7 +296,7 @@ Ce produit comprend des logiciels développés par le projet OpenSSL pour être - Show information about Pfennig + Show information about pfennig @@ -344,11 +344,11 @@ Ce produit comprend des logiciels développés par le projet OpenSSL pour être - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -372,7 +372,7 @@ Ce produit comprend des logiciels développés par le projet OpenSSL pour être - Pfennig + pfennig @@ -400,11 +400,11 @@ Ce produit comprend des logiciels développés par le projet OpenSSL pour être - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -428,7 +428,7 @@ Ce produit comprend des logiciels développés par le projet OpenSSL pour être - Pfennig Core + pfennig Core @@ -436,7 +436,7 @@ Ce produit comprend des logiciels développés par le projet OpenSSL pour être - &About Pfennig Core + &About pfennig Core @@ -456,15 +456,15 @@ Ce produit comprend des logiciels développés par le projet OpenSSL pour être - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -556,7 +556,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -841,7 +841,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -879,11 +879,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -930,15 +930,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -950,7 +950,7 @@ Address: %4 - Pfennig + pfennig @@ -1012,11 +1012,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1032,7 +1032,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1092,7 +1092,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1148,7 +1148,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1160,7 +1160,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1215,7 +1215,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1270,7 +1270,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1337,7 +1337,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1353,11 +1353,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1479,7 +1479,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1487,7 +1487,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1550,7 +1550,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1863,7 +1863,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1950,7 +1950,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1969,7 +1969,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2024,7 +2024,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2052,7 +2052,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2064,7 +2064,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2123,7 +2123,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2618,7 +2618,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2646,7 +2646,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2654,7 +2654,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2679,7 +2679,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2752,7 +2752,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2764,7 +2764,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2800,7 +2800,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2820,7 +2820,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3044,7 +3044,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3108,7 +3108,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3128,11 +3128,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3168,7 +3168,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3284,11 +3284,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_fr_CA.ts~ b/src/qt/locale/bitmark_fr_CA.ts~ new file mode 100644 index 0000000..b32289a --- /dev/null +++ b/src/qt/locale/bitmark_fr_CA.ts~ @@ -0,0 +1,3373 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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. + +Ce logiciel est en phase expérimentale. + +Distribué sous licence MIT/X11, voir le fichier COPYING ou http://www.opensource.org/licenses/mit-license.php. + +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 Bitcoin Core Developers + + + + (%1-bit) + + + + + AddressBookPage + + 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 + + + &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 + &Supprimer + + + Choose the address to send coins to + + + + Choose the address to receive coins with + + + + C&hoose + + + + Sending addresses + + + + Receiving addresses + + + + These are your GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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) + Fichier séparé par une virgule (*.csv) + + + Exporting Failed + + + + 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 GameCreditsS</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 + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about GameCredits + + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 + 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 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 + + + + 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 GameCredits 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 + + A&mount: + + + + Pay &To: + + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + Addresse + + + 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) + Fichier séparé par une virgule (*.csv) + + + Confirmed + + + + Date + + + + Type + + + + Label + Record + + + Address + Addresse + + + 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_gl.ts b/src/qt/locale/bitmark_gl.ts index 354c9ec..3060402 100644 --- a/src/qt/locale/bitmark_gl.ts +++ b/src/qt/locale/bitmark_gl.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Sobre Pfennig core + About pfennig Core + Sobre pfennig core - <b>Pfennig Core</b> version - <b>Pfennig core</b> versión + <b>pfennig Core</b> version + <b>pfennig core</b> versión @@ -29,7 +29,7 @@ Este produto inclúe software desenvolvido polo OpenSSL Project para o uso no Op The Bitcoin Core Developers - Os desarrolladores de Pfennig Core + Os desarrolladores de pfennig Core (%1-bit) @@ -103,12 +103,12 @@ Este produto inclúe software desenvolvido polo OpenSSL Project para o uso no Op Direccións para recibir - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Estas son as túas direccións Pfennig para enviar pagos. Revisa sempre a cantidade e a dirección receptora antes de enviar moedas. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Estas son as túas direccións pfennig para enviar pagos. Revisa sempre a cantidade e a dirección receptora antes de enviar moedas. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Estas son as túas direccións Pfennig para recibir pagos. Recoméndase empregar unha nova dirección de recepción por cada transacción. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Estas son as túas direccións pfennig para recibir pagos. Recoméndase empregar unha nova dirección de recepción por cada transacción. Copy &Label @@ -205,8 +205,8 @@ Este produto inclúe software desenvolvido polo OpenSSL Project para o uso no Op Confirmar encriptación de moedeiro - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Precaución: Se encriptas o teu moedeiro e perdes o teu contrasinal, ti <b>PERDERÁS TÓDOLOS TEUS PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Precaución: Se encriptas o teu moedeiro e perdes o teu contrasinal, ti <b>PERDERÁS TÓDOLOS TEUS pfennigS</b>! Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ Este produto inclúe software desenvolvido polo OpenSSL Project para o uso no Op Moedeiro encriptado - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig se pechará agora para rematar o proceso de encriptación. Lembra que encriptar o teu moedeiro non protexe totalmente os teus pfennigs de ser robados por malware que infecte o teu ordenador. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig se pechará agora para rematar o proceso de encriptación. Lembra que encriptar o teu moedeiro non protexe totalmente os teus pfennigs de ser robados por malware que infecte o teu ordenador. Wallet encryption failed @@ -258,7 +258,7 @@ Este produto inclúe software desenvolvido polo OpenSSL Project para o uso no Op - PfennigGUI + pfennigGUI Sign &message... &Asinar mensaxe... @@ -296,8 +296,8 @@ Este produto inclúe software desenvolvido polo OpenSSL Project para o uso no Op Saír da aplicación - Show information about Pfennig - Amosar información sobre Pfennig + Show information about pfennig + Amosar información sobre pfennig About &Qt @@ -344,12 +344,12 @@ Este produto inclúe software desenvolvido polo OpenSSL Project para o uso no Op Reindexando bloques no disco... - Send coins to a Pfennig address - Enviar moedas a unha dirección Pfennig + Send coins to a pfennig address + Enviar moedas a unha dirección pfennig - Modify configuration options for Pfennig - Modificar opcións de configuración para Pfennig + Modify configuration options for pfennig + Modificar opcións de configuración para pfennig Backup wallet to another location @@ -372,8 +372,8 @@ Este produto inclúe software desenvolvido polo OpenSSL Project para o uso no Op &Verificar mensaxe... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ Este produto inclúe software desenvolvido polo OpenSSL Project para o uso no Op Encriptar as claves privadas que pertencen ao teu moedeiro - Sign messages with your Pfennig addresses to prove you own them - Asina mensaxes coas túas direccións Pfennig para probar que te pertencen + Sign messages with your pfennig addresses to prove you own them + Asina mensaxes coas túas direccións pfennig para probar que te pertencen - Verify messages to ensure they were signed with specified Pfennig addresses - Verificar mensaxes para asegurar que foron asinados con direccións Pfennig dadas. + Verify messages to ensure they were signed with specified pfennig addresses + Verificar mensaxes para asegurar que foron asinados con direccións pfennig dadas. &File @@ -428,16 +428,16 @@ Este produto inclúe software desenvolvido polo OpenSSL Project para o uso no Op [testnet] - Pfennig Core - Core de Pfennig + pfennig Core + Core de pfennig Request payments (generates QR codes and pfennig: URIs) Solicitar pagos (xenera códigos QR e pfennig: URIs) - &About Pfennig Core - &Sobre Pfennig Core + &About pfennig Core + &Sobre pfennig Core Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ Este produto inclúe software desenvolvido polo OpenSSL Project para o uso no Op - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Cliente Pfennig + pfennig client + Cliente pfennig - %n active connection(s) to Pfennig network - %n conexión activa coa rede Pfennig%n conexións activas coa rede Pfennig + %n active connection(s) to pfennig network + %n conexión activa coa rede pfennig%n conexións activas coa rede pfennig No block source available... @@ -560,8 +560,8 @@ Dirección: %4 O moedeiro está <b>encriptado</b> e actualmente <b>bloqueado</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Ocorriu un erro fatal. Pfennig non pode continuar en condicións de seguridade e pecharáse. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Ocorriu un erro fatal. pfennig non pode continuar en condicións de seguridade e pecharáse. @@ -845,8 +845,8 @@ Dirección: %4 A dirección introducida "%1" xa está no libro de direccións. - The entered address "%1" is not a valid Pfennig address. - A dirección introducida '%1' non é unha dirección Pfennig válida. + The entered address "%1" is not a valid pfennig address. + A dirección introducida '%1' non é unha dirección pfennig válida. Could not unlock wallet. @@ -883,12 +883,12 @@ Dirección: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Core de Pfennig + pfennig Core + Core de pfennig version @@ -934,15 +934,15 @@ Dirección: %4 Benvido - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -954,8 +954,8 @@ Dirección: %4 Empregar un directorio de datos personalizado - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,12 +1016,12 @@ Dirección: %4 Pagar &tarifa da transacción - Automatically start Pfennig after logging in to the system. - Comezar Pfennig automáticamente despois de loguearse no sistema. + Automatically start pfennig after logging in to the system. + Comezar pfennig automáticamente despois de loguearse no sistema. - &Start Pfennig on system login - &Comezar Pfennig ao facer login no sistema + &Start pfennig on system login + &Comezar pfennig ao facer login no sistema Size of &database cache @@ -1036,7 +1036,7 @@ Dirección: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1096,8 +1096,8 @@ Dirección: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Abrir automáticamente o porto do cliente Pfennig no router. Esto so funciona se o teu router soporta UPnP e está habilitado. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Abrir automáticamente o porto do cliente pfennig no router. Esto so funciona se o teu router soporta UPnP e está habilitado. Map port using &UPnP @@ -1152,8 +1152,8 @@ Dirección: %4 &Linguaxe de interface de usuario: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - A linguaxe de interface de usuario pode fixarse aquí. Esta configuración terá efecto tras reiniciar Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + A linguaxe de interface de usuario pode fixarse aquí. Esta configuración terá efecto tras reiniciar pfennig. &Unit to show amounts in: @@ -1164,8 +1164,8 @@ Dirección: %4 Escolle a unidade de subdivisión por defecto para amosar na interface e ao enviar moedas. - Whether to show Pfennig addresses in the transaction list or not. - Se se amosan ou non as direccións Pfennig na listaxe de transaccións. + Whether to show pfennig addresses in the transaction list or not. + Se se amosan ou non as direccións pfennig na listaxe de transaccións. &Display addresses in transaction list @@ -1219,8 +1219,8 @@ Dirección: %4 Formulario - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig despois de que se estableza unha conexión, pero este proceso non está todavía rematado. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig despois de que se estableza unha conexión, pero este proceso non está todavía rematado. Wallet @@ -1274,8 +1274,8 @@ Dirección: %4 Manexo de URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - Non se pode parsear a URI! Esto pode ser causado por unha dirección Pfennig inválida ou parámetros da URI malformados. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + Non se pode parsear a URI! Esto pode ser causado por unha dirección pfennig inválida ou parámetros da URI malformados. Requested payment amount of %1 is too small (considered dust). @@ -1341,8 +1341,8 @@ Dirección: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,12 +1357,12 @@ Dirección: %4 Erro: combinación inválida de -regtest e -testnet. - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introduce unha dirección Pfennig (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduce unha dirección pfennig (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,16 +1483,16 @@ Dirección: %4 Arquivo de log de depuración - Open the Pfennig 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 Pfennig dende o directorio actual de datos. Esto pode levar uns cantos segundos para grandes arquivos de log. + Open the pfennig 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 pfennig dende o directorio actual de datos. Esto pode levar uns cantos segundos para grandes arquivos de log. Clear console Limpar consola - Welcome to the Pfennig RPC console. - Benvido á consola RPC de Pfennig + Welcome to the pfennig RPC console. + Benvido á consola RPC de pfennig Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1554,7 +1554,7 @@ Dirección: %4 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 Pfennig network. + 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 pfennig network. @@ -1867,8 +1867,8 @@ Dirección: %4 - Warning: Invalid Pfennig address - Atención: Enderezo Pfennig non válido + Warning: Invalid pfennig address + Atención: Enderezo pfennig non válido (no label) @@ -1954,7 +1954,7 @@ Dirección: %4 Introduce unha etiqueta para esta dirección para engadila á listaxe de direccións empregadas - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1973,7 +1973,7 @@ Dirección: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2028,8 +2028,8 @@ Dirección: %4 Copiar a sinatura actual ao portapapeis do sistema - Sign the message to prove you own this Pfennig address - Asina a mensaxe para probar que posees esta dirección Pfennig + Sign the message to prove you own this pfennig address + Asina a mensaxe para probar que posees esta dirección pfennig Sign &Message @@ -2056,8 +2056,8 @@ Dirección: %4 A dirección coa que foi firmada a mensaxe (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Verificar a mensaxe para asegurar que foi asinada coa dirección Pfennig especificada + Verify the message to ensure it was signed with the specified pfennig address + Verificar a mensaxe para asegurar que foi asinada coa dirección pfennig especificada Verify &Message @@ -2068,8 +2068,8 @@ Dirección: %4 Restaurar todos os campos de verificación de mensaxe - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introduza unha dirección Pfennig (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduza unha dirección pfennig (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2127,12 +2127,12 @@ Dirección: %4 SplashScreen - Pfennig Core - Core de Pfennig + pfennig Core + Core de pfennig The Bitcoin Core Developers - Os desarrolladores de Pfennig Core + Os desarrolladores de pfennig Core [testnet] @@ -2622,8 +2622,8 @@ Dirección: %4 Especificar directorio de datos - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Escoitar conexións no <porto> (por defecto: P2PPORT ou testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Escoitar conexións no <porto> (por defecto: 40002 ou testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2650,15 +2650,15 @@ Dirección: %4 Ocorreu un erro mentres se establecía o porto RPC %u para escoitar sobre IPv4: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Escoitar conexións JSON-RPC no <porto> (por defecto: RPCPORT ou testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Escoitar conexións JSON-RPC no <porto> (por defecto: 40001 ou testnet: 50000) Accept command line and JSON-RPC commands Aceptar liña de comandos e comandos JSON-RPC - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2683,7 +2683,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, debes fixar unha rpcpassword no arquivo de configuración: %s @@ -2694,7 +2694,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +por exemplo: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2766,7 +2766,7 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 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. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2778,8 +2778,8 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 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 Pfennig 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 Pfennig non funcionará adecuadamente. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig 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 pfennig non funcionará adecuadamente. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2814,7 +2814,7 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Tentar recuperar claves privadas dende un wallet.dat corrupto - Pfennig Core Daemon + pfennig Core Daemon @@ -2834,8 +2834,8 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Conectar a JSON-RPC no <porto> (por defecto: RPCPORT ou testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Conectar a JSON-RPC no <porto> (por defecto: 40001 ou testnet: 50000) Connection options: @@ -3058,7 +3058,7 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Importa bloques dende arquivos blk000??.dat externos - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3122,7 +3122,7 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3142,11 +3142,11 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Opcións SSL: (ver ńa Wiki Pfennig as instrucción de configuración de SSL) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Opcións SSL: (ver ńa Wiki pfennig as instrucción de configuración de SSL) - Send command to Pfennig Core + Send command to pfennig Core @@ -3182,7 +3182,7 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Especificar tempo límite da conexión en milisegundos (por defecto: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3298,12 +3298,12 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Erro cargando wallet.dat: Moedeiro corrupto - Error loading wallet.dat: Wallet requires newer version of Pfennig - Erro cargando wallet.dat: O moedeiro precisa unha versión máis nova de Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Erro cargando wallet.dat: O moedeiro precisa unha versión máis nova de pfennig - Wallet needed to be rewritten: restart Pfennig to complete - Precísase rescribir o moedeiro: reinicie Pfennig para completar + Wallet needed to be rewritten: restart pfennig to complete + Precísase rescribir o moedeiro: reinicie pfennig para completar Error loading wallet.dat diff --git a/src/qt/locale/bitmark_gl.ts~ b/src/qt/locale/bitmark_gl.ts~ new file mode 100644 index 0000000..22d16f0 --- /dev/null +++ b/src/qt/locale/bitmark_gl.ts~ @@ -0,0 +1,3389 @@ + + + AboutDialog + + About GameCredits Core + Sobre GameCredits core + + + <b>GameCredits Core</b> version + <b>GameCredits 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 Bitcoin Core Developers + Os desarrolladores de GameCredits 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Estas son as túas direccións GameCredits para enviar pagos. Revisa sempre a cantidade e a dirección receptora antes de enviar moedas. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Estas son as túas direccións GameCredits 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 GameCreditsS</b>! + Precaución: Se encriptas o teu moedeiro e perdes o teu contrasinal, ti <b>PERDERÁS TÓDOLOS TEUS GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits se pechará agora para rematar o proceso de encriptación. Lembra que encriptar o teu moedeiro non protexe totalmente os teus gamecreditss 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. + + + + GameCreditsGUI + + 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 GameCredits + Amosar información sobre GameCredits + + + 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 GameCredits address + Enviar moedas a unha dirección GameCredits + + + Modify configuration options for GameCredits + Modificar opcións de configuración para GameCredits + + + 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... + + + GameCredits + GameCredits + + + 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 GameCredits addresses to prove you own them + Asina mensaxes coas túas direccións GameCredits para probar que te pertencen + + + Verify messages to ensure they were signed with specified GameCredits addresses + Verificar mensaxes para asegurar que foron asinados con direccións GameCredits dadas. + + + &File + &Arquivo + + + &Settings + Axus&tes + + + &Help + A&xuda + + + Tabs toolbar + Barra de ferramentas + + + [testnet] + [testnet] + + + GameCredits Core + Core de GameCredits + + + Request payments (generates QR codes and gamecredits: URIs) + Solicitar pagos (xenera códigos QR e gamecredits: URIs) + + + &About GameCredits Core + &Sobre GameCredits 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 gamecredits: URI or payment request + Abrir un gamecredits: URI ou solicitude de pago + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + Cliente GameCredits + + + %n active connection(s) to GameCredits network + %n conexión activa coa rede GameCredits%n conexións activas coa rede GameCredits + + + 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. GameCredits can no longer continue safely and will quit. + Ocorriu un erro fatal. GameCredits 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 GameCredits address. + A dirección introducida '%1' non é unha dirección GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + Core de GameCredits + + + 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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 + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Comezar GameCredits automáticamente despois de loguearse no sistema. + + + &Start GameCredits on system login + &Comezar GameCredits ao facer login no sistema + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Abrir automáticamente o porto do cliente GameCredits 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 GameCredits. + A linguaxe de interface de usuario pode fixarse aquí. Esta configuración terá efecto tras reiniciar GameCredits. + + + &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 GameCredits addresses in the transaction list or not. + Se se amosan ou non as direccións GameCredits 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 GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + Non se pode parsear a URI! Esto pode ser causado por unha dirección GameCredits 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 gamecredits: 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 + + GameCredits + GameCredits + + + 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. + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduce unha dirección GameCredits (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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 GameCredits dende o directorio actual de datos. Esto pode levar uns cantos segundos para grandes arquivos de log. + + + Clear console + Limpar consola + + + Welcome to the GameCredits RPC console. + Benvido á consola RPC de GameCredits + + + 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 GameCredits 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 GameCredits address + Atención: Enderezo GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + A dirección á que enviar o pago (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + Esta é unha solicitude de pago non verificada + + + Pay To: + Pagar A: + + + Memo: + Memo: + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + A dirección coa que asinar a mensaxe (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Asina a mensaxe para probar que posees esta dirección GameCredits + + + 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + A dirección coa que foi firmada a mensaxe (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Verificar a mensaxe para asegurar que foi asinada coa dirección GameCredits especificada + + + Verify &Message + Verificar &Mensaxe + + + Reset all verify message fields + Restaurar todos os campos de verificación de mensaxe + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduza unha dirección GameCredits (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + Core de GameCredits + + + The Bitcoin Core Developers + Os desarrolladores de GameCredits 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 + + + + gamecredits-core + + Usage: + Emprego: + + + List commands + Listar comandos + + + Get help for a command + Obter axuda para un comando + + + Options: + Opcións: + + + Specify configuration file (default: gamecredits.conf) + Especificar arquivo de configuración (por defecto: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Especificar arquivo de pid (por defecto: gamecreditsd.pid) + + + Specify data directory + Especificar directorio de datos + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Escoitar conexións no <porto> (por defecto: 40002 ou testnet: 50001) + + + 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: 40001 or testnet: 50000) + Escoitar conexións JSON-RPC no <porto> (por defecto: 40001 ou testnet: 50000) + + + Accept command line and JSON-RPC commands + Aceptar liña de comandos e comandos JSON-RPC + + + GameCredits 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=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, debes fixar unha rpcpassword no arquivo de configuración: +%s +Reoméndase usar o seguinte contrasinal aleatorio: +rpcuser=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 GameCredits 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 + + + GameCredits 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: 40001 or testnet: 50000) + Conectar a JSON-RPC no <porto> (por defecto: 40001 ou testnet: 50000) + + + 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 gamecredits-cli): + Emprego (desaconsellado, usar gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + Opcións SSL: (ver ńa Wiki GameCredits as instrucción de configuración de SSL) + + + Send command to GameCredits 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 GameCredits 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 GameCredits + Erro cargando wallet.dat: O moedeiro precisa unha versión máis nova de GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + Precísase rescribir o moedeiro: reinicie GameCredits 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/bitmark_gu_IN.ts b/src/qt/locale/bitmark_gu_IN.ts index 82eb3a3..fcfdc4e 100644 --- a/src/qt/locale/bitmark_gu_IN.ts +++ b/src/qt/locale/bitmark_gu_IN.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Pfennig + Show information about pfennig @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_gu_IN.ts~ b/src/qt/locale/bitmark_gu_IN.ts~ new file mode 100644 index 0000000..148a909 --- /dev/null +++ b/src/qt/locale/bitmark_gu_IN.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about GameCredits + + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_he.ts b/src/qt/locale/bitmark_he.ts index 5655b49..cfa0291 100644 --- a/src/qt/locale/bitmark_he.ts +++ b/src/qt/locale/bitmark_he.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core על אודות ליבת ביטקוין - <b>Pfennig Core</b> version + <b>pfennig Core</b> version <b>קליינט ביטקוין</b> גירסאת @@ -103,11 +103,11 @@ This product includes software developed by the OpenSSL Project for use in the O קבל כתובות - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. אלה כתובת הביטקוין שלך עבור שליחת תשלומים. תמיד בדוק את מספר ואת כתובות מקבלי התשלומים לפני שליחת מטבעות. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. אלה כתובות הביטקוין שלך עבור קבלת תשלומים. מומלץ להשתמש בכתובת חדשה לכל פעולה. @@ -205,7 +205,7 @@ This product includes software developed by the OpenSSL Project for use in the O אשר הצפנת ארנק - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! אזהרה: אם אתה מצפין את הארנק ומאבד את הסיסמא, אתה <b>תאבד את כל הביטקוינים שלך</b>! @@ -225,7 +225,7 @@ This product includes software developed by the OpenSSL Project for use in the O הארנק הוצפן - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. ביטקוין ייסגר עכשיו כדי להשלים את תהליך ההצפנה. זכור שהצפנת הארנק שלך אינו יכול להגן באופן מלא על הביטקוינים שלך מתוכנות זדוניות המושתלות על המחשב. @@ -258,7 +258,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... חתום על הודעה @@ -296,7 +296,7 @@ This product includes software developed by the OpenSSL Project for use in the O סגור תוכנה - Show information about Pfennig + Show information about pfennig הצג מידע על ביטקוין @@ -344,11 +344,11 @@ This product includes software developed by the OpenSSL Project for use in the O מחדש את אינדקס הבלוקים בדיסק... - Send coins to a Pfennig address + Send coins to a pfennig address שלח מטבעות לכתובת ביטקוין - Modify configuration options for Pfennig + Modify configuration options for pfennig שנה אפשרויות תצורה עבור ביטקוין @@ -372,7 +372,7 @@ This product includes software developed by the OpenSSL Project for use in the O אמת הודעה... - Pfennig + pfennig ביטקוין @@ -400,11 +400,11 @@ This product includes software developed by the OpenSSL Project for use in the O הצפן את המפתחות הפרטיים ששייכים לארנק שלך - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them חתום על הודעות עם כתובות הביטקוין שלך כדי להוכיח שהן בבעלותך - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses אמת הודעות כדי להבטיח שהן נחתמו עם כתובת ביטקוין מסוימות @@ -428,7 +428,7 @@ This product includes software developed by the OpenSSL Project for use in the O [רשת-בדיקה] - Pfennig Core + pfennig Core ליבת ביטקוין @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O בקש תשלומים (מייצר קודיי QR וסכימות URI של :pfennig) - &About Pfennig Core + &About pfennig Core &אודות קליינט ביטקוין @@ -456,15 +456,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client תוכנת ביטקוין - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network חיבור פעיל אחד לרשת הביטקוין%n חיבורים פעילים לרשת הביטקוין @@ -559,7 +559,7 @@ Address: %4 הארנק <b>מוצפן</b> וכרגע <b>נעול</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. שגיאה סופנית אירעה. ביטקוין אינו יכול להמשיך לפעול בבטחה ולכן ייסגר. @@ -844,7 +844,7 @@ Address: %4 הכתובת שהכנסת "%1" כבר נמצאת בפנקס הכתובות. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. הכתובת שהוכנסה "%1" אינה כתובת ביטקוין תקינה. @@ -882,11 +882,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core ליבת ביטקוין @@ -933,15 +933,15 @@ Address: %4 ברוך בואך - Welcome to Pfennig Core. + Welcome to pfennig Core. ברוך הבא לקליינט ביטקוין - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. מכיוון שזאת הפעם הראשונה שהתוכנה הופעלה תוכל לבחור איפה ביטקויין קור תאכסן את - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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 מהנתונים יאוכסנו בתיקיה הזו, ויגדל עם הזמן. הארנק גם יאוחסן בתיקיה הזו. @@ -953,7 +953,7 @@ Address: %4 השתמש בספריית מידע מותאמת אישית: - Pfennig + pfennig ביטקוין @@ -1015,11 +1015,11 @@ Address: %4 שלם &עמלת פעולה - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. הפעל את ביטקוין באופן עצמאי לאחר התחברות למערכת. - &Start Pfennig on system login + &Start pfennig on system login התחל את ביטקוין בעת התחברות למערכת @@ -1035,7 +1035,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1095,7 +1095,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. פתח את פורט ביטקוין בנתב באופן אוטומטי. עובד רק אם UPnP מאופשר ונתמך ע"י הנתב. @@ -1151,7 +1151,7 @@ Address: %4 שפת ממשק המשתמש: - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. ניתן לקבוע כאן את שפת ממשק המשתמש. הגדרה זו תחול לאחר הפעלה מחדש של ביטקוין. @@ -1163,7 +1163,7 @@ Address: %4 בחר את ברירת המחדל ליחידת החלוקה אשר תוצג בממשק ובעת שליחת מטבעות. - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. האם להציג כתובות ביטקוין ברשימת הפעולות או לא. @@ -1218,7 +1218,7 @@ Address: %4 טופס - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. המידע המוצג עשוי להיות מיושן. הארנק שלך מסתנכרן באופן אוטומטי עם רשת הביטקוין לאחר כינון חיבור, אך התהליך טרם הסתיים. @@ -1273,7 +1273,7 @@ Address: %4 תפעול URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. לא ניתן לנתח URI! זה יכול להיגרם כתוצאה מכתובת ביטקוין לא תקינה או פרמטרי URI חסרי צורה תקינה. @@ -1340,7 +1340,7 @@ Address: %4 QObject - Pfennig + pfennig ביטקוין @@ -1356,11 +1356,11 @@ Address: %4 שגיאה: שילוב בלתי חוקי של regtest- ו testnet-. - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) הכנס כתובת ביטקוין (למשל bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1482,7 +1482,7 @@ Address: %4 קובץ יומן ניפוי - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. פתח את קובץ יומן הניפוי מתיקיית הנתונים הנוכחית. זה עשוי לקחת מספר שניות עבור קובצי יומן גדולים. @@ -1490,7 +1490,7 @@ Address: %4 נקה לוח בקרה - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. ברוכים הבאים ללוח בקרת RPC של ביטקוין @@ -1553,7 +1553,7 @@ Address: %4 ש&ימוש חוזר בכתובת קבלה קיימת(לא מומלץ) - 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 Pfennig network. + 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 pfennig network. @@ -1866,7 +1866,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1953,7 +1953,7 @@ Address: %4 הקלד תווית עבור כתובת זו בכדי להוסיף אותה לרשימת הכתובות בשימוש - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1972,7 +1972,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2027,7 +2027,7 @@ Address: %4 העתק את החתימה הנוכחית ללוח המערכת - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address חתום על ההודעה כדי להוכיח שכתובת הביטקוין הזו בבעלותך. @@ -2055,7 +2055,7 @@ Address: %4 הכתובת איתה ההודעה נחתמה (למשל bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address אמת את ההודעה כדי להבטיח שהיא נחתמה עם כתובת הביטקוין הנתונה @@ -2067,7 +2067,7 @@ Address: %4 אפס את כל שדות אימות הודעה - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) הכנס כתובת ביטקוין (למשל bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2126,7 +2126,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core ליבת ביטקוין @@ -2621,8 +2621,8 @@ Address: %4 ציין תיקיית נתונים - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - האזן לחיבורים ב<פורט> (ברירת מחדל: P2PPORT או ברשת הבדיקה: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + האזן לחיבורים ב<פורט> (ברירת מחדל: 40002 או ברשת הבדיקה: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2649,15 +2649,15 @@ Address: %4 אירעה שגיאה בעת הגדרת פורט RPC %u להאזנה ב-IPv4: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - האזן לחיבורי JSON-RPC ב- <port> (ברירת מחדל: RPCPORT או רשת בדיקה: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + האזן לחיבורי JSON-RPC ב- <port> (ברירת מחדל: 40001 או רשת בדיקה: 50000) Accept command line and JSON-RPC commands קבל פקודות משורת הפקודה ו- JSON-RPC - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2682,7 +2682,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, עליך לקבוע סיסמת RPC בקובץ הקונפיגורציה: %s @@ -2693,7 +2693,7 @@ rpcpassword=%s אסור ששם המשתמש והסיסמא יהיו זהים. אם הקובץ אינו קיים, צור אותו עם הרשאות קריאה לבעלים בלבד. זה מומלץ לסמן alertnotify כדי לקבל דיווח על תקלות; -למשל: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com +למשל: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2765,7 +2765,7 @@ rpcpassword=%s זוהי בניית ניסיון טרום-שחרור - השימוש בה על אחריותך - אין להשתמש לצורך כריה או יישומי מסחר - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2777,7 +2777,7 @@ rpcpassword=%s אזהרה: -paytxfee נקבע לערך מאד גבוה! זוהי עמלת הפעולה שתשלם אם אתה שולח פעולה. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. אזהרה: אנא בדוק שהתאריך והשעה של המחשב שלך נכונים! אם השעון שלך אינו נכון ביטקוין לא יעבוד כראוי. @@ -2813,7 +2813,7 @@ rpcpassword=%s נסה לשחזר מפתחות פרטיים מקובץ wallet.dat מושחת. - Pfennig Core Daemon + pfennig Core Daemon @@ -2833,8 +2833,8 @@ rpcpassword=%s - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - התחבר ל JSON-RPC ב <port> (ברירת מחדל: RPCPORT או ברשת בדיקה: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + התחבר ל JSON-RPC ב <port> (ברירת מחדל: 40001 או ברשת בדיקה: 50000) Connection options: @@ -3057,7 +3057,7 @@ rpcpassword=%s מייבא בלוקים מקובצי blk000??.dat חיצוניים - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3121,7 +3121,7 @@ rpcpassword=%s - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3141,11 +3141,11 @@ rpcpassword=%s - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) אפשרויות SSL: (ראה את הויקי של ביטקוין עבור הוראות הגדרת SSL) - Send command to Pfennig Core + Send command to pfennig Core @@ -3181,7 +3181,7 @@ rpcpassword=%s ציין הגבלת זמן לחיבור במילישניות (ברירת מחדל: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3297,11 +3297,11 @@ rpcpassword=%s שגיאה בטעינת הקובץ wallet.dat: הארנק מושחת - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig שגיאה בטעינת הקובץ wallet.dat: הארנק דורש גרסה חדשה יותר של ביטקוין - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete יש לכתוב מחדש את הארנק: אתחל את ביטקוין לסיום diff --git a/src/qt/locale/bitmark_he.ts~ b/src/qt/locale/bitmark_he.ts~ new file mode 100644 index 0000000..6f1a07a --- /dev/null +++ b/src/qt/locale/bitmark_he.ts~ @@ -0,0 +1,3388 @@ + + + AboutDialog + + About GameCredits Core + על אודות ליבת ביטקוין + + + <b>GameCredits 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 לשימוש בתיבת הכלים OpenSSL (http://www.openssl.org/) ותוכנה קריפטוגרפית שנכתבה ע"י אריק יאנג (eay@cryptsoft.com) ותוכנת UPnP שנכתבה ע"י תומס ברנרד. + + + Copyright + זכויות יוצרים + + + The Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + אלה כתובת הביטקוין שלך עבור שליחת תשלומים. תמיד בדוק את מספר ואת כתובות מקבלי התשלומים לפני שליחת מטבעות. + + + These are your GameCredits 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 GameCreditsS</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 + הארנק הוצפן + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + סיסמת הארנק שונתה בהצלחה. + + + + GameCreditsGUI + + Sign &message... + חתום על הודעה + + + Synchronizing with network... + מסתנכרן עם הרשת... + + + &Overview + &סקירה + + + Node + + + + Show general overview of wallet + הצג סקירה כללית של הארנק + + + &Transactions + &פעולות + + + Browse transaction history + דפדף בהיסטוריית הפעולות + + + E&xit + י&ציאה + + + Quit application + סגור תוכנה + + + Show information about GameCredits + הצג מידע על ביטקוין + + + 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 GameCredits address + שלח מטבעות לכתובת ביטקוין + + + Modify configuration options for GameCredits + שנה אפשרויות תצורה עבור ביטקוין + + + Backup wallet to another location + גיבוי הארנק למקום אחר + + + Change the passphrase used for wallet encryption + שנה את הסיסמה להצפנת הארנק + + + &Debug window + חלון ניפוי + + + Open debugging and diagnostic console + פתח את לוח הבקרה לאבחון וניפוי + + + &Verify message... + אמת הודעה... + + + GameCredits + ביטקוין + + + Wallet + ארנק + + + &Send + &שלח + + + &Receive + וקבל + + + &Show / Hide + הצג / הסתר + + + Show or hide the main Window + הצג או הסתר את החלון הראשי + + + Encrypt the private keys that belong to your wallet + הצפן את המפתחות הפרטיים ששייכים לארנק שלך + + + Sign messages with your GameCredits addresses to prove you own them + חתום על הודעות עם כתובות הביטקוין שלך כדי להוכיח שהן בבעלותך + + + Verify messages to ensure they were signed with specified GameCredits addresses + אמת הודעות כדי להבטיח שהן נחתמו עם כתובת ביטקוין מסוימות + + + &File + &קובץ + + + &Settings + ה&גדרות + + + &Help + &עזרה + + + Tabs toolbar + סרגל כלים טאבים + + + [testnet] + [רשת-בדיקה] + + + GameCredits Core + ליבת ביטקוין + + + Request payments (generates QR codes and gamecredits: URIs) + בקש תשלומים (מייצר קודיי QR וסכימות URI של :gamecredits) + + + &About GameCredits Core + &אודות קליינט ביטקוין + + + Show the list of used sending addresses and labels + הצג את רשימת הכתובות לשליחה שהיו בשימוש לרבות התוויות + + + Show the list of used receiving addresses and labels + הצג את רשימת הכתובות והתויות המשומשות + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + תוכנת ביטקוין + + + %n active connection(s) to GameCredits 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 שעה%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 + מידע + + + 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. GameCredits 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. + תווית זו מאדימה במידה וגודל הפעולה עולה על 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 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + ברוך הבא לקליינט ביטקוין + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + מכיוון שזאת הפעם הראשונה שהתוכנה הופעלה תוכל לבחור איפה ביטקויין קור תאכסן את + + + GameCredits Core will download and store a copy of the GameCredits 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: + השתמש בספריית מידע מותאמת אישית: + + + GameCredits + ביטקוין + + + 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 GameCredits after logging in to the system. + הפעל את ביטקוין באופן עצמאי לאחר התחברות למערכת. + + + &Start GameCredits on system login + התחל את ביטקוין בעת התחברות למערכת + + + Size of &database cache + + + + MB + מגה בייט + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + פתח את פורט ביטקוין בנתב באופן אוטומטי. עובד רק אם 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 GameCredits. + ניתן לקבוע כאן את שפת ממשק המשתמש. הגדרה זו תחול לאחר הפעלה מחדש של ביטקוין. + + + &Unit to show amounts in: + יחידת מדידה להצגת כמויות: + + + Choose the default subdivision unit to show in the interface and when sending coins. + בחר את ברירת המחדל ליחידת החלוקה אשר תוצג בממשק ובעת שליחת מטבעות. + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + לא ניתן לנתח URI! זה יכול להיגרם כתוצאה מכתובת ביטקוין לא תקינה או פרמטרי URI חסרי צורה תקינה. + + + Requested payment amount of %1 is too small (considered dust). + הסכום הנדרש לתשלום %1 קטן מדי (נחשב לאבק) + + + Payment request error + שגיאה בבקשת תשלום + + + Cannot start gamecredits: 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 + שגיאת בקשת שרת + + + + QObject + + GameCredits + ביטקוין + + + 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-. + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + הכנס כתובת ביטקוין (למשל bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + &שמור תמונה.. + + + &Copy Image + &העתק תמונה + + + Save QR Code + שמור קוד QR + + + 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 + מספר חיבורים + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + פתח את קובץ יומן הניפוי מתיקיית הנתונים הנוכחית. זה עשוי לקחת מספר שניות עבור קובצי יומן גדולים. + + + Clear console + נקה לוח בקרה + + + Welcome to the GameCredits 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 GameCredits 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 + הוסף מקבל + + + 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) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + הכתובת שאליה ישלח התשלום (למשל bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + זוהי בקשת תשלום בלתי־מאומתת. + + + Pay To: + תשלום ל: + + + Memo: + תזכורת: + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + הכתובת איתה לחתום על ההודעה (למשל bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + הכתובת איתה ההודעה נחתמה (למשל bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + אמת את ההודעה כדי להבטיח שהיא נחתמה עם כתובת הביטקוין הנתונה + + + Verify &Message + אימות הודעה + + + Reset all verify message fields + אפס את כל שדות אימות הודעה + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + הכנס כתובת ביטקוין (למשל bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + ליבת ביטקוין + + + The Bitcoin 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 + זיהוי פעולה + + + 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 + לא ידוע + + + + 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 יותרפתח למשך %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) + + + + 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. + היסטוריית הפעולות נשמרה ל־%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. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + גיבוי הושלם בהצלחה + + + + gamecredits-core + + Usage: + שימוש: + + + List commands + רשימת פקודות + + + Get help for a command + קבל עזרה עבור פקודה + + + Options: + אפשרויות: + + + Specify configuration file (default: gamecredits.conf) + ציין קובץ הגדרות (ברירת מחדל: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + ציין קובץ pid (ברירת מחדל: gamecreditsd.pid) + + + Specify data directory + ציין תיקיית נתונים + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + האזן לחיבורים ב<פורט> (ברירת מחדל: 40002 או ברשת הבדיקה: 50001) + + + 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: 40001 or testnet: 50000) + האזן לחיבורי JSON-RPC ב- <port> (ברירת מחדל: 40001 או רשת בדיקה: 50000) + + + Accept command line and JSON-RPC commands + קבל פקודות משורת הפקודה ו- JSON-RPC + + + GameCredits 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=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, עליך לקבוע סיסמת RPC בקובץ הקונפיגורציה: + %s +מומלץ להשתמש בסיסמא האקראית הבאה: +rpcuser=gamecreditsrpc +rpcpassword=%s +(אין צורך לזכור את הסיסמה) +אסור ששם המשתמש והסיסמא יהיו זהים. +אם הקובץ אינו קיים, צור אותו עם הרשאות קריאה לבעלים בלבד. +זה מומלץ לסמן alertnotify כדי לקבל דיווח על תקלות; +למשל: alertnotify=echo %%s | mail -s "GameCredits 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 + אירעה שגיאה בעת הגדרת פורט RPC %u להאזנה ב-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 ב cmd יוחלף ב 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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits 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 מושחת. + + + GameCredits 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: 40001 or testnet: 50000) + התחבר ל JSON-RPC ב <port> (ברירת מחדל: 40001 או ברשת בדיקה: 50000) + + + 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) + + + 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. + + + + 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 gamecredits-cli): + שימוש (מיושן, השתמש ב gamecredits-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 חיצוניים + + + Cannot obtain a lock on data directory %s. GameCredits 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 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) + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the GameCredits 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 GameCredits Wiki for SSL setup instructions) + אפשרויות SSL: (ראה את הויקי של ביטקוין עבור הוראות הגדרת SSL) + + + Send command to GameCredits 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 GameCredits 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 מכתובת האינטרנט המצוינת + + + 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 GameCredits + שגיאה בטעינת הקובץ wallet.dat: הארנק דורש גרסה חדשה יותר של ביטקוין + + + Wallet needed to be rewritten: restart GameCredits 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=yourpassword בקובץ ההגדרות: +%s +אם הקובץ אינו קיים, צור אותו עם הרשאות קריאה לבעלים בלבד. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_hi_IN.ts b/src/qt/locale/bitmark_hi_IN.ts index f2d0f25..3232027 100644 --- a/src/qt/locale/bitmark_hi_IN.ts +++ b/src/qt/locale/bitmark_hi_IN.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O वॉलेट एनक्रिपशन को प्रमाणित कीजिए ! - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O वॉलेट एनक्रिप्ट हो गया ! - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -292,7 +292,7 @@ This product includes software developed by the OpenSSL Project for use in the O अप्लिकेशन से बाहर निकलना ! - Show information about Pfennig + Show information about pfennig बीटकोइन के बारे में जानकारी ! @@ -340,11 +340,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -368,7 +368,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig बीटकोइन @@ -396,11 +396,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -424,7 +424,7 @@ This product includes software developed by the OpenSSL Project for use in the O [टेस्टनेट] - Pfennig Core + pfennig Core @@ -432,7 +432,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -452,15 +452,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network %n सक्रिया संपर्क बीटकोइन नेटवर्क से%n सक्रिया संपर्क बीटकोइन नेटवर्क से @@ -555,7 +555,7 @@ Address: %4 वॉलेट एन्क्रिप्टेड है तथा अभी लॉक्ड है - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -840,7 +840,7 @@ Address: %4 डाला गया पता "%1" एड्रेस बुक में पहले से ही मोजूद है| - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -878,11 +878,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -929,15 +929,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -949,7 +949,7 @@ Address: %4 - Pfennig + pfennig बीटकोइन @@ -1011,11 +1011,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1031,7 +1031,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1091,7 +1091,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1147,7 +1147,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1159,7 +1159,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1214,7 +1214,7 @@ Address: %4 फार्म - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1269,7 +1269,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1336,7 +1336,7 @@ Address: %4 QObject - Pfennig + pfennig बीटकोइन @@ -1352,12 +1352,12 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Pfennig एड्रेस लिखें (उदाहरण: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + pfennig एड्रेस लिखें (उदाहरण: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1479,7 +1479,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1487,7 +1487,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1550,7 +1550,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1863,7 +1863,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1950,7 +1950,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1969,7 +1969,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2024,7 +2024,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2052,7 +2052,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2064,8 +2064,8 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Pfennig एड्रेस लिखें (उदाहरण: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + pfennig एड्रेस लिखें (उदाहरण: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2123,7 +2123,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2618,7 +2618,7 @@ Address: %4 डेटा डायरेक्टरी बताएं - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2646,7 +2646,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2654,7 +2654,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2679,7 +2679,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2752,7 +2752,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2764,7 +2764,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2800,7 +2800,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2820,7 +2820,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3044,7 +3044,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3108,7 +3108,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3128,11 +3128,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3168,7 +3168,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3284,11 +3284,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_hi_IN.ts~ b/src/qt/locale/bitmark_hi_IN.ts~ new file mode 100644 index 0000000..30c9cdc --- /dev/null +++ b/src/qt/locale/bitmark_hi_IN.ts~ @@ -0,0 +1,3373 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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) + 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>. + नया पहचान शब्द/अक्षर वॉलेट मे डालिए ! <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 GameCreditsS</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 + वॉलेट एनक्रिप्ट हो गया ! + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + नेटवर्क से समकालिक (मिल) रहा है ... + + + &Overview + &विवरण + + + Node + + + + Show general overview of wallet + वॉलेट का सामानया विवरण दिखाए ! + + + &Transactions + & लेन-देन + + + + Browse transaction history + देखिए पुराने लेन-देन के विवरण ! + + + E&xit + बाहर जायें + + + Quit application + अप्लिकेशन से बाहर निकलना ! + + + Show information about GameCredits + बीटकोइन के बारे में जानकारी ! + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + पहचान शब्द/अक्षर जो वॉलेट एनक्रिपशन के लिए इस्तेमाल किया है उसे बदलिए! + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + बीटकोइन + + + Wallet + वॉलेट + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &फाइल + + + &Settings + &सेट्टिंग्स + + + &Help + &मदद + + + Tabs toolbar + टैबस टूलबार + + + [testnet] + [टेस्टनेट] + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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 + जानकारी + + + Up to date + नवीनतम + + + Catching up... + + + + Sent transaction + भेजी ट्रांजक्शन + + + Incoming transaction + प्राप्त हुई ट्रांजक्शन + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + तारीख: %1\n +राशि: %2\n +टाइप: %3\n +पता:%4\n + + + Wallet is <b>encrypted</b> and currently <b>unlocked</b> + वॉलेट एन्क्रिप्टेड है तथा अभी लॉक्ड नहीं है + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + वॉलेट एन्क्रिप्टेड है तथा अभी लॉक्ड है + + + A fatal error occurred. GameCredits 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 + 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 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 GameCredits address. + + + + Could not unlock wallet. + वॉलेट को unlock नहीं किया जा सकता| + + + 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + बीटकोइन + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + बीटकोइन + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + GameCredits एड्रेस लिखें (उदाहरण: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + Clipboard से एड्रेस paste करें + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + GameCredits एड्रेस लिखें (उदाहरण: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + 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 + taareek + + + 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. + + + + Comma separated file (*.csv) + Comma separated file (*.csv) + + + Confirmed + पक्का + + + Date + taareek + + + 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. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + बैकप सफल + + + + gamecredits-core + + Usage: + खपत : + + + List commands + commands की लिस्ट बनाएं + + + Get help for a command + किसी command के लिए मदद लें + + + Options: + विकल्प: + + + Specify configuration file (default: gamecredits.conf) + configuraion की फाइल का विवरण दें (default: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + pid फाइल का विवरण दें (default: gamecredits.pid) + + + Specify data directory + डेटा डायरेक्टरी बताएं + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_hr.ts b/src/qt/locale/bitmark_hr.ts index 4c695dd..5501f0c 100644 --- a/src/qt/locale/bitmark_hr.ts +++ b/src/qt/locale/bitmark_hr.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core - O Pfennig Jezrgu + About pfennig Core + O pfennig Jezrgu - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,8 +200,8 @@ This product includes software developed by the OpenSSL Project for use in the O Potvrdi šifriranje novčanika - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Upozorenje: Ako šifrirate vaš novčanik i izgubite lozinku, <b>IZGUBIT ĆETE SVE SVOJE PfennigSE!</b> + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Upozorenje: Ako šifrirate vaš novčanik i izgubite lozinku, <b>IZGUBIT ĆETE SVE SVOJE pfennigSE!</b> Are you sure you wish to encrypt your wallet? @@ -220,8 +220,8 @@ This product includes software developed by the OpenSSL Project for use in the O Novčanik šifriran - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig ć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 pfennige od krađe preko zloćudnog softvera koji bi bio na vašem računalu. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig ć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 pfennige od krađe preko zloćudnog softvera koji bi bio na vašem računalu. Wallet encryption failed @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... &Potpišite poruku... @@ -291,8 +291,8 @@ This product includes software developed by the OpenSSL Project for use in the O Izlazak iz programa - Show information about Pfennig - Prikaži informacije o Pfennigu + Show information about pfennig + Prikaži informacije o pfennigu About &Qt @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O Re-indeksiranje blokova na disku... - Send coins to a Pfennig address + Send coins to a pfennig address Slanje novca na pfennig adresu - Modify configuration options for Pfennig + Modify configuration options for pfennig Promijeni postavke konfiguracije za pfennig @@ -367,8 +367,8 @@ This product includes software developed by the OpenSSL Project for use in the O &Potvrdite poruku... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,15 +423,15 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core - Pfennig Jezgra + pfennig Core + pfennig Jezgra Request payments (generates QR codes and pfennig: URIs) - &About Pfennig Core + &About pfennig Core @@ -451,16 +451,16 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Pfennig klijent + pfennig client + pfennig klijent - %n active connection(s) to Pfennig network - %n aktivna veza na Pfennig mrežu%n aktivne veze na Pfennig mrežu%n aktivnih veza na Pfennig mrežu + %n active connection(s) to pfennig network + %n aktivna veza na pfennig mrežu%n aktivne veze na pfennig mrežu%n aktivnih veza na pfennig mrežu No block source available... @@ -555,7 +555,7 @@ Adresa:%4 Novčanik je <b>šifriran</b> i trenutno <b>zaključan</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -840,7 +840,7 @@ Adresa:%4 Upisana adresa "%1" je već u adresaru. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. Upisana adresa "%1" nije valjana pfennig adresa. @@ -878,12 +878,12 @@ Adresa:%4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Pfennig Jezgra + pfennig Core + pfennig Jezgra version @@ -929,15 +929,15 @@ Adresa:%4 Dobrodošli - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -949,8 +949,8 @@ Adresa:%4 - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1011,12 +1011,12 @@ Adresa:%4 Plati &naknadu za transakciju - Automatically start Pfennig after logging in to the system. - Automatski pokreni Pfennig kad se uključi računalo + Automatically start pfennig after logging in to the system. + Automatski pokreni pfennig kad se uključi računalo - &Start Pfennig on system login - &Pokreni Pfennig kod pokretanja sustava + &Start pfennig on system login + &Pokreni pfennig kod pokretanja sustava Size of &database cache @@ -1031,7 +1031,7 @@ Adresa:%4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1091,8 +1091,8 @@ Adresa:%4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Automatski otvori port Pfennig klijenta na ruteru. To radi samo ako ruter podržava UPnP i ako je omogućen. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatski otvori port pfennig klijenta na ruteru. To radi samo ako ruter podržava UPnP i ako je omogućen. Map port using &UPnP @@ -1147,7 +1147,7 @@ Adresa:%4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1159,7 +1159,7 @@ Adresa:%4 Izaberite željeni najmanji dio pfenniga koji će biti prikazan u sučelju i koji će se koristiti za plaćanje. - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1214,8 +1214,8 @@ Adresa:%4 Oblik - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig mrežom kada je veza uspostavljena, ali taj proces još nije završen. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig mrežom kada je veza uspostavljena, ali taj proces još nije završen. Wallet @@ -1269,7 +1269,7 @@ Adresa:%4 URI upravljanje - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1336,8 +1336,8 @@ Adresa:%4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1352,12 +1352,12 @@ Adresa:%4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Unesite Pfennig adresu (npr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Unesite pfennig adresu (npr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1478,7 +1478,7 @@ Adresa:%4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1486,8 +1486,8 @@ Adresa:%4 Očisti konzolu - Welcome to the Pfennig RPC console. - Dobrodošli u Pfennig RPC konzolu. + Welcome to the pfennig RPC console. + Dobrodošli u pfennig RPC konzolu. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1549,7 +1549,7 @@ Adresa:%4 - 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 Pfennig network. + 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 pfennig network. @@ -1862,7 +1862,7 @@ Adresa:%4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1949,7 +1949,7 @@ Adresa:%4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1968,7 +1968,7 @@ Adresa:%4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -1992,7 +1992,7 @@ Adresa:%4 The address to sign the message with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Unesite Pfennig adresu (npr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Unesite pfennig adresu (npr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Choose previously used address @@ -2023,7 +2023,7 @@ Adresa:%4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2048,10 +2048,10 @@ Adresa:%4 The address the message was signed with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Unesite Pfennig adresu (npr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Unesite pfennig adresu (npr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2063,8 +2063,8 @@ Adresa:%4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Unesite Pfennig adresu (npr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Unesite pfennig adresu (npr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2122,8 +2122,8 @@ Adresa:%4 SplashScreen - Pfennig Core - Pfennig Jezgra + pfennig Core + pfennig Jezgra The Bitcoin Core Developers @@ -2617,8 +2617,8 @@ Adresa:%4 Odredi direktorij za datoteke - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Slušaj na <port>u (default: P2PPORT ili testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Slušaj na <port>u (default: 40002 ili testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2645,15 +2645,15 @@ Adresa:%4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Prihvaćaj JSON-RPC povezivanje na portu broj <port> (ugrađeni izbor: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Prihvaćaj JSON-RPC povezivanje na portu broj <port> (ugrađeni izbor: 40001 or testnet: 50000) Accept command line and JSON-RPC commands Prihvati komande iz tekst moda i JSON-RPC - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2678,7 +2678,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2751,7 +2751,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2763,8 +2763,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Upozorenje: -paytxfee je podešen na preveliki iznos. To je iznos koji ćete platiti za obradu transakcije. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Upozorenje: Molimo provjerite jesu li datum i vrijeme na vašem računalu točni. Ako vaš sat ide krivo, Pfennig neće raditi ispravno. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Upozorenje: Molimo provjerite jesu li datum i vrijeme na vašem računalu točni. Ako vaš sat ide krivo, pfennig neće raditi ispravno. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2799,7 +2799,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2819,7 +2819,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3043,7 +3043,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Importiraj blokove sa vanjskog blk000??.dat fajla - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3107,7 +3107,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3127,11 +3127,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL postavke: (za detalje o podešavanju SSL opcija vidi Pfennig Wiki) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL postavke: (za detalje o podešavanju SSL opcija vidi pfennig Wiki) - Send command to Pfennig Core + Send command to pfennig Core @@ -3167,7 +3167,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Odredi vremenski prozor za spajanje na mrežu u milisekundama (ugrađeni izbor: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3283,12 +3283,12 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Greška kod učitavanja wallet.dat: Novčanik pokvaren - Error loading wallet.dat: Wallet requires newer version of Pfennig - Greška kod učitavanja wallet.dat: Novčanik zahtjeva noviju verziju Pfenniga + Error loading wallet.dat: Wallet requires newer version of pfennig + Greška kod učitavanja wallet.dat: Novčanik zahtjeva noviju verziju pfenniga - Wallet needed to be rewritten: restart Pfennig to complete - Novčanik je trebao prepravak: ponovo pokrenite Pfennig + Wallet needed to be rewritten: restart pfennig to complete + Novčanik je trebao prepravak: ponovo pokrenite pfennig Error loading wallet.dat diff --git a/src/qt/locale/bitmark_hr.ts~ b/src/qt/locale/bitmark_hr.ts~ new file mode 100644 index 0000000..b704394 --- /dev/null +++ b/src/qt/locale/bitmark_hr.ts~ @@ -0,0 +1,3372 @@ + + + AboutDialog + + About GameCredits Core + O GameCredits Jezrgu + + + <b>GameCredits 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 + Autorsko pravo + + + The Bitcoin Core Developers + + + + (%1-bit) + + + + + AddressBookPage + + 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 + + + &Copy + + + + C&lose + + + + &Copy Address + &Kopirati adresu + + + 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 + + + &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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + Kopirati &oznaku + + + &Edit + &Izmjeniti + + + Export Address List + + + + Comma separated file (*.csv) + Datoteka vrijednosti odvojenih zarezom (*. csv) + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Oznaka + + + Address + Adresa + + + (no label) + (bez oznake) + + + + 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 GameCreditsS</b>! + Upozorenje: Ako šifrirate vaš novčanik i izgubite lozinku, <b>IZGUBIT ĆETE SVE SVOJE GameCreditsSE!</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits ć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 gamecreditse 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. + + + + GameCreditsGUI + + 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 + + + E&xit + &Izlaz + + + Quit application + Izlazak iz programa + + + Show information about GameCredits + Prikaži informacije o GameCreditsu + + + 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 GameCredits address + Slanje novca na gamecredits adresu + + + Modify configuration options for GameCredits + Promijeni postavke konfiguracije za gamecredits + + + 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... + + + GameCredits + GameCredits + + + Wallet + Novčanik + + + &Send + &Pošalji + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &Datoteka + + + &Settings + &Konfiguracija + + + &Help + &Pomoć + + + Tabs toolbar + Traka kartica + + + [testnet] + [testnet] + + + GameCredits Core + GameCredits Jezgra + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + GameCredits klijent + + + %n active connection(s) to GameCredits network + %n aktivna veza na GameCredits mrežu%n aktivne veze na GameCredits mrežu%n aktivnih veza na GameCredits 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 + + + Up to date + Ažurno + + + Catching up... + Ažuriranje... + + + Sent transaction + Poslana transakcija + + + Incoming transaction + Dolazna transakcija + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Datum:%1 +Iznos:%2 +Tip:%3 +Adresa:%4 + + + + 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. GameCredits can no longer continue safely and will quit. + + + + + 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 list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Adresa + + + 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 GameCredits address. + Upisana adresa "%1" nije valjana gamecredits adresa. + + + Could not unlock wallet. + Ne mogu otključati novčanik. + + + New key generation failed. + Stvaranje novog ključa nije uspjelo. + + + + 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Automatski pokreni GameCredits kad se uključi računalo + + + &Start GameCredits on system login + &Pokreni GameCredits kod pokretanja sustava + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Automatski otvori port GameCredits 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 + + + Proxy &IP: + Proxy &IP: + + + &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 GameCredits. + + + + &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 gamecreditsa koji će biti prikazan u sučelju i koji će se koristiti za plaćanje. + + + Whether to show GameCredits 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 + + + default + standardne vrijednosti + + + 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. + 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 GameCredits 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 GameCredits mrežom kada je veza uspostavljena, ali taj proces još nije završen. + + + 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> + + + out of sync + + + + + PaymentServer + + URI handling + URI upravljanje + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + GameCredits + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Unesite GameCredits adresu (npr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + Spremi QR kod + + + 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 + + + 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 + + + &Console + &Konzola + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + + + + Debug log file + + + + Open the GameCredits 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 GameCredits RPC console. + Dobrodošli u GameCredits 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. + + + + %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 GameCredits 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 + + + Clear all fields of the form. + + + + Clear &All + Obriši &sve + + + Balance: + Stanje: + + + Confirm the send action + Potvrdi akciju slanja + + + S&end + &Pošalji + + + Confirm send coins + Potvrdi slanje novca + + + %1 to %2 + + + + 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. + + + 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 GameCredits 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 + + A&mount: + &Iznos: + + + Pay &To: + &Primatelj plaćanja: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 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 entry + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + Primatelj plaćanja: + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Unesite GameCredits adresu (npr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Unesite GameCredits adresu (npr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Unesite GameCredits adresu (npr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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. + 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. + + + + + SplashScreen + + GameCredits Core + GameCredits Jezgra + + + The Bitcoin 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 %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 + + + + TransactionDescDialog + + Transaction details + Detalji transakcije + + + This pane shows a detailed description of the transaction + Ova panela prikazuje detaljni opis transakcije + + + + 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 + + + Confirmed (%1 confirmations) + Potvrđen (%1 potvrda) + + + 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. + + + + 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 + + + + 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 + + + Range: + Raspon: + + + to + za + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + Slanje novca + + + + 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 %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + + + + + gamecredits-core + + Usage: + Upotreba: + + + List commands + Prikaži komande + + + Get help for a command + Potraži pomoć za komandu + + + Options: + Postavke: + + + Specify configuration file (default: gamecredits.conf) + Odredi konfiguracijsku datoteku (ugrađeni izbor: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Odredi proces ID datoteku (ugrađeni izbor: gamecredits.pid) + + + Specify data directory + Odredi direktorij za datoteke + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Slušaj na <port>u (default: 40002 ili testnet: 50001) + + + 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: 40001 or testnet: 50000) + Prihvaćaj JSON-RPC povezivanje na portu broj <port> (ugrađeni izbor: 40001 or testnet: 50000) + + + Accept command line and JSON-RPC commands + Prihvati komande iz tekst moda i JSON-RPC + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits 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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Upozorenje: Molimo provjerite jesu li datum i vrijeme na vašem računalu točni. Ako vaš sat ide krivo, GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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) + + + + 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 gamecredits-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 + + + Cannot obtain a lock on data directory %s. GameCredits 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 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) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL postavke: (za detalje o podešavanju SSL opcija vidi GameCredits Wiki) + + + Send command to GameCredits Core + + + + Send trace/debug info to console instead of debug.log file + Šalji trace/debug informacije na konzolu umjesto u debug.log datoteku + + + 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) + + + Start GameCredits 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) + + + Username for JSON-RPC connections + Korisničko ime za JSON-RPC veze + + + Warning + Upozorenje + + + Warning: This version is obsolete, upgrade required! + + + + 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) + + + 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) + + + 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 GameCredits + Greška kod učitavanja wallet.dat: Novčanik zahtjeva noviju verziju GameCreditsa + + + Wallet needed to be rewritten: restart GameCredits to complete + Novčanik je trebao prepravak: ponovo pokrenite GameCredits + + + 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 + + + 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. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_hu.ts b/src/qt/locale/bitmark_hu.ts index 7c0059c..50345a8 100644 --- a/src/qt/locale/bitmark_hu.ts +++ b/src/qt/locale/bitmark_hu.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -102,11 +102,11 @@ Ez a termék az OpenSSL Project által lett kifejlesztve az OpenSSL Toolkit (htt - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -204,8 +204,8 @@ Ez a termék az OpenSSL Project által lett kifejlesztve az OpenSSL Toolkit (htt 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 PfennigS</b>! - Figyelem: Ha kódolod a tárcát, és elveszíted a jelszavad, akkor <b>AZ ÖSSZES PfennigODAT IS EL FOGOD VESZÍTENI!</b> + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Figyelem: Ha kódolod a tárcát, és elveszíted a jelszavad, akkor <b>AZ ÖSSZES pfennigODAT IS EL FOGOD VESZÍTENI!</b> Are you sure you wish to encrypt your wallet? @@ -224,8 +224,8 @@ Ez a termék az OpenSSL Project által lett kifejlesztve az OpenSSL Toolkit (htt Tárca kódolva - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig 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. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig 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 @@ -257,7 +257,7 @@ Ez a termék az OpenSSL Project által lett kifejlesztve az OpenSSL Toolkit (htt - PfennigGUI + pfennigGUI Sign &message... Üzenet aláírása... @@ -295,8 +295,8 @@ Ez a termék az OpenSSL Project által lett kifejlesztve az OpenSSL Toolkit (htt Kilépés - Show information about Pfennig - Információk a Pfennigról + Show information about pfennig + Információk a pfennigról About &Qt @@ -343,12 +343,12 @@ Ez a termék az OpenSSL Project által lett kifejlesztve az OpenSSL Toolkit (htt A blokkok lemezen történő ujraindexelése... - Send coins to a Pfennig address + Send coins to a pfennig address Érmék küldése megadott címre - Modify configuration options for Pfennig - Pfennig konfigurációs opciók + Modify configuration options for pfennig + pfennig konfigurációs opciók Backup wallet to another location @@ -371,8 +371,8 @@ Ez a termék az OpenSSL Project által lett kifejlesztve az OpenSSL Toolkit (htt Üzenet &valódiságának ellenőrzése - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -399,12 +399,12 @@ Ez a termék az OpenSSL Project által lett kifejlesztve az OpenSSL Toolkit (htt A pénztárcájához tartozó privát kulcsok titkosítása - Sign messages with your Pfennig addresses to prove you own them - Üzenet aláírása a Pfennig címmel, amivel bizonyítja, hogy a cím az ön tulajdona. + Sign messages with your pfennig addresses to prove you own them + Üzenet aláírása a pfennig címmel, amivel bizonyítja, hogy a cím az ön tulajdona. - Verify messages to ensure they were signed with specified Pfennig addresses - Annak ellenőrzése, hogy az üzenetek valóban a megjelölt Pfennig címekkel vannak-e alaírva + Verify messages to ensure they were signed with specified pfennig addresses + Annak ellenőrzése, hogy az üzenetek valóban a megjelölt pfennig címekkel vannak-e alaírva &File @@ -427,15 +427,15 @@ Ez a termék az OpenSSL Project által lett kifejlesztve az OpenSSL Toolkit (htt [teszthálózat] - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core Request payments (generates QR codes and pfennig: URIs) - &About Pfennig Core + &About pfennig Core @@ -455,16 +455,16 @@ Ez a termék az OpenSSL Project által lett kifejlesztve az OpenSSL Toolkit (htt - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Pfennig kliens + pfennig client + pfennig kliens - %n active connection(s) to Pfennig network - %n aktív kapcsolat a Pfennig-hálózattal%n aktív kapcsolat a Pfennig-hálózattal + %n active connection(s) to pfennig network + %n aktív kapcsolat a pfennig-hálózattal%n aktív kapcsolat a pfennig-hálózattal No block source available... @@ -559,7 +559,7 @@ Cím: %4 Tárca <b>kódolva</b> és jelenleg <b>zárva</b>. - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -844,8 +844,8 @@ Cím: %4 A megadott "%1" cím már szerepel a címjegyzékben. - The entered address "%1" is not a valid Pfennig address. - A megadott "%1" cím nem egy érvényes Pfennig-cím. + The entered address "%1" is not a valid pfennig address. + A megadott "%1" cím nem egy érvényes pfennig-cím. Could not unlock wallet. @@ -882,12 +882,12 @@ Cím: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core version @@ -934,15 +934,15 @@ Cím: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -954,8 +954,8 @@ Cím: %4 - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,11 +1016,11 @@ Cím: %4 Tranzakciós &díj fizetése - Automatically start Pfennig after logging in to the system. - Induljon el a Pfennig a számítógép bekapcsolásakor + Automatically start pfennig after logging in to the system. + Induljon el a pfennig a számítógép bekapcsolásakor - &Start Pfennig on system login + &Start pfennig on system login &Induljon el a számítógép bekapcsolásakor @@ -1036,7 +1036,7 @@ Cím: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1096,8 +1096,8 @@ Cím: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - A Pfennig-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. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + A pfennig-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 @@ -1152,8 +1152,8 @@ Cím: %4 Felhasználófelület nye&lve: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Itt beállíthatod a felhasználófelület nyelvét. Ez a beállítás a Pfennig ujraindítása után lép érvénybe. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Itt beállíthatod a felhasználófelület nyelvét. Ez a beállítás a pfennig ujraindítása után lép érvénybe. &Unit to show amounts in: @@ -1164,8 +1164,8 @@ Cím: %4 Válaszd ki az interfészen és érmék küldésekor megjelenítendő alapértelmezett alegységet. - Whether to show Pfennig addresses in the transaction list or not. - Mutassa-e a Pfennig címeket a tranzakciólistában. + Whether to show pfennig addresses in the transaction list or not. + Mutassa-e a pfennig címeket a tranzakciólistában. &Display addresses in transaction list @@ -1219,8 +1219,8 @@ Cím: %4 Űrlap - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig hálózattal miután a kapcsolat létrejön, de ez e folyamat még nem fejeződött be. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig hálózattal miután a kapcsolat létrejön, de ez e folyamat még nem fejeződött be. Wallet @@ -1274,7 +1274,7 @@ Cím: %4 URI kezelés - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1341,8 +1341,8 @@ Cím: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,12 +1357,12 @@ Cím: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Adj meg egy Pfennig-címet (pl.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR ) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adj meg egy pfennig-címet (pl.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR ) @@ -1483,7 +1483,7 @@ Cím: %4 Debug naplófájl - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1491,8 +1491,8 @@ Cím: %4 Konzol törlése - Welcome to the Pfennig RPC console. - Üdv a Pfennig RPC konzoljában! + Welcome to the pfennig RPC console. + Üdv a pfennig RPC konzoljában! Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1554,7 +1554,7 @@ Cím: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1867,7 +1867,7 @@ Cím: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1955,7 +1955,7 @@ Cím: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1974,7 +1974,7 @@ Cím: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -1998,7 +1998,7 @@ Cím: %4 The address to sign the message with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Adj meg egy Pfennig-címet (pl.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR ) + Adj meg egy pfennig-címet (pl.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR ) Choose previously used address @@ -2029,7 +2029,7 @@ Cím: %4 A jelenleg kiválasztott aláírás másolása a rendszer-vágólapra - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address Üzenet @@ -2054,10 +2054,10 @@ Cím: %4 The address the message was signed with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Adj meg egy Pfennig-címet (pl.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR ) + Adj meg egy pfennig-címet (pl.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR ) - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2069,8 +2069,8 @@ Cím: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Adj meg egy Pfennig-címet (pl.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR ) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adj meg egy pfennig-címet (pl.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR ) Click "Sign Message" to generate signature @@ -2128,8 +2128,8 @@ Cím: %4 SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core The Bitcoin Core Developers @@ -2629,8 +2629,8 @@ Cím: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Csatlakozásokhoz figyelendő <port> (alapértelmezett: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Csatlakozásokhoz figyelendő <port> (alapértelmezett: 40002 or testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2657,8 +2657,8 @@ Cím: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - JSON-RPC csatlakozásokhoz figyelendő <port> (alapértelmezett: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + JSON-RPC csatlakozásokhoz figyelendő <port> (alapértelmezett: 40001 or testnet: 50000) Accept command line and JSON-RPC commands @@ -2666,7 +2666,7 @@ Cím: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2693,7 +2693,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2766,7 +2766,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2778,8 +2778,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Figyelem: a -paytxfee nagyon magas. Ennyi tranzakciós díjat fogsz fizetni, ha elküldöd a tranzakciót. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Figyelem: Ellenőrizd, hogy helyesen van-e beállítva a gépeden a dátum és az idő. A Pfennig nem fog megfelelően működni, ha rosszul van beállítvaaz órád. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Figyelem: Ellenőrizd, hogy helyesen van-e beállítva a gépeden a dátum és az idő. A pfennig 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. @@ -2814,7 +2814,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2834,7 +2834,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3058,7 +3058,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3122,7 +3122,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3142,11 +3142,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL-opciók: (lásd a Pfennig Wiki SSL-beállítási instrukcióit) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL-opciók: (lásd a pfennig Wiki SSL-beállítási instrukcióit) - Send command to Pfennig Core + Send command to pfennig Core @@ -3182,7 +3182,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Csatlakozás időkerete milliszekundumban (alapértelmezett: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3308,12 +3308,12 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Hiba a wallet.dat betöltése közben: meghibásodott tárca - Error loading wallet.dat: Wallet requires newer version of Pfennig - Hiba a wallet.dat betöltése közben: ehhez a tárcához újabb verziójú Pfennig-kliens szükséges + Error loading wallet.dat: Wallet requires newer version of pfennig + Hiba a wallet.dat betöltése közben: ehhez a tárcához újabb verziójú pfennig-kliens szükséges - Wallet needed to be rewritten: restart Pfennig to complete - A Tárca újraírása szükséges: Indítsa újra a teljesen a Pfennig-t + Wallet needed to be rewritten: restart pfennig to complete + A Tárca újraírása szükséges: Indítsa újra a teljesen a pfennig-t Error loading wallet.dat diff --git a/src/qt/locale/bitmark_hu.ts~ b/src/qt/locale/bitmark_hu.ts~ new file mode 100644 index 0000000..4ef30f8 --- /dev/null +++ b/src/qt/locale/bitmark_hu.ts~ @@ -0,0 +1,3399 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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. + +Ez egy kísérleti program. +MIT/X11 szoftverlicenc alatt kiadva, lásd a mellékelt fájlt COPYING vagy http://www.opensource.org/licenses/mit-license.php. + +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 Bitcoin Core Developers + + + + (%1-bit) + + + + + AddressBookPage + + 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 + + + &Copy + + + + C&lose + + + + &Copy Address + &Cím másolása + + + 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... + + + &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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 + + + Export Address List + + + + Comma separated file (*.csv) + Vesszővel elválasztott fájl (*. csv) + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Címke + + + Address + Cím + + + (no label) + (nincs címke) + + + + 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 GameCreditsS</b>! + Figyelem: Ha kódolod a tárcát, és elveszíted a jelszavad, akkor <b>AZ ÖSSZES GameCreditsODAT 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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits 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. + + + + GameCreditsGUI + + 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 + + + E&xit + &Kilépés + + + Quit application + Kilépés + + + Show information about GameCredits + Információk a GameCreditsró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 GameCredits address + Érmék küldése megadott címre + + + Modify configuration options for GameCredits + GameCredits 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 + + + GameCredits + GameCredits + + + Wallet + Tárca + + + &Send + &Küldés + + + &Receive + &Fogadás + + + &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 GameCredits addresses to prove you own them + Üzenet aláírása a GameCredits címmel, amivel bizonyítja, hogy a cím az ön tulajdona. + + + Verify messages to ensure they were signed with specified GameCredits addresses + Annak ellenőrzése, hogy az üzenetek valóban a megjelölt GameCredits 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] + + + GameCredits Core + GameCredits Core + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + GameCredits kliens + + + %n active connection(s) to GameCredits network + %n aktív kapcsolat a GameCredits-hálózattal%n aktív kapcsolat a GameCredits-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ó + + + Up to date + Naprakész + + + Catching up... + Frissítés... + + + Sent transaction + Tranzakció elküldve. + + + Incoming transaction + Beérkező tranzakció + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Dátum: %1 +Összeg: %2 +Típus: %3 +Cím: %4 + + + + 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. GameCredits can no longer continue safely and will quit. + + + + + 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 list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Cím + + + 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 GameCredits address. + A megadott "%1" cím nem egy érvényes GameCredits-cím. + + + Could not unlock wallet. + Tárca feloldása sikertelen + + + New key generation failed. + Új kulcs generálása sikertelen + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Induljon el a GameCredits a számítógép bekapcsolásakor + + + &Start GameCredits 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 GameCredits 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) + + + + 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + A GameCredits-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 + + + Proxy &IP: + Proxy &IP: + + + &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 GameCredits. + Itt beállíthatod a felhasználófelület nyelvét. Ez a beállítás a GameCredits 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 GameCredits addresses in the transaction list or not. + Mutassa-e a GameCredits címeket a tranzakciólistában. + + + &Display addresses in transaction list + &Címek megjelenítése a tranzakciólistában + + + Whether to show coin control features or not. + + + + &OK + &OK + + + &Cancel + Megszakítá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. + + + + Client will be shutdown, do you want to proceed? + + + + This change would require a client restart. + + + + 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 GameCredits 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 GameCredits hálózattal miután a kapcsolat létrejön, de ez e folyamat még nem fejeződött be. + + + 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> + + + out of sync + Nincs szinkronban. + + + + PaymentServer + + URI handling + URI kezelés + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: click-to-pay handler + A gamecreditst 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 + + + + + QObject + + GameCredits + GameCredits + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adj meg egy GameCredits-címet (pl.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR ) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + QR kód mentése + + + PNG Image (*.png) + + + + + RPCConsole + + Client name + Kliens néve + + + N/A + Nem elérhető + + + Client version + Kliens verzió + + + &Information + &Információ + + + 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 + + + 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 + + + &Console + &Konzol + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + Fordítás dátuma + + + Debug log file + Debug naplófájl + + + Open the GameCredits 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 GameCredits RPC console. + Üdv a GameCredits 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 GameCredits 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 + + + Clear all fields of the form. + + + + Clear &All + Mindent &töröl + + + Balance: + Egyenleg: + + + Confirm the send action + Küldés megerősítése + + + S&end + &Küldés + + + Confirm send coins + Küldés megerősítése + + + %1 to %2 + + + + 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 gamecredits 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. + + + 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 GameCredits 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 + + A&mount: + Összeg: + + + Pay &To: + Címzett: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 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 entry + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adj meg egy GameCredits-címet (pl.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR ) + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adj meg egy GameCredits-címet (pl.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR ) + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adj meg egy GameCredits-címet (pl.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR ) + + + Click "Sign Message" to generate signature + + + + 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 + + GameCredits Core + GameCredits Core + + + The Bitcoin 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 %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 + + + + TransactionDescDialog + + Transaction details + Tranzakció részletei + + + This pane shows a detailed description of the transaction + Ez a mező a tranzakció részleteit mutatja + + + + 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 + + + Confirmed (%1 confirmations) + Megerősítve (%1 megerősíté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. + + + + 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 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ó + + + Range: + Tartomány: + + + to + meddig + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + Érmék küldése + + + + 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 %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + Sikeres biztonsági mentés + + + + gamecredits-core + + Usage: + Használat: + + + List commands + Parancsok kilistázása + + + + Get help for a command + Segítség egy parancsról + + + + Options: + Opciók + + + + Specify configuration file (default: gamecredits.conf) + Konfigurációs fájl (alapértelmezett: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + pid-fájl (alapértelmezett: gamecreditsd.pid) + + + + Specify data directory + Adatkönyvtár + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Csatlakozásokhoz figyelendő <port> (alapértelmezett: 40002 or testnet: 50001) + + + 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: 40001 or testnet: 50000) + JSON-RPC csatlakozásokhoz figyelendő <port> (alapértelmezett: 40001 or testnet: 50000) + + + Accept command line and JSON-RPC commands + Parancssoros és JSON-RPC parancsok elfogadása + + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits 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. + 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 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: + + + + 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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Figyelem: Ellenőrizd, hogy helyesen van-e beállítva a gépeden a dátum és az idő. A GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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. + + + + 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 gamecredits-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 + + + + Cannot obtain a lock on data directory %s. GameCredits 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 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) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL-opciók: (lásd a GameCredits Wiki SSL-beállítási instrukcióit) + + + Send command to GameCredits 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 + + + 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 GameCredits 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) + + + Username for JSON-RPC connections + Felhasználói név JSON-RPC csatlakozásokhoz + + + + Warning + Figyelem + + + Warning: This version is obsolete, upgrade required! + + + + 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) + + + + 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) + + + 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 GameCredits + Hiba a wallet.dat betöltése közben: ehhez a tárcához újabb verziójú GameCredits-kliens szükséges + + + Wallet needed to be rewritten: restart GameCredits to complete + A Tárca újraírása szükséges: Indítsa újra a teljesen a GameCredits-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 gamecreditsod. + + + 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 + + + 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. + Be kell állítani rpcpassword=<password> a konfigurációs fájlban +%s +Ha a fájl nem létezik, hozd létre 'csak a felhasználó által olvasható' fájl engedéllyel + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_id_ID.ts b/src/qt/locale/bitmark_id_ID.ts index 005f7b9..d0a2dae 100644 --- a/src/qt/locale/bitmark_id_ID.ts +++ b/src/qt/locale/bitmark_id_ID.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Mengenai Pfennig Core + About pfennig Core + Mengenai pfennig Core - <b>Pfennig Core</b> version - versi <b>Pfennig Core</b> + <b>pfennig Core</b> version + versi <b>pfennig Core</b> @@ -29,7 +29,7 @@ Produk ini termasuk software yang dibangun oleh Proyek OpenSSL untuk Toolkit Ope The Bitcoin Core Developers - Pembangun Pfennig Core + Pembangun pfennig Core (%1-bit) @@ -103,11 +103,11 @@ Produk ini termasuk software yang dibangun oleh Proyek OpenSSL untuk Toolkit Ope Alamat-alamat menerima - These are your Pfennig 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 Pfennig. + These are your pfennig 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 pfennig. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig 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. @@ -205,8 +205,8 @@ Produk ini termasuk software yang dibangun oleh Proyek OpenSSL untuk Toolkit Ope Konfirmasi enkripsi dompet - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Perhatian: Jika anda mengenkripsi dompet anda dan lupa kata kuncinya, anda pasti <b>KEHILANGAN SELURUH Pfennig ANDA</B>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Perhatian: Jika anda mengenkripsi dompet anda dan lupa kata kuncinya, anda pasti <b>KEHILANGAN SELURUH pfennig ANDA</B>! Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ Produk ini termasuk software yang dibangun oleh Proyek OpenSSL untuk Toolkit Ope Dompet terenkripsi - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig akan menutup untuk menyelesaikan proses enkripsi. Ingat bahwa dengan mengenkripsi dompet Anda tidak sepenuhnya melindungi pfennig Anda dari perangkat lunak berbahaya yang menginfeksi komputer Anda. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig akan menutup untuk menyelesaikan proses enkripsi. Ingat bahwa dengan mengenkripsi dompet Anda tidak sepenuhnya melindungi pfennig Anda dari perangkat lunak berbahaya yang menginfeksi komputer Anda. Wallet encryption failed @@ -258,7 +258,7 @@ Produk ini termasuk software yang dibangun oleh Proyek OpenSSL untuk Toolkit Ope - PfennigGUI + pfennigGUI Sign &message... Pesan &penanda... @@ -296,8 +296,8 @@ Produk ini termasuk software yang dibangun oleh Proyek OpenSSL untuk Toolkit Ope Keluar dari aplikasi - Show information about Pfennig - Tampilkan informasi mengenai Pfennig + Show information about pfennig + Tampilkan informasi mengenai pfennig About &Qt @@ -344,12 +344,12 @@ Produk ini termasuk software yang dibangun oleh Proyek OpenSSL untuk Toolkit Ope Mengindex ulang block di harddisk... - Send coins to a Pfennig address - Kirim koin ke alamat Pfennig + Send coins to a pfennig address + Kirim koin ke alamat pfennig - Modify configuration options for Pfennig - Ubah pilihan konfigurasi untuk Pfennig + Modify configuration options for pfennig + Ubah pilihan konfigurasi untuk pfennig Backup wallet to another location @@ -372,8 +372,8 @@ Produk ini termasuk software yang dibangun oleh Proyek OpenSSL untuk Toolkit Ope &Verifikasi pesan... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ Produk ini termasuk software yang dibangun oleh Proyek OpenSSL untuk Toolkit Ope Mengenkripsi kunci-kunci pribadi yang dipunyai dompetmu - Sign messages with your Pfennig addresses to prove you own them - Tandalah pesanan dengan alamat-alamat Pfennig Anda supaya membuktikan pesanan itu dikirim oleh Anda + Sign messages with your pfennig addresses to prove you own them + Tandalah pesanan dengan alamat-alamat pfennig Anda supaya membuktikan pesanan itu dikirim oleh Anda - Verify messages to ensure they were signed with specified Pfennig addresses - Periksakan pesan-pesan supaya menjaminkan ditandatangani oleh alamat Pfennig yang terperinci + Verify messages to ensure they were signed with specified pfennig addresses + Periksakan pesan-pesan supaya menjaminkan ditandatangani oleh alamat pfennig yang terperinci &File @@ -428,16 +428,16 @@ Produk ini termasuk software yang dibangun oleh Proyek OpenSSL untuk Toolkit Ope [testnet] - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core Request payments (generates QR codes and pfennig: URIs) Permintaan pembayaran (membangkitkan kode QR dan pfennig: URIs) - &About Pfennig Core - &Mengenai Pfennig Core + &About pfennig Core + &Mengenai pfennig Core Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ Produk ini termasuk software yang dibangun oleh Proyek OpenSSL untuk Toolkit Ope &pilihan Perintah-baris - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Tampilkan pesan bantuan Pfennig Core untuk memberikan daftar pilihan perintah-baris yang memungkinkan dalam aplikasi Pfennig + Show the pfennig Core help message to get a list with possible pfennig command-line options + Tampilkan pesan bantuan pfennig Core untuk memberikan daftar pilihan perintah-baris yang memungkinkan dalam aplikasi pfennig - Pfennig client - Klien Pfennig + pfennig client + Klien pfennig - %n active connection(s) to Pfennig network - %n hubungan aktif ke jaringan Pfennig + %n active connection(s) to pfennig network + %n hubungan aktif ke jaringan pfennig No block source available... @@ -560,8 +560,8 @@ Alamat: %4 Dompet saat ini <b>terenkripsi</b> dan <b>terkunci</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Terjadi kesalahan fatal. Pfennig tidak bisa lagi meneruskan dengan aman dan akan berhenti. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Terjadi kesalahan fatal. pfennig tidak bisa lagi meneruskan dengan aman dan akan berhenti. @@ -845,8 +845,8 @@ Alamat: %4 Alamat yang dimasukkan "%1" sudah ada di dalam buku alamat. - The entered address "%1" is not a valid Pfennig address. - Alamat yang dimasukkan "%1" bukan alamat Pfennig yang benar. + The entered address "%1" is not a valid pfennig address. + Alamat yang dimasukkan "%1" bukan alamat pfennig yang benar. Could not unlock wallet. @@ -883,12 +883,12 @@ Alamat: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core - pilihan Perintah-baris + pfennig Core - Command-line options + pfennig Core - pilihan Perintah-baris - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core version @@ -934,15 +934,15 @@ Alamat: %4 Selamat Datang - Welcome to Pfennig Core. - Selamat Datang ke Pfennig Core + Welcome to pfennig Core. + Selamat Datang ke pfennig Core - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -954,8 +954,8 @@ Alamat: %4 Menggunakan direktori data yang dipilih Anda: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,12 +1016,12 @@ Alamat: %4 Bayar &biaya transaksi - Automatically start Pfennig after logging in to the system. - Menyalakan Pfennig secara otomatis setelah masuk ke dalam sistem. + Automatically start pfennig after logging in to the system. + Menyalakan pfennig secara otomatis setelah masuk ke dalam sistem. - &Start Pfennig on system login - &Menyalakan Pfennig pada login sistem + &Start pfennig on system login + &Menyalakan pfennig pada login sistem Size of &database cache @@ -1036,8 +1036,8 @@ Alamat: %4 - Connect to the Pfennig network through a SOCKS proxy. - Menghubungkan jaringan Pfennig lewat proxy SOCKS. + Connect to the pfennig network through a SOCKS proxy. + Menghubungkan jaringan pfennig lewat proxy SOCKS. &Connect through SOCKS proxy (default proxy): @@ -1096,8 +1096,8 @@ Alamat: %4 &Perubahan saldo untuk transaksi yang belum dikonfirmasi - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Otomatis membuka port client Pfennig di router. Hanya berjalan apabila router anda mendukung UPnP dan di-enable. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Otomatis membuka port client pfennig di router. Hanya berjalan apabila router anda mendukung UPnP dan di-enable. Map port using &UPnP @@ -1152,8 +1152,8 @@ Alamat: %4 &Bahasa Antarmuka Pengguna: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Tampilan bahasa pengguna dapat diatur disini. Pengaturan ini akan berpengaruh setelah memulai kembali aplikasi Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Tampilan bahasa pengguna dapat diatur disini. Pengaturan ini akan berpengaruh setelah memulai kembali aplikasi pfennig. &Unit to show amounts in: @@ -1164,8 +1164,8 @@ Alamat: %4 Pilihan standar unit yang ingin ditampilkan pada layar aplikasi dan saat mengirim koin. - Whether to show Pfennig addresses in the transaction list or not. - Apakah menampilkan alamat-alamat Pfennig dalam daftar transaksi atau tidak. + Whether to show pfennig addresses in the transaction list or not. + Apakah menampilkan alamat-alamat pfennig dalam daftar transaksi atau tidak. &Display addresses in transaction list @@ -1219,8 +1219,8 @@ Alamat: %4 Formulir - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig ketika sebuah hubungan terbentuk, namun proses ini belum selesai. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig ketika sebuah hubungan terbentuk, namun proses ini belum selesai. Wallet @@ -1274,8 +1274,8 @@ Alamat: %4 Penanganan URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI tidak bisa dimengerti! Biasanya oleh karena alamat Pfennig yang tidak sah atau persoalan tentang parameter-parameter URI. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI tidak bisa dimengerti! Biasanya oleh karena alamat pfennig yang tidak sah atau persoalan tentang parameter-parameter URI. Requested payment amount of %1 is too small (considered dust). @@ -1341,8 +1341,8 @@ Alamat: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,12 +1357,12 @@ Alamat: %4 Gagal: Gabungan -regtest dan -testnet salah - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Masukkan alamat Pfennig (cth. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Masukkan alamat pfennig (cth. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,16 +1483,16 @@ Alamat: %4 Berkas catatan debug - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Buka berkas catatan debug Pfennig dari direktori data sekarang. Hal ini dapat memakan waktu beberapa detik untuk berkas catatan yang besar. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Buka berkas catatan debug pfennig dari direktori data sekarang. Hal ini dapat memakan waktu beberapa detik untuk berkas catatan yang besar. Clear console Bersihkan konsol - Welcome to the Pfennig RPC console. - Selamat datang ke konsol RPC Pfennig. + Welcome to the pfennig RPC console. + Selamat datang ke konsol RPC pfennig. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1554,7 +1554,7 @@ Alamat: %4 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 Pfennig network. + 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 pfennig network. @@ -1867,8 +1867,8 @@ Alamat: %4 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 Pfennig address - Awas: Alamat Pfennig tidak sah + Warning: Invalid pfennig address + Awas: Alamat pfennig tidak sah (no label) @@ -1954,7 +1954,7 @@ Alamat: %4 Masukkan label untuk alamat ini untuk dimasukan dalam daftar alamat yang pernah digunakan - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1973,8 +1973,8 @@ Alamat: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig Core sementara dimatikan... + pfennig Core is shutting down... + pfennig Core sementara dimatikan... Do not shut down the computer until this window disappears. @@ -2028,8 +2028,8 @@ Alamat: %4 Salin tanda tangan terpilih ke sistem klipboard - Sign the message to prove you own this Pfennig address - Tandai pesan untuk menyetujui kamu pemiliki alamat Pfennig ini + Sign the message to prove you own this pfennig address + Tandai pesan untuk menyetujui kamu pemiliki alamat pfennig ini Sign &Message @@ -2056,7 +2056,7 @@ Alamat: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2068,8 +2068,8 @@ Alamat: %4 Hapus semua bidang verifikasi pesan - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Masukkan alamat Pfennig (cth. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Masukkan alamat pfennig (cth. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2127,12 +2127,12 @@ Alamat: %4 SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core The Bitcoin Core Developers - Pembangun Pfennig Core + Pembangun pfennig Core [testnet] @@ -2622,8 +2622,8 @@ Alamat: %4 Tentukan direktori data - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Menerima hubungan pada <port> (standar: P2PPORT atau testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Menerima hubungan pada <port> (standar: 40002 atau testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2650,7 +2650,7 @@ Alamat: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2658,7 +2658,7 @@ Alamat: %4 Menerima perintah baris perintah dan JSON-RPC - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2683,7 +2683,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2757,8 +2757,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. - Tidak bisa mengikat dengan %s di computer ini. Kemungkinan Pfennig Core sudah mulai. + Unable to bind to %s on this computer. pfennig Core is probably already running. + Tidak bisa mengikat dengan %s di computer ini. Kemungkinan pfennig Core sudah mulai. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2769,8 +2769,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 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 Pfennig will not work properly. - Perhatian: Mohon diperiksa pengaturan tanggal dan waktu komputer anda apakah sudah benar! Jika pengaturan waktu salah aplikasi Pfennig tidak akan berjalan dengan tepat. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Perhatian: Mohon diperiksa pengaturan tanggal dan waktu komputer anda apakah sudah benar! Jika pengaturan waktu salah aplikasi pfennig tidak akan berjalan dengan tepat. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2805,8 +2805,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Coba memulihkan kunci-kunci pribadi dari wallet.dat yang rusak - Pfennig Core Daemon - Daemon Pfennig Core + pfennig Core Daemon + Daemon pfennig Core Block creation options: @@ -2825,7 +2825,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Hubungkan melalui proxy SOCKS - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3049,8 +3049,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Impor blok dari eksternal berkas blk000???.dat - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - Tidak bisa mengunci data directory %s. Kemungkinan Pfennig Core sudah mulai. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + Tidak bisa mengunci data directory %s. Kemungkinan pfennig 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) @@ -3113,7 +3113,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3133,11 +3133,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Pilihan SSL: (petunjuk pengaturan SSL lihat dalam Pfennig Wiki) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Pilihan SSL: (petunjuk pengaturan SSL lihat dalam pfennig Wiki) - Send command to Pfennig Core + Send command to pfennig Core @@ -3173,8 +3173,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Menetapkan waktu berakhir koneksi di milidetik (biasanya: 5000) - Start Pfennig Core Daemon - Memulai Pfennig Core Daemon + Start pfennig Core Daemon + Memulai pfennig Core Daemon System error: @@ -3289,12 +3289,12 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Gagal memuat wallet.dat: Dompet rusak - Error loading wallet.dat: Wallet requires newer version of Pfennig - Gagal memuat wallet.dat: Dompet memerlukan versi Pfennig yang terbaru + Error loading wallet.dat: Wallet requires newer version of pfennig + Gagal memuat wallet.dat: Dompet memerlukan versi pfennig yang terbaru - Wallet needed to be rewritten: restart Pfennig to complete - Dompet diperlukan untuk disimpan-ulang: nyala-ulangkan Pfennig untuk menyelesaikan + Wallet needed to be rewritten: restart pfennig to complete + Dompet diperlukan untuk disimpan-ulang: nyala-ulangkan pfennig untuk menyelesaikan Error loading wallet.dat diff --git a/src/qt/locale/bitmark_id_ID.ts~ b/src/qt/locale/bitmark_id_ID.ts~ new file mode 100644 index 0000000..7dd3a62 --- /dev/null +++ b/src/qt/locale/bitmark_id_ID.ts~ @@ -0,0 +1,3380 @@ + + + AboutDialog + + About GameCredits Core + Mengenai GameCredits Core + + + <b>GameCredits Core</b> version + versi <b>GameCredits 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 Bitcoin Core Developers + Pembangun GameCredits 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 GameCredits 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 GameCredits. + + + These are your GameCredits 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 GameCreditsS</b>! + Perhatian: Jika anda mengenkripsi dompet anda dan lupa kata kuncinya, anda pasti <b>KEHILANGAN SELURUH GameCredits 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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits akan menutup untuk menyelesaikan proses enkripsi. Ingat bahwa dengan mengenkripsi dompet Anda tidak sepenuhnya melindungi gamecredits 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. + + + + GameCreditsGUI + + 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 GameCredits + Tampilkan informasi mengenai GameCredits + + + 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 GameCredits address + Kirim koin ke alamat GameCredits + + + Modify configuration options for GameCredits + Ubah pilihan konfigurasi untuk GameCredits + + + 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... + + + GameCredits + GameCredits + + + 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 GameCredits addresses to prove you own them + Tandalah pesanan dengan alamat-alamat GameCredits Anda supaya membuktikan pesanan itu dikirim oleh Anda + + + Verify messages to ensure they were signed with specified GameCredits addresses + Periksakan pesan-pesan supaya menjaminkan ditandatangani oleh alamat GameCredits yang terperinci + + + &File + &Berkas + + + &Settings + &Pengaturan + + + &Help + &Bantuan + + + Tabs toolbar + Baris tab + + + [testnet] + [testnet] + + + GameCredits Core + GameCredits Core + + + Request payments (generates QR codes and gamecredits: URIs) + Permintaan pembayaran (membangkitkan kode QR dan gamecredits: URIs) + + + &About GameCredits Core + &Mengenai GameCredits 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 gamecredits: URI or payment request + Buka URI gamecredits: atau permintaan pembayaran + + + &Command-line options + &pilihan Perintah-baris + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Tampilkan pesan bantuan GameCredits Core untuk memberikan daftar pilihan perintah-baris yang memungkinkan dalam aplikasi GameCredits + + + GameCredits client + Klien GameCredits + + + %n active connection(s) to GameCredits network + %n hubungan aktif ke jaringan GameCredits + + + 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. GameCredits can no longer continue safely and will quit. + Terjadi kesalahan fatal. GameCredits 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 GameCredits address. + Alamat yang dimasukkan "%1" bukan alamat GameCredits 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 + + GameCredits Core - Command-line options + GameCredits Core - pilihan Perintah-baris + + + GameCredits Core + GameCredits 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 GameCredits Core. + Selamat Datang ke GameCredits Core + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Menyalakan GameCredits secara otomatis setelah masuk ke dalam sistem. + + + &Start GameCredits on system login + &Menyalakan GameCredits pada login sistem + + + Size of &database cache + + + + MB + MB + + + Number of script &verification threads + + + + Connect to the GameCredits network through a SOCKS proxy. + Menghubungkan jaringan GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Otomatis membuka port client GameCredits 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 GameCredits. + Tampilan bahasa pengguna dapat diatur disini. Pengaturan ini akan berpengaruh setelah memulai kembali aplikasi GameCredits. + + + &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 GameCredits addresses in the transaction list or not. + Apakah menampilkan alamat-alamat GameCredits 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 GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + URI tidak bisa dimengerti! Biasanya oleh karena alamat GameCredits 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 gamecredits: 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 + + GameCredits + GameCredits + + + 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 + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Masukkan alamat GameCredits (cth. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Buka berkas catatan debug GameCredits dari direktori data sekarang. Hal ini dapat memakan waktu beberapa detik untuk berkas catatan yang besar. + + + Clear console + Bersihkan konsol + + + Welcome to the GameCredits RPC console. + Selamat datang ke konsol RPC GameCredits. + + + 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 GameCredits 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 GameCredits address + Awas: Alamat GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Alamat pembayaran (cth. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + Permintaan pembayaran tidak terverifikasi. + + + Pay To: + Kirim Ke: + + + Memo: + Catatan Peringatan: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Alamat yang akan ditandai pesan (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Tandai pesan untuk menyetujui kamu pemiliki alamat GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + Verifikasi &Pesan + + + Reset all verify message fields + Hapus semua bidang verifikasi pesan + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Masukkan alamat GameCredits (cth. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + GameCredits Core + + + The Bitcoin Core Developers + Pembangun GameCredits 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 + + + + gamecredits-core + + Usage: + Penggunaan: + + + List commands + Daftar perintah + + + Get help for a command + Dapatkan bantuan untuk perintah + + + Options: + Pilihan: + + + Specify configuration file (default: gamecredits.conf) + Tentukan berkas konfigurasi (standar: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Tentukan berkas pid (standar: gamecreditsd.pid) + + + Specify data directory + Tentukan direktori data + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Menerima hubungan pada <port> (standar: 40002 atau testnet: 50001) + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + Menerima perintah baris perintah dan JSON-RPC + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits Core is probably already running. + Tidak bisa mengikat dengan %s di computer ini. Kemungkinan GameCredits 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 GameCredits will not work properly. + Perhatian: Mohon diperiksa pengaturan tanggal dan waktu komputer anda apakah sudah benar! Jika pengaturan waktu salah aplikasi GameCredits 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 + + + GameCredits Core Daemon + Daemon GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits Core is probably already running. + Tidak bisa mengunci data directory %s. Kemungkinan GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + Pilihan SSL: (petunjuk pengaturan SSL lihat dalam GameCredits Wiki) + + + Send command to GameCredits 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 GameCredits Core Daemon + Memulai GameCredits 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 GameCredits + Gagal memuat wallet.dat: Dompet memerlukan versi GameCredits yang terbaru + + + Wallet needed to be rewritten: restart GameCredits to complete + Dompet diperlukan untuk disimpan-ulang: nyala-ulangkan GameCredits 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/bitmark_it.ts b/src/qt/locale/bitmark_it.ts index b05dbf9..a246123 100644 --- a/src/qt/locale/bitmark_it.ts +++ b/src/qt/locale/bitmark_it.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Info su Pfennig Core + About pfennig Core + Info su pfennig Core - <b>Pfennig Core</b> version - Versione <b>Pfennig Core</b> + <b>pfennig Core</b> version + Versione <b>pfennig Core</b> @@ -29,7 +29,7 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso The Bitcoin Core Developers - Gli sviluppatori del Pfennig Core + Gli sviluppatori del pfennig Core (%1-bit) @@ -103,11 +103,11 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso Indirizzi di ricezione - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. Questo è un elenco di indirizzi pfennig a cui puoi inviare pagamenti. Controlla sempre l'importo e l'indirizzo del beneficiario prima di inviare pfennig. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. Questi sono i tuoi indirizzi pfennig che puoi usare per ricevere pagamenti. Si raccomanda di generare un nuovo indirizzo per ogni transazione. @@ -205,8 +205,8 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso Conferma la cifratura del portamonete - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Attenzione: se si cifra il portamonete e si perde la passphrase <b>TUTTI I PROPRI Pfennig ANDRANNO PERSI</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Attenzione: se si cifra il portamonete e si perde la passphrase <b>TUTTI I PROPRI pfennig ANDRANNO PERSI</b>! Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso Portamonete cifrato - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig 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. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig 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 @@ -258,7 +258,7 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso - PfennigGUI + pfennigGUI Sign &message... Firma il &messaggio... @@ -296,8 +296,8 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso Chiudi applicazione - Show information about Pfennig - Mostra informazioni su Pfennig + Show information about pfennig + Mostra informazioni su pfennig About &Qt @@ -344,11 +344,11 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso Re-indicizzazione blocchi su disco... - Send coins to a Pfennig address + Send coins to a pfennig address Invia monete ad un indirizzo pfennig - Modify configuration options for Pfennig + Modify configuration options for pfennig Modifica opzioni di configurazione per pfennig @@ -372,8 +372,8 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso &Verifica messaggio... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,11 +400,11 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso Cifra le chiavi private che appartengono al tuo portamonete - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them Firma i messaggi con il tuo indirizzo pfennig per dimostrarne il possesso - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses Verifica i messaggi per accertare che siano stati firmati con gli indirizzi pfennig specificati @@ -428,16 +428,16 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso [testnet] - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core Request payments (generates QR codes and pfennig: URIs) Richiedi pagamenti (genera codici QR e pfennig: URI) - &About Pfennig Core - Info su Pfennig Core + &About pfennig Core + Info su pfennig Core Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ Questo prodotto include software sviluppato dal progetto OpenSSL per l'uso Opzioni riga di &comando - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Mostra il messaggio di aiuto di Pfennig Core per avere la lista di tutte le opzioni della riga di comando di Pfennig. + Show the pfennig Core help message to get a list with possible pfennig command-line options + Mostra il messaggio di aiuto di pfennig Core per avere la lista di tutte le opzioni della riga di comando di pfennig. - Pfennig client - Pfennig client + pfennig client + pfennig client - %n active connection(s) to Pfennig network - %n connessione attiva alla rete Pfennig%n connessioni attive alla rete Pfennig + %n active connection(s) to pfennig network + %n connessione attiva alla rete pfennig%n connessioni attive alla rete pfennig No block source available... @@ -561,8 +561,8 @@ Indirizzo: %4 Il portamonete è <b>cifrato</b> ed attualmente <b>bloccato</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Riscontrato un errore irreversibile. Pfennig non può più continuare in sicurezza e sarà terminato. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Riscontrato un errore irreversibile. pfennig non può più continuare in sicurezza e sarà terminato. @@ -846,7 +846,7 @@ Indirizzo: %4 L'indirizzo inserito "%1" è già in rubrica. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. L'indirizzo inserito "%1" non è un indirizzo pfennig valido. @@ -884,12 +884,12 @@ Indirizzo: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core - Opzioni riga di comando + pfennig Core - Command-line options + pfennig Core - Opzioni riga di comando - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core version @@ -935,16 +935,16 @@ Indirizzo: %4 Benvenuto - Welcome to Pfennig Core. - Benvenuti su Pfennig Core. + Welcome to pfennig Core. + Benvenuti su pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Visto che questa è la prima volta che il programma viene lanciato, puoi scegliere dove Pfennig Core salverà i propri dati. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Visto che questa è la prima volta che il programma viene lanciato, puoi scegliere dove pfennig Core salverà i propri dati. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig Core scaricherà e salverà una copia del block chain di Pfennig. Almeno %1GB di dati che andranno ad aumentare col tempo saranno salvati in questa cartella. Anche il portamonete sarà salvato in questa cartella. + pfennig Core will download and store a copy of the pfennig 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. + pfennig Core scaricherà e salverà una copia del block chain di pfennig. 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 @@ -955,8 +955,8 @@ Indirizzo: %4 Usa una cartella dati personalizzata: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1017,12 +1017,12 @@ Indirizzo: %4 Paga la &commissione - Automatically start Pfennig after logging in to the system. - Avvia automaticamente Pfennig una volta effettuato l'accesso al sistema. + Automatically start pfennig after logging in to the system. + Avvia automaticamente pfennig una volta effettuato l'accesso al sistema. - &Start Pfennig on system login - &Avvia Pfennig all'accesso al sistema + &Start pfennig on system login + &Avvia pfennig all'accesso al sistema Size of &database cache @@ -1037,8 +1037,8 @@ Indirizzo: %4 Numero di thread di &verifica degli script - Connect to the Pfennig network through a SOCKS proxy. - Connessione alla rete Pfennig attraverso un proxy SOCKS. + Connect to the pfennig network through a SOCKS proxy. + Connessione alla rete pfennig attraverso un proxy SOCKS. &Connect through SOCKS proxy (default proxy): @@ -1098,8 +1098,8 @@ Più URL vengono separati da una barra verticale |. %Spendere resti non confermati - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Apri automaticamente la porta del client Pfennig sul router. Il protocollo UPnP deve essere supportato da parte del router ed attivo. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Apri automaticamente la porta del client pfennig sul router. Il protocollo UPnP deve essere supportato da parte del router ed attivo. Map port using &UPnP @@ -1154,8 +1154,8 @@ Più URL vengono separati da una barra verticale |. &Lingua Interfaccia Utente: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - La lingua dell'interfaccia utente può essere impostata qui. L'impostazione avrà effetto dopo il riavvio di Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + La lingua dell'interfaccia utente può essere impostata qui. L'impostazione avrà effetto dopo il riavvio di pfennig. &Unit to show amounts in: @@ -1166,7 +1166,7 @@ Più URL vengono separati da una barra verticale |. Scegli l'unità di suddivisione predefinita da utilizzare per l'interfaccia e per l'invio di monete. - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. Specifica se gli indirizzi saranno visualizzati nella lista delle transazioni. @@ -1221,8 +1221,8 @@ Più URL vengono separati da una barra verticale |. Modulo - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig network after a connection is established, but this process has not completed yet. - Le informazioni visualizzate potrebbero non essere aggiornate. Il portamonete si sincronizza automaticamente con la rete Pfennig una volta stabilita una connessione, ma questo processo non è ancora stato completato. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig network after a connection is established, but this process has not completed yet. + Le informazioni visualizzate potrebbero non essere aggiornate. Il portamonete si sincronizza automaticamente con la rete pfennig una volta stabilita una connessione, ma questo processo non è ancora stato completato. Wallet @@ -1276,8 +1276,8 @@ Più URL vengono separati da una barra verticale |. Gestione URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - Impossibile interpretare l'URI! Ciò può essere provocato da un indirizzo Pfennig non valido o da parametri URI non corretti. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + Impossibile interpretare l'URI! Ciò può essere provocato da un indirizzo pfennig non valido o da parametri URI non corretti. Requested payment amount of %1 is too small (considered dust). @@ -1343,8 +1343,8 @@ Più URL vengono separati da una barra verticale |. QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1359,12 +1359,12 @@ Più URL vengono separati da una barra verticale |. Errore: combinazione di -regtest e -testnet non valida. - Pfennig Core didn't yet exit safely... - Pfennig Core non si è ancora chiuso con sicurezza... + pfennig Core didn't yet exit safely... + pfennig Core non si è ancora chiuso con sicurezza... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Inserisci un indirizzo Pfennig (ad esempio bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Inserisci un indirizzo pfennig (ad esempio bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1485,16 +1485,16 @@ Più URL vengono separati da una barra verticale |. File log del Debug - Open the Pfennig 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 Pfennig dalla cartella attuale. Può richiedere alcuni secondi per file di log grandi. + Open the pfennig 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 pfennig dalla cartella attuale. Può richiedere alcuni secondi per file di log grandi. Clear console Cancella console - Welcome to the Pfennig RPC console. - Benvenuto nella console RPC di Pfennig + Welcome to the pfennig RPC console. + Benvenuto nella console RPC di pfennig Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1556,8 +1556,8 @@ Più URL vengono separati da una barra verticale |. 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 Pfennig 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 Pfennig. + 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 pfennig 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 pfennig. An optional label to associate with the new receiving address. @@ -1706,7 +1706,7 @@ Più URL vengono separati da una barra verticale |. SendCoinsDialog Send Coins - Invia Pfennig + Invia pfennig Coin Control Features @@ -1869,8 +1869,8 @@ Più URL vengono separati da una barra verticale |. La transazione è stata rifiutata! Questo può accadere se alcuni pfennig nel tuo portamonete sono già stati spesi, ad esempio se hai utilizzato una copia del file wallet.dat per spendere pfennig e questi non sono stati considerati spesi dal portamonete corrente. - Warning: Invalid Pfennig address - Attenzione: Indirizzo Pfennig non valido + Warning: Invalid pfennig address + Attenzione: Indirizzo pfennig non valido (no label) @@ -1956,8 +1956,8 @@ Più URL vengono separati da una barra verticale |. Inserisci un'etichetta per questo indirizzo per aggiungerlo alla lista degli indirizzi utilizzati - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. - Messaggio incluso nel pfennig URI e che sarà memorizzato con la transazione per vostro riferimento. Nota: Questo messaggio non sarà inviato attraverso la rete Pfennig. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. + Messaggio incluso nel pfennig URI e che sarà memorizzato con la transazione per vostro riferimento. Nota: Questo messaggio non sarà inviato attraverso la rete pfennig. This is an unverified payment request. @@ -1975,8 +1975,8 @@ Più URL vengono separati da una barra verticale |. ShutdownWindow - Pfennig Core is shutting down... - Arresto di Pfennig Core in corso... + pfennig Core is shutting down... + Arresto di pfennig Core in corso... Do not shut down the computer until this window disappears. @@ -2030,7 +2030,7 @@ Più URL vengono separati da una barra verticale |. Copia la firma corrente nella clipboard - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address Firma un messaggio per dimostrare di possedere questo indirizzo @@ -2058,7 +2058,7 @@ Più URL vengono separati da una barra verticale |. L'indirizzo con cui è stato firmato il messaggio (ad esempio bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address Verifica il messaggio per accertare che sia stato firmato con l'indirizzo specificato @@ -2070,8 +2070,8 @@ Più URL vengono separati da una barra verticale |. Reimposta tutti i campi della verifica messaggio - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Inserisci un indirizzo Pfennig (ad esempio bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Inserisci un indirizzo pfennig (ad esempio bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2129,12 +2129,12 @@ Più URL vengono separati da una barra verticale |. SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core The Bitcoin Core Developers - Gli sviluppatori del Pfennig Core + Gli sviluppatori del pfennig Core [testnet] @@ -2555,7 +2555,7 @@ Più URL vengono separati da una barra verticale |. WalletModel Send Coins - Invia Pfennig + Invia pfennig @@ -2624,8 +2624,8 @@ Più URL vengono separati da una barra verticale |. Specifica la cartella dati - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Attendi le connessioni su <porta> (predefinita: P2PPORT o testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Attendi le connessioni su <porta> (predefinita: 40002 o testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2652,16 +2652,16 @@ Più URL vengono separati da una barra verticale |. Errore riscontrato durante l'impostazione della porta RPC %u per l'ascolto su IPv4: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Attendi le connessioni JSON-RPC su <porta> (predefinita: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Attendi le connessioni JSON-RPC su <porta> (predefinita: 40001 or testnet: 50000) Accept command line and JSON-RPC commands Accetta comandi da riga di comando e JSON-RPC - Pfennig Core RPC client version - Versione client RPC di Pfennig Core + pfennig Core RPC client version + Versione client RPC di pfennig Core Run in the background as a daemon and accept commands @@ -2685,7 +2685,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, devi impostare una rpcpassword nel file di configurazione: %s @@ -2696,7 +2696,7 @@ rpcpassword=%s 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 Pfennig" admin@foo.com +ad esempio: alertnotify=echo %%s | mail -s "Allarme pfennig" admin@foo.com @@ -2768,8 +2768,8 @@ ad esempio: alertnotify=echo %%s | mail -s "Allarme Pfennig" admin@foo 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. Pfennig Core is probably already running. - Impossibile associarsi a %s su questo computer. Probabilmente Pfennig Core è già in esecuzione. + Unable to bind to %s on this computer. pfennig Core is probably already running. + Impossibile associarsi a %s su questo computer. Probabilmente pfennig Core è già in esecuzione. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2780,8 +2780,8 @@ ad esempio: alertnotify=echo %%s | mail -s "Allarme Pfennig" admin@foo Attenzione: -paytxfee è molto alta. Questa è la commissione che si paga quando si invia una transazione. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Attenzione: si prega di controllare che la data e l'ora del computer siano corrette. Se l'ora di sistema è errata Pfennig non funzionerà correttamente. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Attenzione: si prega di controllare che la data e l'ora del computer siano corrette. Se l'ora di sistema è errata pfennig non funzionerà correttamente. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2816,8 +2816,8 @@ ad esempio: alertnotify=echo %%s | mail -s "Allarme Pfennig" admin@foo Tenta di recuperare le chiavi private da un wallet.dat corrotto - Pfennig Core Daemon - Pfennig Core Daemon + pfennig Core Daemon + pfennig Core Daemon Block creation options: @@ -2836,8 +2836,8 @@ ad esempio: alertnotify=echo %%s | mail -s "Allarme Pfennig" admin@foo Connetti attraverso SOCKS proxy - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Connetti al JSON-RPC su <port> (predefinita: RPCPORT o testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Connetti al JSON-RPC su <port> (predefinita: 40001 o testnet: 50000) Connection options: @@ -2957,7 +2957,7 @@ ad esempio: alertnotify=echo %%s | mail -s "Allarme Pfennig" admin@foo Generate coins (default: 0) - Genera Pfennig (predefinito: 0) + Genera pfennig (predefinito: 0) How many blocks to check at startup (default: 288, 0 = all) @@ -3060,8 +3060,8 @@ ad esempio: alertnotify=echo %%s | mail -s "Allarme Pfennig" admin@foo Importa blocchi da un file blk000??.dat esterno - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - Non è possibile ottenere un lock sulla cartella %s. Probabilmente Pfennig Core è già in esecuzione. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + Non è possibile ottenere un lock sulla cartella %s. Probabilmente pfennig 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) @@ -3124,8 +3124,8 @@ ad esempio: alertnotify=echo %%s | mail -s "Allarme Pfennig" admin@foo Stampa l'albero dei blocchi all'avvio (default: 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) - Opzioni RPC SSL: (consulta la Pfennig Wiki per le istruzioni relative alla configurazione SSL) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) + Opzioni RPC SSL: (consulta la pfennig Wiki per le istruzioni relative alla configurazione SSL) RPC server options: @@ -3144,12 +3144,12 @@ ad esempio: alertnotify=echo %%s | mail -s "Allarme Pfennig" admin@foo Mantieni in esecuzione un thread per scaricare periodicamente il portafoglio (predefinito: 1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Opzioni SSL: (vedi il wiki di Pfennig per le istruzioni di configurazione SSL) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Opzioni SSL: (vedi il wiki di pfennig per le istruzioni di configurazione SSL) - Send command to Pfennig Core - Invia comando a Pfennig Core + Send command to pfennig Core + Invia comando a pfennig Core Send trace/debug info to console instead of debug.log file @@ -3184,8 +3184,8 @@ ad esempio: alertnotify=echo %%s | mail -s "Allarme Pfennig" admin@foo Specifica il timeout di connessione in millisecondi (predefinito: 5000) - Start Pfennig Core Daemon - Avvia Pfennig Core Daemon + Start pfennig Core Daemon + Avvia pfennig Core Daemon System error: @@ -3306,12 +3306,12 @@ ad esempio: alertnotify=echo %%s | mail -s "Allarme Pfennig" admin@foo Errore caricamento wallet.dat: Portamonete corrotto - Error loading wallet.dat: Wallet requires newer version of Pfennig - Errore caricamento wallet.dat: il portamonete richiede una versione di Pfennig più recente + Error loading wallet.dat: Wallet requires newer version of pfennig + Errore caricamento wallet.dat: il portamonete richiede una versione di pfennig più recente - Wallet needed to be rewritten: restart Pfennig to complete - Il portamonete necessitava di essere riscritto: riavviare Pfennig per completare + Wallet needed to be rewritten: restart pfennig to complete + Il portamonete necessitava di essere riscritto: riavviare pfennig per completare Error loading wallet.dat diff --git a/src/qt/locale/bitmark_it.ts~ b/src/qt/locale/bitmark_it.ts~ new file mode 100644 index 0000000..80253cd --- /dev/null +++ b/src/qt/locale/bitmark_it.ts~ @@ -0,0 +1,3397 @@ + + + AboutDialog + + About GameCredits Core + Info su GameCredits Core + + + <b>GameCredits Core</b> version + Versione <b>GameCredits 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. + +Questo è un software sperimentale. + +Distribuito sotto la licenza software MIT/X11, vedi il file COPYING incluso oppure su http://www.opensource.org/licenses/mit-license.php. + +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 Bitcoin Core Developers + Gli sviluppatori del GameCredits Core + + + (%1-bit) + (%1-bit) + + + + AddressBookPage + + Double-click to edit address or label + 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 negli appunti + + + &Copy + &Copia + + + C&lose + C&hiudi + + + &Copy Address + &Copia l'indirizzo + + + 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 su file i dati della tabella corrente + + + &Export + &Esporta + + + &Delete + &Cancella + + + Choose the address to send coins to + Scegli l'indirizzo a cui inviare gamecredits + + + Choose the address to receive coins with + Scegli l'indirizzo con cui ricevere gamecredits + + + C&hoose + Sc&egli + + + Sending addresses + Indirizzi d'invio + + + Receiving addresses + Indirizzi di ricezione + + + These are your GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Questo è un elenco di indirizzi gamecredits a cui puoi inviare pagamenti. Controlla sempre l'importo e l'indirizzo del beneficiario prima di inviare gamecredits. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Questi sono i tuoi indirizzi gamecredits che puoi usare per ricevere pagamenti. Si raccomanda di generare un nuovo indirizzo per ogni transazione. + + + Copy &Label + Copia &l'etichetta + + + &Edit + &Modifica + + + Export Address List + Esporta Lista Indirizzi + + + Comma separated file (*.csv) + Testo CSV (*.csv) + + + Exporting Failed + Esportazione Fallita. + + + 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) + + + + AskPassphraseDialog + + Passphrase Dialog + Finestra passphrase + + + Enter passphrase + Inserisci la passphrase + + + New passphrase + Nuova passphrase + + + Repeat new 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 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 GameCreditsS</b>! + Attenzione: se si cifra il portamonete e si perde la passphrase <b>TUTTI I PROPRI GameCredits 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 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: il tasto Blocco maiuscole è attivo! + + + Wallet encrypted + Portamonete cifrato + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits 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. + + + + GameCreditsGUI + + Sign &message... + Firma il &messaggio... + + + Synchronizing with network... + 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 + Mostra la cronologia delle transazioni + + + E&xit + &Esci + + + Quit application + Chiudi applicazione + + + Show information about GameCredits + Mostra informazioni su GameCredits + + + 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... + + + &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 GameCredits address + Invia monete ad un indirizzo gamecredits + + + Modify configuration options for GameCredits + Modifica opzioni di configurazione per gamecredits + + + Backup wallet to another location + Effettua il backup del portamonete + + + Change the passphrase used for wallet encryption + Cambia la passphrase utilizzata per la cifratura del portamonete + + + &Debug window + Finestra &Debug + + + Open debugging and diagnostic console + Apri la console di debugging e diagnostica + + + &Verify message... + &Verifica messaggio... + + + GameCredits + GameCredits + + + Wallet + Portamonete + + + &Send + &Invia + + + &Receive + &Ricevi + + + &Show / Hide + &Mostra / Nascondi + + + Show or hide the main Window + Mostra o nascondi la Finestra principale + + + Encrypt the private keys that belong to your wallet + Cifra le chiavi private che appartengono al tuo portamonete + + + Sign messages with your GameCredits addresses to prove you own them + Firma i messaggi con il tuo indirizzo gamecredits per dimostrarne il possesso + + + Verify messages to ensure they were signed with specified GameCredits addresses + Verifica i messaggi per accertare che siano stati firmati con gli indirizzi gamecredits specificati + + + &File + &File + + + &Settings + &Impostazioni + + + &Help + &Aiuto + + + Tabs toolbar + Barra degli strumenti "Tabs" + + + [testnet] + [testnet] + + + GameCredits Core + GameCredits Core + + + Request payments (generates QR codes and gamecredits: URIs) + Richiedi pagamenti (genera codici QR e gamecredits: URI) + + + &About GameCredits Core + Info su GameCredits 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 gamecredits: URI or payment request + Apri un URI o una richiesta di pagamento + + + &Command-line options + Opzioni riga di &comando + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Mostra il messaggio di aiuto di GameCredits Core per avere la lista di tutte le opzioni della riga di comando di GameCredits. + + + GameCredits client + GameCredits client + + + %n active connection(s) to GameCredits network + %n connessione attiva alla rete GameCredits%n connessioni attive alla rete GameCredits + + + No block source available... + Nessuna fonte di blocchi disponibile + + + Processed %1 of %2 (estimated) blocks of transaction history. + 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 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 + Informazioni + + + Up to date + Aggiornato + + + Catching up... + In aggiornamento... + + + Sent transaction + Transazione inviata + + + Incoming transaction + Transazione ricevuta + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Data: %1 +Quantità: %2 +Tipo: %3 +Indirizzo: %4 + + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</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> ed attualmente <b>bloccato</b> + + + A fatal error occurred. GameCredits can no longer continue safely and will quit. + Riscontrato un errore irreversibile. GameCredits 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 + + + + 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 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 + + + 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 GameCredits address. + L'indirizzo inserito "%1" non è un indirizzo gamecredits valido. + + + Could not unlock wallet. + Impossibile sbloccare il portamonete. + + + New key generation failed. + Generazione della nuova chiave non riuscita. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + GameCredits Core - Opzioni riga di comando + + + GameCredits Core + GameCredits 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 + 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 (predefinito: 1) + + + Choose data directory on startup (default: 0) + Scegli una cartella dati all'avvio (predefinito: 0) + + + + Intro + + Welcome + Benvenuto + + + Welcome to GameCredits Core. + Benvenuti su GameCredits Core. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Visto che questa è la prima volta che il programma viene lanciato, puoi scegliere dove GameCredits Core salverà i propri dati. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits Core scaricherà e salverà una copia del block chain di GameCredits. 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: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Avvia automaticamente GameCredits una volta effettuato l'accesso al sistema. + + + &Start GameCredits on system login + &Avvia GameCredits 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 GameCredits network through a SOCKS proxy. + Connessione alla rete GameCredits 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. + 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Apri automaticamente la porta del client GameCredits sul router. Il protocollo UPnP deve essere supportato da parte del router ed attivo. + + + Map port using &UPnP + Mappa le porte tramite &UPnP + + + Proxy &IP: + &IP del proxy: + + + &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 nella tray bar quando si riduce ad icona. + + + &Minimize to the tray instead of the taskbar + &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. 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 GameCredits. + La lingua dell'interfaccia utente può essere impostata qui. L'impostazione avrà effetto dopo il riavvio di GameCredits. + + + &Unit to show amounts 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 predefinita da utilizzare per l'interfaccia e per l'invio di monete. + + + Whether to show GameCredits addresses in the transaction list or not. + 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 + + + default + predefinito + + + none + nessuno + + + Confirm options reset + Conferma ripristino opzioni + + + Client restart required to activate changes. + È necessario un riavvio del client per rendere attivi i cambiamenti. + + + Client will be shutdown, do you want to proceed? + Il client sarà arrestato, vuoi procedere? + + + This change would require a client restart. + Questo cambiamento richiede un riavvio del client. + + + The supplied proxy address is invalid. + L'indirizzo proxy che hai fornito è invalido. + + + + OverviewPage + + Form + Modulo + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits network after a connection is established, but this process has not completed yet. + Le informazioni visualizzate potrebbero non essere aggiornate. Il portamonete si sincronizza automaticamente con la rete GameCredits una volta stabilita una connessione, ma questo processo non è ancora stato completato. + + + 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 generato dal mining e non ancora maturato + + + Total: + Totale: + + + Your current total balance + Saldo totale attuale + + + <b>Recent transactions</b> + <b>Transazioni recenti</b> + + + out of sync + non sincronizzato + + + + PaymentServer + + URI handling + Gestione URI + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + Impossibile interpretare l'URI! Ciò può essere provocato da un indirizzo GameCredits 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 gamecredits: click-to-pay handler + Impossibile avviare gamecredits: 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 + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Errore: La cartella dati "%1" specificata non esiste. + + + 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. + + + Error: Invalid combination of -regtest and -testnet. + Errore: combinazione di -regtest e -testnet non valida. + + + GameCredits Core didn't yet exit safely... + GameCredits Core non si è ancora chiuso con sicurezza... + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Inserisci un indirizzo GameCredits (ad esempio bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + &Salva Immagine + + + &Copy Image + &Copia Immagine + + + Save QR Code + Salva codice QR + + + PNG Image (*.png) + Immagine PNG (*.png) + + + + RPCConsole + + Client name + Nome del client + + + N/A + N/D + + + Client version + Versione client + + + &Information + &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 di connessioni + + + Block chain + Block chain + + + Current number of blocks + Numero attuale di blocchi + + + Estimated total blocks + Numero totale stimato di blocchi + + + Last block time + Ora del blocco più recente + + + &Open + &Apri + + + &Console + &Console + + + &Network Traffic + &Traffico di Rete + + + &Clear + &Cancella + + + Totals + Totali + + + In: + Entrata: + + + Out: + Uscita: + + + Build date + Data di creazione + + + Debug log file + File log del Debug + + + Open the GameCredits 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 GameCredits dalla cartella attuale. Può richiedere alcuni secondi per file di log grandi. + + + Clear console + Cancella console + + + Welcome to the GameCredits RPC console. + Benvenuto nella console RPC di GameCredits + + + Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. + 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 GameCredits 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 GameCredits. + + + 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 + Invia GameCredits + + + 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 gamecredits generato appositamente. + + + Custom change address + Personalizza indirizzo di resto + + + Send to multiple recipients at once + Invia a diversi beneficiari in una volta sola + + + Add &Recipient + &Aggiungi beneficiario + + + Clear all fields of the form. + Cancellare tutti i campi del modulo. + + + Clear &All + Cancella &tutto + + + Balance: + Saldo: + + + Confirm the send action + Conferma l'azione di invio + + + S&end + &Invia + + + Confirm send coins + Conferma l'invio di gamecredits + + + %1 to %2 + %1 a %2 + + + 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, 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 tuo saldo attuale + + + The total exceeds your balance when the %1 transaction fee is included. + 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. + Rilevato un indirizzo duplicato, è possibile inviare gamecredits una sola volta agli indirizzi durante un'operazione di invio. + + + Transaction creation failed! + Creazione transazione fallita! + + + 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 gamecredits nel tuo portamonete sono già stati spesi, ad esempio se hai utilizzato una copia del file wallet.dat per spendere gamecredits e questi non sono stati considerati spesi dal portamonete corrente. + + + Warning: Invalid GameCredits address + Attenzione: Indirizzo GameCredits 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 + + A&mount: + &Importo: + + + Pay &To: + Paga &a: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + L'indirizzo del beneficiario a cui inviare il pagamento (ad esempio bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + Rimuovi questa voce + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + Messaggio incluso nel gamecredits URI e che sarà memorizzato con la transazione per vostro riferimento. Nota: Questo messaggio non sarà inviato attraverso la rete GameCredits. + + + This is an unverified payment request. + Questa è una richiesta di pagamento non verificata. + + + Pay To: + Pagare a: + + + Memo: + Memo: + + + + ShutdownWindow + + GameCredits Core is shutting down... + Arresto di GameCredits 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 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + L'indirizzo con cui firmare il messaggio (ad esempio bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Choose previously used address + Scegli un indirizzo usato precedentemente + + + Alt+A + Alt+A + + + Paste address from clipboard + 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 GameCredits address + Firma un messaggio per dimostrare di possedere questo indirizzo + + + Sign &Message + Firma &Messaggio + + + Reset all sign message fields + 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + L'indirizzo con cui è stato firmato il messaggio (ad esempio bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Verifica il messaggio per accertare che sia stato firmato con l'indirizzo specificato + + + Verify &Message + Verifica &Messaggio + + + Reset all verify message fields + Reimposta tutti i campi della verifica messaggio + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Inserisci un indirizzo GameCredits (ad esempio bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Clicca "Firma il messaggio" per ottenere la firma + + + 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 gamecredits inserito non è associato a nessuna chiave. + + + Wallet unlock was cancelled. + 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 digest del messaggio. + + + Message verification failed. + Verifica messaggio fallita. + + + Message verified. + Messaggio verificato. + + + + SplashScreen + + GameCredits Core + GameCredits Core + + + The Bitcoin Core Developers + Gli sviluppatori del GameCredits 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 tra %n bloccomatura tra %n blocchi + + + not accepted + non accettate + + + Debit + Debito + + + Transaction fee + Commissione transazione + + + Net amount + Importo netto + + + Message + Messaggio + + + Comment + Commento + + + Transaction ID + ID della transazione + + + 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 gamecredits 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 + + + + TransactionDescDialog + + Transaction details + Dettagli sulla transazione + + + This pane shows a detailed description of the transaction + Questo pannello mostra una descrizione dettagliata della transazione + + + + 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 + + + Confirmed (%1 confirmations) + Confermato (%1 conferme) + + + This block was not received by any other nodes and will probably not be accepted! + 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 + 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 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. + + + + 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 + Inviato a + + + To yourself + 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 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 + + + Range: + Intervallo: + + + to + a + + + + WalletFrame + + No wallet has been loaded. + Non è stato caricato alcun portamonete. + + + + WalletModel + + Send Coins + Invia GameCredits + + + + WalletView + + &Export + &Esporta + + + Export the data in the current tab to a file + Esporta su file i dati della tabella corrente + + + Backup Wallet + Backup Portamonete + + + Wallet Data (*.dat) + Dati Portamonete (*.dat) + + + Backup Failed + Backup Fallito + + + 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 + + + + gamecredits-core + + Usage: + Utilizzo: + + + List commands + Elenca comandi + + + Get help for a command + Aiuto su un comando + + + Options: + Opzioni: + + + Specify configuration file (default: gamecredits.conf) + Specifica il file di configurazione (predefinito: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Specifica il file pid (predefinito: gamecreditsd.pid) + + + Specify data directory + Specifica la cartella dati + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Attendi le connessioni su <porta> (predefinita: 40002 o testnet: 50001) + + + Maintain at most <n> connections to peers (default: 125) + Mantieni al massimo <n> connessioni ai peer (predefinite: 125) + + + Connect to a node to retrieve peer addresses, and disconnect + 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à (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 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: 40001 or testnet: 50000) + Attendi le connessioni JSON-RPC su <porta> (predefinita: 40001 or testnet: 50000) + + + Accept command line and JSON-RPC commands + Accetta comandi da riga di comando e JSON-RPC + + + GameCredits Core RPC client version + Versione client RPC di GameCredits Core + + + Run in the background as a daemon and accept commands + Esegui in background come demone ed accetta i comandi + + + Use the test network + Utilizza la rete di prova + + + Accept connections from outside (default: 1 if no -proxy or -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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, devi impostare una rpcpassword nel file di configurazione: +%s +Si raccomanda l'uso della seguente password generata casualmente: +rpcuser=gamecreditsrpc +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 GameCredits" 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 + Associa all'indirizzo indicato e resta permanentemente in ascolto su questo. Usa la notazione [host]:porta per l'IPv6 + + + 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! Questo può accadere se alcuni gamecredits nel tuo portamonete sono già stati spesi, ad esempio se hai utilizzato una copia del file wallet.dat per spendere gamecredits 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 wallet transaction changes (%s in cmd is replaced by TxID) + Esegui comando quando una transazione del portamonete cambia (%s in cmd è sostituito da TxID) + + + 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. GameCredits Core is probably already running. + Impossibile associarsi a %s su questo computer. Probabilmente GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Attenzione: si prega di controllare che la data e l'ora del computer siano corrette. Se l'ora di sistema è errata GameCredits 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 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 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 + + + GameCredits Core Daemon + GameCredits 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: 40001 or testnet: 50000) + Connetti al JSON-RPC su <port> (predefinita: 40001 o testnet: 50000) + + + Connection options: + Opzioni di connessione: + + + Corrupted block database detected + Rilevato database blocchi corrotto + + + 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 è insufficiente! + + + Error: Wallet locked, unable to create transaction! + 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. + 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 gamecredits 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 a meno che non si usi -connect) + + + Force safe mode (default: 0) + Forza modalità provvisoria (predefinito: 0) + + + Generate coins (default: 0) + Genera GameCredits (predefinito: 0) + + + How many blocks to check at startup (default: 288, 0 = all) + Numero di blocchi da controllare all'avvio (predefinito: 288, 0 = tutti) + + + 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 gamecredits-cli): + Usage (deprecato, usare gamecredits-cli): + + + Verifying blocks... + Verifica blocchi... + + + Verifying wallet... + 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 + + + Cannot obtain a lock on data directory %s. GameCredits Core is probably already running. + Non è possibile ottenere un lock sulla cartella %s. Probabilmente GameCredits 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 + Informazioni + + + 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 (predefinito: 5000) + + + Maximum per-connection send buffer, <n>*1000 bytes (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) + + + Print block on startup, if found in block index + Stampa il blocco all'avvio, se presente nell'indice dei blocchi + + + Print block tree on startup (default: 0) + Stampa l'albero dei blocchi all'avvio (default: 0) + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + Opzioni RPC SSL: (consulta la GameCredits 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 GameCredits Wiki for SSL setup instructions) + Opzioni SSL: (vedi il wiki di GameCredits per le istruzioni di configurazione SSL) + + + Send command to GameCredits Core + Invia comando a GameCredits 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 + + + Set minimum block size in bytes (default: 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 (predefinito: 5000) + + + Start GameCredits Core Daemon + Avvia GameCredits 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) + Usa UPnP per mappare la porta in ascolto (predefinito: 0) + + + Use UPnP to map the listening port (default: 1 when listening) + Usa UPnP per mappare la porta in ascolto (predefinito: 1 when listening) + + + 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! + + + 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, 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> (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 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 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 + + + + Use OpenSSL (https) for JSON-RPC connections + Utilizzare OpenSSL (https) per le connessioni JSON-RPC + + + + Server certificate file (default: server.cert) + File certificato del server (predefinito: server.cert) + + + Server private key (default: server.pem) + Chiave privata del server (predefinito: server.pem) + + + This help message + Questo messaggio di aiuto + + + + Unable to bind to %s on this computer (bind returned error %d, %s) + Impossibile associarsi alla %s su questo computer (bind returned error %d, %s) + + + Allow DNS lookups for -addnode, -seednode and -connect + Consenti ricerche DNS per -addnode, -seednode e -connect + + + Loading addresses... + Caricamento indirizzi... + + + Error loading wallet.dat: Wallet corrupted + Errore caricamento wallet.dat: Portamonete corrotto + + + Error loading wallet.dat: Wallet requires newer version of GameCredits + Errore caricamento wallet.dat: il portamonete richiede una versione di GameCredits più recente + + + Wallet needed to be rewritten: restart GameCredits to complete + Il portamonete necessitava di essere riscritto: riavviare GameCredits 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 + Aggiunge un nodo a cui connettersi e tenta di tenere aperta la connessione + + + Loading wallet... + Caricamento portamonete... + + + Cannot downgrade wallet + Non è possibile effettuare il downgrade del portamonete + + + Cannot write default address + Non è possibile scrivere l'indirizzo predefinito + + + Rescanning... + Ripetizione scansione... + + + Done loading + Caricamento completato + + + To use the %s option + 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 assegnando i permessi di lettura solamente al proprietario. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_ja.ts b/src/qt/locale/bitmark_ja.ts index c0ccde1..dfe4d06 100644 --- a/src/qt/locale/bitmark_ja.ts +++ b/src/qt/locale/bitmark_ja.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version <b>ビットコインコア</b> バージョン @@ -103,11 +103,11 @@ MIT/X11 ソフトウェア ライセンスの下で配布されています。 アドレス受信中 - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - これらは支払いを送信するためのあなたの Pfennig アドレスです。コインを送信する前に、常に額と受信アドレスを確認してください。 + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + これらは支払いを送信するためのあなたの pfennig アドレスです。コインを送信する前に、常に額と受信アドレスを確認してください。 - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -205,8 +205,8 @@ MIT/X11 ソフトウェア ライセンスの下で配布されています。 ウォレットの暗号化を確認する - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - 警告: もしもあなたのウォレットを暗号化してパスフレーズを失ってしまったなら、<b>あなたの Pfennig はすべて失われます</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + 警告: もしもあなたのウォレットを暗号化してパスフレーズを失ってしまったなら、<b>あなたの pfennig はすべて失われます</b>! Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ MIT/X11 ソフトウェア ライセンスの下で配布されています。 ウォレットは暗号化されました - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig は暗号化プロセスを終了するために今すぐ終了します。あなたのコンピュータがマルウェアに感染してコインを盗まれることもあるので、暗号化してもあなたのウォレットを完全に保護できないことを覚えていてください。 + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig は暗号化プロセスを終了するために今すぐ終了します。あなたのコンピュータがマルウェアに感染してコインを盗まれることもあるので、暗号化してもあなたのウォレットを完全に保護できないことを覚えていてください。 Wallet encryption failed @@ -258,7 +258,7 @@ MIT/X11 ソフトウェア ライセンスの下で配布されています。 - PfennigGUI + pfennigGUI Sign &message... メッセージの署名... (&m) @@ -296,8 +296,8 @@ MIT/X11 ソフトウェア ライセンスの下で配布されています。 アプリケーションを終了 - Show information about Pfennig - Pfennigに関する情報を見る + Show information about pfennig + pfennigに関する情報を見る About &Qt @@ -344,12 +344,12 @@ MIT/X11 ソフトウェア ライセンスの下で配布されています。 ディスク上のブロックのインデックスを再作成中... - Send coins to a Pfennig address - Pfennig アドレスにコインを送る + Send coins to a pfennig address + pfennig アドレスにコインを送る - Modify configuration options for Pfennig - Pfennig の設定を変更する + Modify configuration options for pfennig + pfennig の設定を変更する Backup wallet to another location @@ -372,8 +372,8 @@ MIT/X11 ソフトウェア ライセンスの下で配布されています。 メッセージの検証... (&V) - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ MIT/X11 ソフトウェア ライセンスの下で配布されています。 あなたのウォレットの秘密鍵を暗号化します - Sign messages with your Pfennig addresses to prove you own them - あなたが所有していることを証明するために、あなたの Pfennig アドレスでメッセージに署名してください + Sign messages with your pfennig addresses to prove you own them + あなたが所有していることを証明するために、あなたの pfennig アドレスでメッセージに署名してください - Verify messages to ensure they were signed with specified Pfennig addresses - 指定された Pfennig アドレスで署名されたことを確認するためにメッセージを検証します + Verify messages to ensure they were signed with specified pfennig addresses + 指定された pfennig アドレスで署名されたことを確認するためにメッセージを検証します &File @@ -428,15 +428,15 @@ MIT/X11 ソフトウェア ライセンスの下で配布されています。 [testnet] - Pfennig Core - Pfennig のコア + pfennig Core + pfennig のコア Request payments (generates QR codes and pfennig: URIs) - &About Pfennig Core + &About pfennig Core ビットコインコアについて (&A) @@ -456,16 +456,16 @@ MIT/X11 ソフトウェア ライセンスの下で配布されています。 コマンドラインオプション (&C) - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Pfennig クライアント + pfennig client + pfennig クライアント - %n active connection(s) to Pfennig network - %n の Pfennig ネットワークへのアクティブな接続 + %n active connection(s) to pfennig network + %n の pfennig ネットワークへのアクティブな接続 No block source available... @@ -559,8 +559,8 @@ Address: %4 ウォレットは<b>暗号化されて、ロックされています</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - 致命的なエラーが発生しました。Pfennig は安全に継続することができず終了するでしょう。 + A fatal error occurred. pfennig can no longer continue safely and will quit. + 致命的なエラーが発生しました。pfennig は安全に継続することができず終了するでしょう。 @@ -845,8 +845,8 @@ Address: %4 入力されたアドレス "%1" は既にアドレス帳にあります。 - The entered address "%1" is not a valid Pfennig address. - 入力されたアドレス "%1" は無効な Pfennig アドレスです。 + The entered address "%1" is not a valid pfennig address. + 入力されたアドレス "%1" は無効な pfennig アドレスです。 Could not unlock wallet. @@ -883,12 +883,12 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Pfennig のコア + pfennig Core + pfennig のコア version @@ -934,15 +934,15 @@ Address: %4 ようこそ - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -954,8 +954,8 @@ Address: %4 任意のデータ ディレクトリを使用: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,12 +1016,12 @@ Address: %4 支払う取引手数料 (&f) - Automatically start Pfennig after logging in to the system. - システムにログインした時に自動的に Pfennig を起動します。 + Automatically start pfennig after logging in to the system. + システムにログインした時に自動的に pfennig を起動します。 - &Start Pfennig on system login - システムにログインした時に Pfennig を起動 (&S) + &Start pfennig on system login + システムにログインした時に pfennig を起動 (&S) Size of &database cache @@ -1036,7 +1036,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1096,8 +1096,8 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - 自動的にルーター上の Pfennig クライアントのポートを開きます。あなたのルーターが UPnP に対応していて、それが有効になっている場合に作動します。 + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + 自動的にルーター上の pfennig クライアントのポートを開きます。あなたのルーターが UPnP に対応していて、それが有効になっている場合に作動します。 Map port using &UPnP @@ -1152,8 +1152,8 @@ Address: %4 ユーザインターフェースの言語 (&l) : - The user interface language can be set here. This setting will take effect after restarting Pfennig. - ここでユーザインターフェースの言語を設定できます。設定を反映するには Pfennig を再起動します。 + The user interface language can be set here. This setting will take effect after restarting pfennig. + ここでユーザインターフェースの言語を設定できます。設定を反映するには pfennig を再起動します。 &Unit to show amounts in: @@ -1164,8 +1164,8 @@ Address: %4 インターフェース上の表示とコインの送信で使用する単位を選択します。 - Whether to show Pfennig addresses in the transaction list or not. - 最近の取引履歴で Pfennig アドレスを表示するかしないか。 + Whether to show pfennig addresses in the transaction list or not. + 最近の取引履歴で pfennig アドレスを表示するかしないか。 &Display addresses in transaction list @@ -1219,8 +1219,8 @@ Address: %4 フォーム - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig network after a connection is established, but this process has not completed yet. - 表示された情報は古いかもしれません。接続が確立されると、あなたのウォレットは Pfennig ネットワークと自動的に同期しますが、このプロセスはまだ完了していません。 + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig network after a connection is established, but this process has not completed yet. + 表示された情報は古いかもしれません。接続が確立されると、あなたのウォレットは pfennig ネットワークと自動的に同期しますが、このプロセスはまだ完了していません。 Wallet @@ -1274,8 +1274,8 @@ Address: %4 URI の操作 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI を解析できません! これは無効な Pfennig アドレスあるいや不正な形式の URI パラメーターによって引き起こされる場合があります。 + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI を解析できません! これは無効な pfennig アドレスあるいや不正な形式の URI パラメーターによって引き起こされる場合があります。 @@ -1288,7 +1288,7 @@ Address: %4 Cannot start pfennig: click-to-pay handler - Pfennig を起動できません: click-to-pay handler + pfennig を起動できません: click-to-pay handler Net manager warning @@ -1342,8 +1342,8 @@ Address: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1358,12 +1358,12 @@ Address: %4 エラー: -regtestと-testnetは一緒にするのは無効です。 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Pfennig アドレスを入力します (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + pfennig アドレスを入力します (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1484,16 +1484,16 @@ Address: %4 デバッグ用ログファイル - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - 現在のデータ ディレクトリから Pfennig のデバッグ用ログファイルを開きます。ログファイルが大規模な場合には数秒かかることがあります。 + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + 現在のデータ ディレクトリから pfennig のデバッグ用ログファイルを開きます。ログファイルが大規模な場合には数秒かかることがあります。 Clear console コンソールをクリア - Welcome to the Pfennig RPC console. - Pfennig RPC コンソールへようこそ。 + Welcome to the pfennig RPC console. + pfennig RPC コンソールへようこそ。 Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1555,7 +1555,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1868,7 +1868,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1955,7 +1955,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1974,7 +1974,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2029,8 +2029,8 @@ Address: %4 現在の署名をシステムのクリップボードにコピーする - Sign the message to prove you own this Pfennig address - この Pfennig アドレスを所有していることを証明するためにメッセージに署名 + Sign the message to prove you own this pfennig address + この pfennig アドレスを所有していることを証明するためにメッセージに署名 Sign &Message @@ -2057,8 +2057,8 @@ Address: %4 メッセージが署名されたアドレス (例 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - 指定された Pfennig アドレスで署名されたことを保証するメッセージを検証 + Verify the message to ensure it was signed with the specified pfennig address + 指定された pfennig アドレスで署名されたことを保証するメッセージを検証 Verify &Message @@ -2069,8 +2069,8 @@ Address: %4 入力項目の内容をすべて消去します - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Pfennig アドレスを入力します (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + pfennig アドレスを入力します (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2128,8 +2128,8 @@ Address: %4 SplashScreen - Pfennig Core - Pfennig のコア + pfennig Core + pfennig のコア The Bitcoin Core Developers @@ -2623,8 +2623,8 @@ Address: %4 データ ディレクトリの指定 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - 接続のポート番号 (初期値: P2PPORT、testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + 接続のポート番号 (初期値: 40002、testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2651,15 +2651,15 @@ Address: %4 IPv4 でリスンする RPC ポート %u の設定中にエラーが発生しました: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - <port> で JSON-RPC 接続をリスン (初期値: RPCPORT、testnet は 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + <port> で JSON-RPC 接続をリスン (初期値: 40001、testnet は 50000) Accept command line and JSON-RPC commands コマンドラインと JSON-RPC コマンドを許可 - Pfennig Core RPC client version + pfennig Core RPC client version ビットコインコアRPCクライアントのバージョン @@ -2684,7 +2684,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, rpcpassword を設定ファイルで設定してください: %s @@ -2695,7 +2695,7 @@ rpcpassword=%s ユーザー名とパスワードが同じであってはいけません。 もしもファイルが存在しないなら、所有者だけが読み取れる権限で作成してください。 また、問題が通知されるように alertnotify を設定することをお勧めします; -例えば: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com +例えば: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -2766,7 +2766,7 @@ rpcpassword=%s これはリリース前のテストビルドです - 各自の責任で利用すること - 採掘や商取引に使用しないでください - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2778,8 +2778,8 @@ rpcpassword=%s 警告: -paytxfee が非常に高く設定されています! これは取引を送信する場合に支払う取引手数料です。 - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - 警告: あなたのコンピュータの日時が正しいことを確認してください! 時計が間違っていると Pfennig は正常に動作しません。 + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + 警告: あなたのコンピュータの日時が正しいことを確認してください! 時計が間違っていると pfennig は正常に動作しません。 Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2814,7 +2814,7 @@ rpcpassword=%s 壊れた wallet.dat から秘密鍵を復旧することを試す - Pfennig Core Daemon + pfennig Core Daemon @@ -2834,7 +2834,7 @@ rpcpassword=%s SOCKS プロキシ経由で接続する - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3059,7 +3059,7 @@ rpcpassword=%s 外部の blk000??.dat ファイルからブロックをインポート - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3123,7 +3123,7 @@ rpcpassword=%s - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) RPC SSL オプション: (SSLのセットアップ手順はビットコインWikiを参照してください) @@ -3143,11 +3143,11 @@ rpcpassword=%s - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL オプション: (SSLのセットアップ手順は Pfennig Wiki をご覧下さい) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL オプション: (SSLのセットアップ手順は pfennig Wiki をご覧下さい) - Send command to Pfennig Core + Send command to pfennig Core @@ -3183,7 +3183,7 @@ rpcpassword=%s 接続のタイムアウトをミリセコンドで指定 (初期値: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3299,12 +3299,12 @@ rpcpassword=%s wallet.dat 読み込みエラー: ウォレットが壊れました - Error loading wallet.dat: Wallet requires newer version of Pfennig - wallet.dat 読み込みエラー: ウォレットは Pfennig の最新バージョンを必要とします + Error loading wallet.dat: Wallet requires newer version of pfennig + wallet.dat 読み込みエラー: ウォレットは pfennig の最新バージョンを必要とします - Wallet needed to be rewritten: restart Pfennig to complete - ウォレットが書き直される必要がありました: 完了するために Pfennig を再起動します + Wallet needed to be rewritten: restart pfennig to complete + ウォレットが書き直される必要がありました: 完了するために pfennig を再起動します Error loading wallet.dat diff --git a/src/qt/locale/bitmark_ja.ts~ b/src/qt/locale/bitmark_ja.ts~ new file mode 100644 index 0000000..0843a3d --- /dev/null +++ b/src/qt/locale/bitmark_ja.ts~ @@ -0,0 +1,3390 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin Core Developers + ビットコインコアの開発者 + + + (%1-bit) + + + + + 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) + + + C&lose + 閉じる(&C) + + + &Copy Address + アドレスをコピー (&C) + + + Delete the currently selected address from the list + 選択されたアドレスを一覧から削除する + + + Export the data in the current tab to a file + ファイルに現在のタブのデータをエクスポート + + + &Export + エクスポート (&E) + + + &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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + これらは支払いを送信するためのあなたの GameCredits アドレスです。コインを送信する前に、常に額と受信アドレスを確認してください。 + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + ラベルをコピー (&L) + + + &Edit + 編集 (&E) + + + Export Address List + アドレス帳をエクスポート + + + Comma separated file (*.csv) + 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>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 GameCreditsS</b>! + 警告: もしもあなたのウォレットを暗号化してパスフレーズを失ってしまったなら、<b>あなたの GameCredits はすべて失われます</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 + ウォレットは暗号化されました + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits は暗号化プロセスを終了するために今すぐ終了します。あなたのコンピュータがマルウェアに感染してコインを盗まれることもあるので、暗号化してもあなたのウォレットを完全に保護できないことを覚えていてください。 + + + 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. + ウォレットのパスフレーズの変更が成功しました。 + + + + GameCreditsGUI + + Sign &message... + メッセージの署名... (&m) + + + Synchronizing with network... + ネットワークに同期中…… + + + &Overview + 概要(&O) + + + Node + ノード + + + Show general overview of wallet + ウォレットの概要を見る + + + &Transactions + 取引(&T) + + + Browse transaction history + 取引履歴を閲覧 + + + E&xit + 終了(&E) + + + Quit application + アプリケーションを終了 + + + Show information about GameCredits + GameCreditsに関する情報を見る + + + About &Qt + Qt について(&Q) + + + Show information about Qt + Qt の情報を表示 + + + &Options... + オプション... (&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 GameCredits address + GameCredits アドレスにコインを送る + + + Modify configuration options for GameCredits + GameCredits の設定を変更する + + + Backup wallet to another location + ウォレットを他の場所にバックアップ + + + Change the passphrase used for wallet encryption + ウォレット暗号化用パスフレーズの変更 + + + &Debug window + デバッグ ウインドウ (&D) + + + Open debugging and diagnostic console + デバッグと診断コンソールを開く + + + &Verify message... + メッセージの検証... (&V) + + + GameCredits + GameCredits + + + 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 GameCredits addresses to prove you own them + あなたが所有していることを証明するために、あなたの GameCredits アドレスでメッセージに署名してください + + + Verify messages to ensure they were signed with specified GameCredits addresses + 指定された GameCredits アドレスで署名されたことを確認するためにメッセージを検証します + + + &File + ファイル(&F) + + + &Settings + 設定(&S) + + + &Help + ヘルプ(&H) + + + Tabs toolbar + タブツールバー + + + [testnet] + [testnet] + + + GameCredits Core + GameCredits のコア + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + ビットコインコアについて (&A) + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + 支払いを受け取るアドレスとラベルのリストを表示する + + + Open a gamecredits: URI or payment request + + + + &Command-line options + コマンドラインオプション (&C) + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + GameCredits クライアント + + + %n active connection(s) to GameCredits network + %n の GameCredits ネットワークへのアクティブな接続 + + + 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> + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + ウォレットは<b>暗号化されて、ロックされています</b> + + + A fatal error occurred. GameCredits can no longer continue safely and will quit. + 致命的なエラーが発生しました。GameCredits は安全に継続することができず終了するでしょう。 + + + + + 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 list entry + + + + 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 GameCredits address. + 入力されたアドレス "%1" は無効な GameCredits アドレスです。 + + + Could not unlock wallet. + ウォレットをアンロックできませんでした。 + + + New key generation failed. + 新しいキーの生成に失敗しました。 + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + GameCredits のコア + + + 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + 任意のデータ ディレクトリを使用: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + システムにログインした時に自動的に GameCredits を起動します。 + + + &Start GameCredits on system login + システムにログインした時に GameCredits を起動 (&S) + + + Size of &database cache + データベースキャッシュのサイズ (&D) + + + MB + MB + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + 自動的にルーター上の GameCredits クライアントのポートを開きます。あなたのルーターが 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 GameCredits. + ここでユーザインターフェースの言語を設定できます。設定を反映するには GameCredits を再起動します。 + + + &Unit to show amounts in: + 額を表示する単位 (&U) : + + + Choose the default subdivision unit to show in the interface and when sending coins. + インターフェース上の表示とコインの送信で使用する単位を選択します。 + + + Whether to show GameCredits addresses in the transaction list or not. + 最近の取引履歴で GameCredits アドレスを表示するかしないか。 + + + &Display addresses in transaction list + 取引履歴にアドレスを表示 (&D) + + + Whether to show coin control features or not. + + + + &OK + &OK + + + &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 GameCredits network after a connection is established, but this process has not completed yet. + 表示された情報は古いかもしれません。接続が確立されると、あなたのウォレットは GameCredits ネットワークと自動的に同期しますが、このプロセスはまだ完了していません。 + + + 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 GameCredits address or malformed URI parameters. + URI を解析できません! これは無効な GameCredits アドレスあるいや不正な形式の URI パラメーターによって引き起こされる場合があります。 + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + 支払いのリクエストのエラーです + + + Cannot start gamecredits: click-to-pay handler + GameCredits を起動できません: 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 + ネットワーク・リクエストのエラーです + + + + QObject + + GameCredits + GameCredits + + + 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は一緒にするのは無効です。 + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + GameCredits アドレスを入力します (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + 画像を保存(&S) + + + &Copy Image + 画像をコピー(&C) + + + Save QR Code + QR コードの保存 + + + 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 + 接続数 + + + Block chain + ブロック チェーン + + + Current number of blocks + 現在のブロック数 + + + Estimated total blocks + 推定総ブロック数 + + + Last block time + 最終ブロックの日時 + + + &Open + 開く (&O) + + + &Console + コンソール (&C) + + + &Network Traffic + ネットワーク (&N) + + + &Clear + クリア(&C) + + + Totals + 合計 + + + In: + 入力: + + + Out: + 出力: + + + Build date + ビルドの日付 + + + Debug log file + デバッグ用ログファイル + + + Open the GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + 現在のデータ ディレクトリから GameCredits のデバッグ用ログファイルを開きます。ログファイルが大規模な場合には数秒かかることがあります。 + + + Clear console + コンソールをクリア + + + Welcome to the GameCredits RPC console. + GameCredits 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. + + + + 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 GameCredits 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. + + + + Clear &All + すべてクリア (&A) + + + Balance: + 残高: + + + Confirm the send action + 送る操作を確認する + + + S&end + 送る (&e) + + + 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. + %1 の取引手数料を含めると額が残高を超えています。 + + + Duplicate address found, can only send to each address once per send operation. + 重複しているアドレスが見つかりました。1回の送信で同じアドレスに送ることは出来ません。 + + + 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 GameCredits 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: + 金額(&A): + + + Pay &To: + 送り先(&T): + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 支払い送信するアドレス (例 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Enter a label for this address to add it to your address book + アドレス帳に追加するには、このアドレスのラベルを入力します + + + &Label: + ラベル(&L): + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + 支払先: + + + Memo: + メモ: + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + メッセージの署名に使うアドレス (例 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + この GameCredits アドレスを所有していることを証明するためにメッセージに署名 + + + 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + メッセージが署名されたアドレス (例 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + 指定された GameCredits アドレスで署名されたことを保証するメッセージを検証 + + + Verify &Message + メッセージの検証 (&M) + + + Reset all verify message fields + 入力項目の内容をすべて消去します + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + GameCredits アドレスを入力します (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + GameCredits のコア + + + The Bitcoin 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. + + + + 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 を開く + + + 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. + トランザクション履歴を %1 へ保存する際にエラーが発生しました。 + + + Exporting Successful + エクスポートに成功しました + + + The transaction history was successfully saved to %1. + + + + Comma separated file (*.csv) + テキスト CSV (*.csv) + + + Confirmed + 検証済み + + + Date + 日付 + + + Type + タイプ + + + Label + ラベル + + + Address + Helbidea + + + Amount + 総額 + + + ID + ID + + + 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. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + バックアップ成功 + + + + gamecredits-core + + Usage: + 使用法: + + + List commands + コマンド一覧 + + + Get help for a command + コマンドのヘルプ + + + Options: + オプション: + + + Specify configuration file (default: gamecredits.conf) + 設定ファイルの指定 (初期値: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + pid ファイルの指定 (初期値: gamecreditsd.pid) + + + Specify data directory + データ ディレクトリの指定 + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + 接続のポート番号 (初期値: 40002、testnet: 50001) + + + 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: 40001 or testnet: 50000) + <port> で JSON-RPC 接続をリスン (初期値: 40001、testnet は 50000) + + + Accept command line and JSON-RPC commands + コマンドラインと JSON-RPC コマンドを許可 + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, rpcpassword を設定ファイルで設定してください: +%s +下記のランダムなパスワードの使用を推奨します: +rpcuser=gamecreditsrpc +rpcpassword=%s +(このパスワードを覚える必要はありません) +ユーザー名とパスワードが同じであってはいけません。 +もしもファイルが存在しないなら、所有者だけが読み取れる権限で作成してください。 +また、問題が通知されるように alertnotify を設定することをお勧めします; +例えば: alertnotify=echo %%s | mail -s "GameCredits 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) + + + + 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) + ウォレットの取引を変更する際にコマンドを実行 (cmd の %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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + 警告: あなたのコンピュータの日時が正しいことを確認してください! 時計が間違っていると GameCredits は正常に動作しません。 + + + 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 から秘密鍵を復旧することを試す + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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... + + + + 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 gamecredits-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. GameCredits 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 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 + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + RPC SSL オプション: (SSLのセットアップ手順はビットコインWikiを参照してください) + + + 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 GameCredits Wiki for SSL setup instructions) + SSL オプション: (SSLのセットアップ手順は GameCredits Wiki をご覧下さい) + + + Send command to GameCredits 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 ファイルを縮小 (初期値: -debug オプションを指定しない場合は1) + + + Signing transaction failed + 取引の署名に失敗しました + + + Specify connection timeout in milliseconds (default: 5000) + 接続のタイムアウトをミリセコンドで指定 (初期値: 5000) + + + Start GameCredits 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) + + + 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) + 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) + + + 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 GameCredits + wallet.dat 読み込みエラー: ウォレットは GameCredits の最新バージョンを必要とします + + + Wallet needed to be rewritten: restart GameCredits to complete + ウォレットが書き直される必要がありました: 完了するために GameCredits を再起動します + + + 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 +ファイルが無い場合は、オーナーだけが読み取れる権限でファイルを作成してください。 + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_ka.ts b/src/qt/locale/bitmark_ka.ts index 7fa8372..d0e5a41 100644 --- a/src/qt/locale/bitmark_ka.ts +++ b/src/qt/locale/bitmark_ka.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Pfennig Core-ს შესახებ + About pfennig Core + pfennig Core-ს შესახებ - <b>Pfennig Core</b> version - <b>Pfennig Core</b>-ს ვერსია + <b>pfennig Core</b> version + <b>pfennig Core</b>-ს ვერსია @@ -29,7 +29,7 @@ This product includes software developed by the OpenSSL Project for use in the O The Bitcoin Core Developers - Pfennig Core-ს ავტორები + pfennig Core-ს ავტორები (%1-bit) @@ -103,12 +103,12 @@ This product includes software developed by the OpenSSL Project for use in the O მიღების მისამართი - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - ეს არის თქვენი Pfennig-მისამართები გადახდების შესასრულებლად. მონეტების გაგზავნამდე ყოველთვის შეამოწმეთ თანხა და მიმღების მისამართი. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + ეს არის თქვენი pfennig-მისამართები გადახდების შესასრულებლად. მონეტების გაგზავნამდე ყოველთვის შეამოწმეთ თანხა და მიმღების მისამართი. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - ეს არის თქვენი Pfennig-მისამართები გადახდების მისაღებად. რეკომენდებულია ყოველი ტრანსაქციისათვის ახალი მიღების მისამართის გამოყენება. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + ეს არის თქვენი pfennig-მისამართები გადახდების მისაღებად. რეკომენდებულია ყოველი ტრანსაქციისათვის ახალი მიღების მისამართის გამოყენება. Copy &Label @@ -205,7 +205,7 @@ This product includes software developed by the OpenSSL Project for use in the O დაადასტურეთ საფულის დაშიფრვა - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! ყურადღება: საფულის დაშიფრვის შემდეგ თუ თქვენ დაკარგავთ ფრაზა-პაროლს, <b>ყველა ბიტქოინი დაგეკარგებათ</b>! @@ -225,8 +225,8 @@ This product includes software developed by the OpenSSL Project for use in the O საფულე დაშიფრულია - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - ახლა Pfennig დაიხურება დაშიფრვის პროცესის დასასრულებლად. გაითვალისწინეთ, რომ დაშიფრვა სრულად ვერ დაიცავს თქვენს ბითქოინებს თქვენს კომპიუტერში შემოპარული მავნე პროგრამების საშუალებით დატაცებისაგან. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + ახლა pfennig დაიხურება დაშიფრვის პროცესის დასასრულებლად. გაითვალისწინეთ, რომ დაშიფრვა სრულად ვერ დაიცავს თქვენს ბითქოინებს თქვენს კომპიუტერში შემოპარული მავნე პროგრამების საშუალებით დატაცებისაგან. Wallet encryption failed @@ -258,7 +258,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... ხელ&მოწერა @@ -296,8 +296,8 @@ This product includes software developed by the OpenSSL Project for use in the O გასვლა - Show information about Pfennig - ინფორმაცია Pfennig-ის შესახებ + Show information about pfennig + ინფორმაცია pfennig-ის შესახებ About &Qt @@ -344,12 +344,12 @@ This product includes software developed by the OpenSSL Project for use in the O დისკზე ბლოკების რეინდექსაცია... - Send coins to a Pfennig address - მონეტების გაგზავნა Pfennig-მისამართზე + Send coins to a pfennig address + მონეტების გაგზავნა pfennig-მისამართზე - Modify configuration options for Pfennig - Pfennig-ის საკონფიგურაციო პარამეტრების ცვლილება + Modify configuration options for pfennig + pfennig-ის საკონფიგურაციო პარამეტრების ცვლილება Backup wallet to another location @@ -372,8 +372,8 @@ This product includes software developed by the OpenSSL Project for use in the O &ვერიფიკაცია - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ This product includes software developed by the OpenSSL Project for use in the O თქვენი საფულის პირადი გასაღებების დაშიფრვა - Sign messages with your Pfennig addresses to prove you own them - მესიჯებზე ხელმოწერა თქვენი Pfennig-მისამართებით იმის დასტურად, რომ ის თქვენია + Sign messages with your pfennig addresses to prove you own them + მესიჯებზე ხელმოწერა თქვენი pfennig-მისამართებით იმის დასტურად, რომ ის თქვენია - Verify messages to ensure they were signed with specified Pfennig addresses - შეამოწმეთ, რომ მესიჯები ხელმოწერილია მითითებული Pfennig-მისამართით + Verify messages to ensure they were signed with specified pfennig addresses + შეამოწმეთ, რომ მესიჯები ხელმოწერილია მითითებული pfennig-მისამართით &File @@ -428,16 +428,16 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core Request payments (generates QR codes and pfennig: URIs) გადახდის მოთხოვნა (შეიქმნება QR-კოდები და pfennig: ბმულები) - &About Pfennig Core - Pfennig Core-ს შეს&ახებ + &About pfennig Core + pfennig Core-ს შეს&ახებ Show the list of used sending addresses and labels @@ -456,15 +456,15 @@ This product includes software developed by the OpenSSL Project for use in the O საკომანდო სტრიქონის ოპ&ციები - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Pfennig Core-ს დახმარების ჩვენება Pfennig-ის საკომანდო სტრიქონის დასაშვები ოპციების სანახავად + Show the pfennig Core help message to get a list with possible pfennig command-line options + pfennig Core-ს დახმარების ჩვენება pfennig-ის საკომანდო სტრიქონის დასაშვები ოპციების სანახავად - Pfennig client - Pfennig-კლიენტი + pfennig client + pfennig-კლიენტი - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network აქტიური მიერთებები ბითქოინის ქსელთან: %n @@ -560,8 +560,8 @@ Address: %4 საფულე <b>დაშიფრულია</b> და ამჟამად <b>დაბლოკილია</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - ფატალური შეცდომა. Pfennig ვერ უზრუნველყოფს უსაფრთხო გაგრძელებას, ამიტომ იხურება. + A fatal error occurred. pfennig can no longer continue safely and will quit. + ფატალური შეცდომა. pfennig ვერ უზრუნველყოფს უსაფრთხო გაგრძელებას, ამიტომ იხურება. @@ -845,8 +845,8 @@ Address: %4 მისამართი "%1" უკვე არის მისამართების წიგნში. - The entered address "%1" is not a valid Pfennig address. - შეყვანილი მისამართი "%1" არ არის ვალიდური Pfennig-მისამართი. + The entered address "%1" is not a valid pfennig address. + შეყვანილი მისამართი "%1" არ არის ვალიდური pfennig-მისამართი. Could not unlock wallet. @@ -883,12 +883,12 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core - საკომანდო სტრიქონის ოპციები + pfennig Core - Command-line options + pfennig Core - საკომანდო სტრიქონის ოპციები - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core version @@ -934,16 +934,16 @@ Address: %4 მოგესალმებით - Welcome to Pfennig Core. - მოგესალმებათ Pfennig Core. + Welcome to pfennig Core. + მოგესალმებათ pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - ეს პროგრამის პირველი გაშვებაა; შეგიძლიათ მიუთითოთ, სად შეინახოს მონაცემები Pfennig Core-მ. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + ეს პროგრამის პირველი გაშვებაა; შეგიძლიათ მიუთითოთ, სად შეინახოს მონაცემები pfennig Core-მ. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig Core გადმოტვირთავს და შეინახავს Pfennig-ის ბლოკთა ჯაჭვს. მითითებულ კატალოგში დაგროვდება სულ ცოტა 1 გბ მონაცემები, და მომავალში უფრო გაიზრდება. საფულეც ამავე კატალოგში შეინახება. + pfennig Core will download and store a copy of the pfennig 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. + pfennig Core გადმოტვირთავს და შეინახავს pfennig-ის ბლოკთა ჯაჭვს. მითითებულ კატალოგში დაგროვდება სულ ცოტა 1 გბ მონაცემები, და მომავალში უფრო გაიზრდება. საფულეც ამავე კატალოგში შეინახება. Use the default data directory @@ -954,8 +954,8 @@ Address: %4 მითითებული კატალოგის გამოყენება: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,11 +1016,11 @@ Address: %4 ტრანსაქციის სა&ფასურის გადახდა - Automatically start Pfennig after logging in to the system. - სისტემაში შესვლის შემდეგ Pfennig-ის ავტომატური გაშვება. + Automatically start pfennig after logging in to the system. + სისტემაში შესვლის შემდეგ pfennig-ის ავტომატური გაშვება. - &Start Pfennig on system login + &Start pfennig on system login &სისტემაში შესვლისას გაშვება @@ -1036,8 +1036,8 @@ Address: %4 სკრიპტის &ვერიფიცირების ნაკადების რაოდენობა - Connect to the Pfennig network through a SOCKS proxy. - Pfennig-ქსელზე მიერთება SOCKS-პროქსით. + Connect to the pfennig network through a SOCKS proxy. + pfennig-ქსელზე მიერთება SOCKS-პროქსით. &Connect through SOCKS proxy (default proxy): @@ -1096,8 +1096,8 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - როუტერში Pfennig-კლიენტის პორტის ავტომატური გახსნა. მუშაობს, თუ თქვენს როუტერს ჩართული აქვს UPnP. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + როუტერში pfennig-კლიენტის პორტის ავტომატური გახსნა. მუშაობს, თუ თქვენს როუტერს ჩართული აქვს UPnP. Map port using &UPnP @@ -1152,8 +1152,8 @@ Address: %4 სამომხმარებ&ლო ენა: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - აქ შეგიძლიათ აირჩიოთ სამომხმარებლო ენა. ძალაში შევა Pfennig-ის რესტარტის შემდეგ. + The user interface language can be set here. This setting will take effect after restarting pfennig. + აქ შეგიძლიათ აირჩიოთ სამომხმარებლო ენა. ძალაში შევა pfennig-ის რესტარტის შემდეგ. &Unit to show amounts in: @@ -1164,8 +1164,8 @@ Address: %4 აირჩიეთ გასაგზავნი თანხის ნაგულისხმევი ერთეული. - Whether to show Pfennig addresses in the transaction list or not. - ტრანსაქციების სიაში იყოს თუ არა ნაჩვენები Pfennig-მისამართები. + Whether to show pfennig addresses in the transaction list or not. + ტრანსაქციების სიაში იყოს თუ არა ნაჩვენები pfennig-მისამართები. &Display addresses in transaction list @@ -1219,8 +1219,8 @@ Address: %4 ფორმა - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig network after a connection is established, but this process has not completed yet. - ნაჩვენები ინფორმაცია შეიძლება მოძველებული იყოს. თქვენი საფულე ავტომატურად სინქრონიზდება Pfennig-ის ქსელთან კავშირის დამყარების შემდეგ, ეს პროცესი ჯერ არ არის დასრულებული. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig network after a connection is established, but this process has not completed yet. + ნაჩვენები ინფორმაცია შეიძლება მოძველებული იყოს. თქვენი საფულე ავტომატურად სინქრონიზდება pfennig-ის ქსელთან კავშირის დამყარების შემდეგ, ეს პროცესი ჯერ არ არის დასრულებული. Wallet @@ -1274,8 +1274,8 @@ Address: %4 URI-ების დამუშავება - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI-ის დამუშავება ვერ მოხერხდა. შესაძლოა არასწორია Pfennig-მისამართი ან URI-ის პარამეტრები. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI-ის დამუშავება ვერ მოხერხდა. შესაძლოა არასწორია pfennig-მისამართი ან URI-ის პარამეტრები. Requested payment amount of %1 is too small (considered dust). @@ -1341,8 +1341,8 @@ Address: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,11 +1357,11 @@ Address: %4 შეცდომა: -regtest-ისა და -testnet-ის დაუშვებელი კომბინაცია. - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) შეიყვანეთ ბიტკოინ-მისამართი (მაგ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,16 +1483,16 @@ Address: %4 დახვეწის ლოგ-ფაილი - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - გახსენით Pfennig-ის დახვეწის ლოგ-ფაილი მიმდინარე კატალოგიდან. დიდი ლოგ-ფაილის შემთხვევაში ამას შეიძლება რამდენიმე წამი მოუნდეს. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + გახსენით pfennig-ის დახვეწის ლოგ-ფაილი მიმდინარე კატალოგიდან. დიდი ლოგ-ფაილის შემთხვევაში ამას შეიძლება რამდენიმე წამი მოუნდეს. Clear console კონსოლის გასუფთავება - Welcome to the Pfennig RPC console. - მოგესალმებათ Pfennig-ის RPC კონსოლი. + Welcome to the pfennig RPC console. + მოგესალმებათ pfennig-ის RPC კონსოლი. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1554,7 +1554,7 @@ Address: %4 ად&რე გამოყენებული მიღების მისამართის გამოყენება (არ არის რეკომენდებული) - 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 Pfennig network. + 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 pfennig network. არააუცილებელი მესიჯი, რომელიც ერთვის გადახდის მოთხოვნას და ნაჩვენები იქნება მოთხოვნის გახსნისას. შენიშვნა: მესიჯი არ გაყვება გადახდას ბითქოინის ქსელში. @@ -1867,8 +1867,8 @@ Address: %4 ტრანსაქცია უარყოფილია! შესაძლოა მონეტების ნაწილი თქვენი საფულიდან უკვე გამოყენებულია, რაც შეიძლება მოხდეს wallet.dat-ის ასლის გამოყენებისას, როცა მონეტები გაიგზავნა სხვა ასლიდან, აქ კი არ არის გაგზავნილად მონიშნული. - Warning: Invalid Pfennig address - ყურადღება: არასწორია Pfennig-მისამართი + Warning: Invalid pfennig address + ყურადღება: არასწორია pfennig-მისამართი (no label) @@ -1954,7 +1954,7 @@ Address: %4 შეიყვანეთ ამ მისამართის ნიშნული გამოყენებული მისამართების სიაში დასამატებლად - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. მესიჯი, რომელიც თან ერთვის მონეტებს: URI, რომელიც შეინახება ტრანსაქციასთან ერთად თქვენთვის. შენიშვნა: მესიჯი არ გაყვება გადახდას ბითქოინის ქსელში. @@ -1973,8 +1973,8 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig Core იხურება... + pfennig Core is shutting down... + pfennig Core იხურება... Do not shut down the computer until this window disappears. @@ -2028,7 +2028,7 @@ Address: %4 მიმდინარე ხელმოწერის კოპირება კლიპბორდში - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address მოაწერეთ ხელი იმის დასადასტურებლად, რომ ეს მისამართი თქვენია @@ -2056,8 +2056,8 @@ Address: %4 მისამართი, რომლითაც ხელმოწერილია მესიჯი (მაგ.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - შეამოწმეთ, რომ მესიჯი ხელმოწერილია მითითებული Pfennig-მისამართით + Verify the message to ensure it was signed with the specified pfennig address + შეამოწმეთ, რომ მესიჯი ხელმოწერილია მითითებული pfennig-მისამართით Verify &Message @@ -2068,7 +2068,7 @@ Address: %4 ვერიფიკაციის ყველა ველის წაშლა - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) შეიყვანეთ ბიტკოინ-მისამართი (მაგ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2127,12 +2127,12 @@ Address: %4 SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core The Bitcoin Core Developers - Pfennig Core-ს ავტორები + pfennig Core-ს ავტორები [testnet] @@ -2622,8 +2622,8 @@ Address: %4 მიუთითეთ მონაცემთა კატალოგი - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - მიყურადება პორტზე <port> (ნაგულისხმევი: P2PPORT ან სატესტო ქსელში: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + მიყურადება პორტზე <port> (ნაგულისხმევი: 40002 ან სატესტო ქსელში: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2650,15 +2650,15 @@ Address: %4 შეცდომა %u RPC-პორტის მიყურადების ჩართვისას IPv4 მისამართზე: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - JSON-RPC-შეერთებების მიყურადება პორტზე <port> (ნაგულისხმევი: RPCPORT ან სატესტო ქსელში: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + JSON-RPC-შეერთებების მიყურადება პორტზე <port> (ნაგულისხმევი: 40001 ან სატესტო ქსელში: 50000) Accept command line and JSON-RPC commands საკომანდო სტრიქონისა და JSON-RPC-კომამდების ნებართვა - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2683,7 +2683,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, მიუთითეთ rpcpassword საკონფიგურაციო ფაილში: %s @@ -2694,7 +2694,7 @@ rpcpassword=%s სახელი და პაროლი ერთმანეთს არ უნდა ემთხვეოდეს. თუ ფაილი არ არსებობს, შექმენით იგი უფლებებით owner-readable-only. ასევე რეკომენდებულია დააყენოთ alertnotify რათა მიიღოთ შეტყობინებები პრობლემების შესახებ; -მაგალითად: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com +მაგალითად: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2766,7 +2766,7 @@ rpcpassword=%s ეს არის წინასწარი სატესტო ვერსია - გამოიყენეთ საკუთარი რისკით - არ გამოიყენოთ მოპოვებისა ან კომერციული მიზნებისათვის - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2778,8 +2778,8 @@ rpcpassword=%s ყურადღება: ძალიან მაღალია -paytxfee - საკომისო, რომელსაც თქვენ გადაიხდით ამ ტრანსაქციის გაგზავნის საფასურად. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - ყურადღება: შეამოწმეთ თქვენი კომპიუტერის სისტემური თარიღი და დრო! თუ ისინი არასწორია, Pfennig ვერ იმუშავებს კორექტულად. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + ყურადღება: შეამოწმეთ თქვენი კომპიუტერის სისტემური თარიღი და დრო! თუ ისინი არასწორია, pfennig ვერ იმუშავებს კორექტულად. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2814,8 +2814,8 @@ rpcpassword=%s პირადი გასაღებების აღდგენის მცდელობა wallet.dat-იდან - Pfennig Core Daemon - Pfennig Core დემონი + pfennig Core Daemon + pfennig Core დემონი Block creation options: @@ -2834,8 +2834,8 @@ rpcpassword=%s შეერთება SOCKS-პროქსით - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - JSON-RPC-შეერთება პორტზე <port> (ნაგულისხმევი: RPCPORT ან სატესტო ქსელში: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + JSON-RPC-შეერთება პორტზე <port> (ნაგულისხმევი: 40001 ან სატესტო ქსელში: 50000) Connection options: @@ -3058,7 +3058,7 @@ rpcpassword=%s ბლოკების იმპორტი გარე blk000??.dat ფაილიდან - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3122,7 +3122,7 @@ rpcpassword=%s - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3142,11 +3142,11 @@ rpcpassword=%s - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL ოპციები: (იხილე Pfennig Wiki-ში SSL-ს მოწყობის ინსტრუქციები) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL ოპციები: (იხილე pfennig Wiki-ში SSL-ს მოწყობის ინსტრუქციები) - Send command to Pfennig Core + Send command to pfennig Core @@ -3182,7 +3182,7 @@ rpcpassword=%s მიუთითეთ შეერთების ტაიმაუტი მილიწამებში (ნაგულისხმევი: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3298,12 +3298,12 @@ rpcpassword=%s არ იტვირთება wallet.dat: საფულე დაზიანებულია - Error loading wallet.dat: Wallet requires newer version of Pfennig - არ იტვირთება wallet.dat: საფულეს სჭირდება Pfennig-ის ახალი ვერსია + Error loading wallet.dat: Wallet requires newer version of pfennig + არ იტვირთება wallet.dat: საფულეს სჭირდება pfennig-ის ახალი ვერსია - Wallet needed to be rewritten: restart Pfennig to complete - საჭიროა საფულის აღდგენა: დაარესტარტეთ Pfennig + Wallet needed to be rewritten: restart pfennig to complete + საჭიროა საფულის აღდგენა: დაარესტარტეთ pfennig Error loading wallet.dat diff --git a/src/qt/locale/bitmark_ka.ts~ b/src/qt/locale/bitmark_ka.ts~ new file mode 100644 index 0000000..1c219ab --- /dev/null +++ b/src/qt/locale/bitmark_ka.ts~ @@ -0,0 +1,3389 @@ + + + AboutDialog + + About GameCredits Core + GameCredits Core-ს შესახებ + + + <b>GameCredits Core</b> version + <b>GameCredits 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 Bitcoin Core Developers + GameCredits 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + ეს არის თქვენი GameCredits-მისამართები გადახდების შესასრულებლად. მონეტების გაგზავნამდე ყოველთვის შეამოწმეთ თანხა და მიმღების მისამართი. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + ეს არის თქვენი GameCredits-მისამართები გადახდების მისაღებად. რეკომენდებულია ყოველი ტრანსაქციისათვის ახალი მიღების მისამართის გამოყენება. + + + 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 GameCreditsS</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 + საფულე დაშიფრულია + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + ახლა GameCredits დაიხურება დაშიფრვის პროცესის დასასრულებლად. გაითვალისწინეთ, რომ დაშიფრვა სრულად ვერ დაიცავს თქვენს ბითქოინებს თქვენს კომპიუტერში შემოპარული მავნე პროგრამების საშუალებით დატაცებისაგან. + + + 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. + საფულის ფრაზა-პაროლი შეცვლილია. + + + + GameCreditsGUI + + Sign &message... + ხელ&მოწერა + + + Synchronizing with network... + ქსელთან სინქრონიზება... + + + &Overview + მიმ&ოხილვა + + + Node + კვანძი + + + Show general overview of wallet + საფულის ზოგადი მიმოხილვა + + + &Transactions + &ტრანსაქციები + + + Browse transaction history + ტრანსაქციების ისტორიის დათვალიერება + + + E&xit + &გასვლა + + + Quit application + გასვლა + + + Show information about GameCredits + ინფორმაცია GameCredits-ის შესახებ + + + 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 GameCredits address + მონეტების გაგზავნა GameCredits-მისამართზე + + + Modify configuration options for GameCredits + GameCredits-ის საკონფიგურაციო პარამეტრების ცვლილება + + + Backup wallet to another location + საფულის არქივირება სხვა ადგილზე + + + Change the passphrase used for wallet encryption + საფულის დაშიფრვის ფრაზა-პაროლის შეცვლა + + + &Debug window + და&ხვეწის ფანჯარა + + + Open debugging and diagnostic console + დახვეწისა და გიაგნოსტიკის კონსოლის გაშვება + + + &Verify message... + &ვერიფიკაცია + + + GameCredits + GameCredits + + + Wallet + საფულე + + + &Send + &გაგზავნა + + + &Receive + &მიღება + + + &Show / Hide + &ჩვენება/დაფარვა + + + Show or hide the main Window + მთავარი ფანჯრის ჩვენება/დაფარვა + + + Encrypt the private keys that belong to your wallet + თქვენი საფულის პირადი გასაღებების დაშიფრვა + + + Sign messages with your GameCredits addresses to prove you own them + მესიჯებზე ხელმოწერა თქვენი GameCredits-მისამართებით იმის დასტურად, რომ ის თქვენია + + + Verify messages to ensure they were signed with specified GameCredits addresses + შეამოწმეთ, რომ მესიჯები ხელმოწერილია მითითებული GameCredits-მისამართით + + + &File + &ფაილი + + + &Settings + &პარამეტრები + + + &Help + &დახმარება + + + Tabs toolbar + ბარათების პანელი + + + [testnet] + [testnet] + + + GameCredits Core + GameCredits Core + + + Request payments (generates QR codes and gamecredits: URIs) + გადახდის მოთხოვნა (შეიქმნება QR-კოდები და gamecredits: ბმულები) + + + &About GameCredits Core + GameCredits Core-ს შეს&ახებ + + + Show the list of used sending addresses and labels + გამოყენებული გაგზავნის მისამართებისა და ნიშნულების სიის ჩვენება + + + Show the list of used receiving addresses and labels + გამოყენებული მიღების მისამართებისა და ნიშნულების სიის ჩვენება + + + Open a gamecredits: URI or payment request + gamecredits: URI-ის ან გადახდის მოთხოვნის გახსნა + + + &Command-line options + საკომანდო სტრიქონის ოპ&ციები + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + GameCredits Core-ს დახმარების ჩვენება GameCredits-ის საკომანდო სტრიქონის დასაშვები ოპციების სანახავად + + + GameCredits client + GameCredits-კლიენტი + + + %n active connection(s) to GameCredits 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. GameCredits can no longer continue safely and will quit. + ფატალური შეცდომა. GameCredits ვერ უზრუნველყოფს უსაფრთხო გაგრძელებას, ამიტომ იხურება. + + + + 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 GameCredits address. + შეყვანილი მისამართი "%1" არ არის ვალიდური GameCredits-მისამართი. + + + 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 + + GameCredits Core - Command-line options + GameCredits Core - საკომანდო სტრიქონის ოპციები + + + GameCredits Core + GameCredits 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 GameCredits Core. + მოგესალმებათ GameCredits Core. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + ეს პროგრამის პირველი გაშვებაა; შეგიძლიათ მიუთითოთ, სად შეინახოს მონაცემები GameCredits Core-მ. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits Core გადმოტვირთავს და შეინახავს GameCredits-ის ბლოკთა ჯაჭვს. მითითებულ კატალოგში დაგროვდება სულ ცოტა 1 გბ მონაცემები, და მომავალში უფრო გაიზრდება. საფულეც ამავე კატალოგში შეინახება. + + + Use the default data directory + ნაგულისხმევი კატალოგის გამოყენება + + + Use a custom data directory: + მითითებული კატალოგის გამოყენება: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + სისტემაში შესვლის შემდეგ GameCredits-ის ავტომატური გაშვება. + + + &Start GameCredits on system login + &სისტემაში შესვლისას გაშვება + + + Size of &database cache + მონაცემთა ბაზის კეშის სი&დიდე + + + MB + MB + + + Number of script &verification threads + სკრიპტის &ვერიფიცირების ნაკადების რაოდენობა + + + Connect to the GameCredits network through a SOCKS proxy. + GameCredits-ქსელზე მიერთება 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + როუტერში GameCredits-კლიენტის პორტის ავტომატური გახსნა. მუშაობს, თუ თქვენს როუტერს ჩართული აქვს 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 GameCredits. + აქ შეგიძლიათ აირჩიოთ სამომხმარებლო ენა. ძალაში შევა GameCredits-ის რესტარტის შემდეგ. + + + &Unit to show amounts in: + ერთეუ&ლი: + + + Choose the default subdivision unit to show in the interface and when sending coins. + აირჩიეთ გასაგზავნი თანხის ნაგულისხმევი ერთეული. + + + Whether to show GameCredits addresses in the transaction list or not. + ტრანსაქციების სიაში იყოს თუ არა ნაჩვენები GameCredits-მისამართები. + + + &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 GameCredits network after a connection is established, but this process has not completed yet. + ნაჩვენები ინფორმაცია შეიძლება მოძველებული იყოს. თქვენი საფულე ავტომატურად სინქრონიზდება GameCredits-ის ქსელთან კავშირის დამყარების შემდეგ, ეს პროცესი ჯერ არ არის დასრულებული. + + + 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 GameCredits address or malformed URI parameters. + URI-ის დამუშავება ვერ მოხერხდა. შესაძლოა არასწორია GameCredits-მისამართი ან URI-ის პარამეტრები. + + + Requested payment amount of %1 is too small (considered dust). + მოთხოვნილი გადახდის %1 მოცულობა ძალიან მცირეა (ითვლება "მტვრად") + + + Payment request error + გადახდის მოთხოვნის შეცდომა + + + Cannot start gamecredits: click-to-pay handler + ვერ გაიშვა gamecredits: 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 + + GameCredits + GameCredits + + + 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-ის დაუშვებელი კომბინაცია. + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + შეიყვანეთ ბიტკოინ-მისამართი (მაგ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + გახსენით GameCredits-ის დახვეწის ლოგ-ფაილი მიმდინარე კატალოგიდან. დიდი ლოგ-ფაილის შემთხვევაში ამას შეიძლება რამდენიმე წამი მოუნდეს. + + + Clear console + კონსოლის გასუფთავება + + + Welcome to the GameCredits RPC console. + მოგესალმებათ GameCredits-ის 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 GameCredits 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 GameCredits address + ყურადღება: არასწორია GameCredits-მისამართი + + + (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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + მისამართი, რომლითაც ასრულებთ გადახდას (მაგ.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + მესიჯი, რომელიც თან ერთვის მონეტებს: URI, რომელიც შეინახება ტრანსაქციასთან ერთად თქვენთვის. შენიშვნა: მესიჯი არ გაყვება გადახდას ბითქოინის ქსელში. + + + This is an unverified payment request. + ეს არის არავერიფიცირებული გადახდის მოთხოვნა. + + + Pay To: + ადრესატი: + + + Memo: + შენიშვნა: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + მისამართი, რომლითაც ხელს აწერთ (მაგ.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + მისამართი, რომლითაც ხელმოწერილია მესიჯი (მაგ.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + შეამოწმეთ, რომ მესიჯი ხელმოწერილია მითითებული GameCredits-მისამართით + + + Verify &Message + &მესიჯის ვერიფიკაცია + + + Reset all verify message fields + ვერიფიკაციის ყველა ველის წაშლა + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + შეიყვანეთ ბიტკოინ-მისამართი (მაგ. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + GameCredits Core + + + The Bitcoin Core Developers + GameCredits 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 + არქივირება შესრულებულია + + + + gamecredits-core + + Usage: + გამოყენება: + + + List commands + ბრძანებები + + + Get help for a command + ბრძანების აღწერილობა + + + Options: + ოპციები: + + + Specify configuration file (default: gamecredits.conf) + მიუთითეთ საკონფიგურაციო ფაილი (ნაგულისხმევია: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + მიუთითეთ pid ფაილი (ნაგულისხმევია: gamecreditsd.pid) + + + Specify data directory + მიუთითეთ მონაცემთა კატალოგი + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + მიყურადება პორტზე <port> (ნაგულისხმევი: 40002 ან სატესტო ქსელში: 50001) + + + 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: 40001 or testnet: 50000) + JSON-RPC-შეერთებების მიყურადება პორტზე <port> (ნაგულისხმევი: 40001 ან სატესტო ქსელში: 50000) + + + Accept command line and JSON-RPC commands + საკომანდო სტრიქონისა და JSON-RPC-კომამდების ნებართვა + + + GameCredits 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=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, მიუთითეთ rpcpassword საკონფიგურაციო ფაილში: +%s +რეკომენდებულია შემდეგი შემთხვევითი პაროლი: +rpcuser=gamecreditsrpc +rpcpassword=%s +(ამის დამახსოვრება არ გჭირდებათ) +სახელი და პაროლი ერთმანეთს არ უნდა ემთხვეოდეს. +თუ ფაილი არ არსებობს, შექმენით იგი უფლებებით owner-readable-only. +ასევე რეკომენდებულია დააყენოთ alertnotify რათა მიიღოთ შეტყობინებები პრობლემების შესახებ; +მაგალითად: alertnotify=echo %%s | mail -s "GameCredits 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. GameCredits 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 GameCredits will not work properly. + ყურადღება: შეამოწმეთ თქვენი კომპიუტერის სისტემური თარიღი და დრო! თუ ისინი არასწორია, GameCredits ვერ იმუშავებს კორექტულად. + + + 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-იდან + + + GameCredits Core Daemon + GameCredits 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: 40001 or testnet: 50000) + JSON-RPC-შეერთება პორტზე <port> (ნაგულისხმევი: 40001 ან სატესტო ქსელში: 50000) + + + 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 gamecredits-cli): + გამოყენება (მოძველებულია, გამოიყენეთ gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL ოპციები: (იხილე GameCredits Wiki-ში SSL-ს მოწყობის ინსტრუქციები) + + + Send command to GameCredits 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 GameCredits 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 GameCredits + არ იტვირთება wallet.dat: საფულეს სჭირდება GameCredits-ის ახალი ვერსია + + + Wallet needed to be rewritten: restart GameCredits to complete + საჭიროა საფულის აღდგენა: დაარესტარტეთ GameCredits + + + 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/bitmark_kk_KZ.ts b/src/qt/locale/bitmark_kk_KZ.ts index c5a334a..ba9e4bb 100644 --- a/src/qt/locale/bitmark_kk_KZ.ts +++ b/src/qt/locale/bitmark_kk_KZ.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Pfennig + Show information about pfennig @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_kk_KZ.ts~ b/src/qt/locale/bitmark_kk_KZ.ts~ new file mode 100644 index 0000000..cf41cf2 --- /dev/null +++ b/src/qt/locale/bitmark_kk_KZ.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about GameCredits + + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_ko_KR.ts b/src/qt/locale/bitmark_ko_KR.ts index e286cba..e8a616a 100644 --- a/src/qt/locale/bitmark_ko_KR.ts +++ b/src/qt/locale/bitmark_ko_KR.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core 비트코인 코어 소개 - <b>Pfennig Core</b> version + <b>pfennig Core</b> version <b>비트코인 코어</b> 버젼 @@ -103,11 +103,11 @@ MIT/X11 프로그램 라이선스에 따라 배포합니다. COPYING 또는 http 받은 주소들 - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. 이것이 비트코인 금액을 보내는 주소이다. 항상 코인을 보내기전에 잔고와 받는 주소를 확인하시오 - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. 비트코인을 받을 수 있는 계좌 주소입니다. 매 거래마다 새로운 주소 사용을 권장합니다. @@ -205,7 +205,7 @@ MIT/X11 프로그램 라이선스에 따라 배포합니다. COPYING 또는 http 지갑의 암호화를 확정 - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! 경고: 만약 당신의 지갑을 암호화 하고 비밀번호를 잃어 버릴 경우, 당신의 모든 비트코인들을 잃어버릴 수 있습니다! @@ -225,7 +225,7 @@ MIT/X11 프로그램 라이선스에 따라 배포합니다. COPYING 또는 http 지갑 암호화 완료 - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. 암호화 처리 과정을 끝내기 위해 비트코인을 닫겠습니다. 지갑 암호화는 컴퓨터로의 멀웨어 감염으로 인한 비트코인 도난을 완전히 막아주지 못함을 기억하십시오. @@ -258,7 +258,7 @@ MIT/X11 프로그램 라이선스에 따라 배포합니다. COPYING 또는 http - PfennigGUI + pfennigGUI Sign &message... 메시지 서명&... @@ -296,7 +296,7 @@ MIT/X11 프로그램 라이선스에 따라 배포합니다. COPYING 또는 http 적용 중단 - Show information about Pfennig + Show information about pfennig 비트코인에 대한 정보를 보여줍니다. @@ -344,11 +344,11 @@ MIT/X11 프로그램 라이선스에 따라 배포합니다. COPYING 또는 http 디스크에서 블록 다시 색인중... - Send coins to a Pfennig address + Send coins to a pfennig address 비트코인 주소로 코인 전송 - Modify configuration options for Pfennig + Modify configuration options for pfennig 비트코인 설정 옵션 수정 @@ -372,7 +372,7 @@ MIT/X11 프로그램 라이선스에 따라 배포합니다. COPYING 또는 http 메시지 확인&... - Pfennig + pfennig 비트코인 @@ -400,11 +400,11 @@ MIT/X11 프로그램 라이선스에 따라 배포합니다. COPYING 또는 http 소유 지갑 개인키 암호화 - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them 지갑 주소가 자신 소유의 것인지 증명하기 위해 비트코인 주소에 서명할 수 있습니다. - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses 비트코인 주소의 전자 서명 확인을 위해 첨부된 메시지가 있을 경우 이를 검증할 수 있습니다. @@ -428,7 +428,7 @@ MIT/X11 프로그램 라이선스에 따라 배포합니다. COPYING 또는 http [테스트넷] - Pfennig Core + pfennig Core 비트코인코어 @@ -436,7 +436,7 @@ MIT/X11 프로그램 라이선스에 따라 배포합니다. COPYING 또는 http 지불 요청하기 (QR코드와 비트코인이 생성됩니다: URIs) - &About Pfennig Core + &About pfennig Core &비트코인 코어 소개 @@ -456,15 +456,15 @@ MIT/X11 프로그램 라이선스에 따라 배포합니다. COPYING 또는 http 명령어-라인 옵션 - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client 비트코인 고객 - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network 비트코인 네트워크와 %n 개의 활성연결 @@ -560,7 +560,7 @@ Address: %4 지갑이 암호화 되었고 현재 잠겨져 있습니다 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. 치명적인 오류가 있습니다. 비트코인을 더이상 안전하게 진행할 수 없어 빠져나갑니다. @@ -845,7 +845,7 @@ Address: %4 입력된 주소는"%1" 이미 주소록에 있습니다. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. 입력한 "%1" 주소는 올바른 비트코인 주소가 아닙니다. @@ -883,11 +883,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options 비트코인 코어 - 명령어-라인 옵션 - Pfennig Core + pfennig Core 비트코인코어 @@ -934,15 +934,15 @@ Address: %4 환영합니다 - Welcome to Pfennig Core. + Welcome to pfennig Core. 비트코인 코어에 오신것을 환영합니. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. 프로그램이 처음으로 실행되고 있습니다. 비트코인 코어가 어디에 데이터를 저장할지 선택할 수 있습니다. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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의 데이터가 이 폴더에 저장되며 시간이 경과할수록 점차 증가합니다. 그리고 지갑 또한 이 폴더에 저장됩니다. @@ -954,7 +954,7 @@ Address: %4 커스텀 데이터 폴더 사용: - Pfennig + pfennig 비트코인 @@ -1016,11 +1016,11 @@ Address: %4 송금 수수료(&F) - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. 시스템 로그인후에 비트코인을 자동으로 시작합니다. - &Start Pfennig on system login + &Start pfennig on system login 시스템 로그인시 비트코인 시작(&S) @@ -1036,7 +1036,7 @@ Address: %4 스크립트 인증 쓰레드의 개수 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. SOCKS 프록시를 통해 비트코인 네트워크 연결 @@ -1096,7 +1096,7 @@ Address: %4 &확인되지 않은 돈을 쓰다 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. 라우터의 비트코인 클라이언트 포트를 자동으로 엽니다. 라우터에서 UPnP를 지원하고 활성화 했을 경우에만 동작합니다. @@ -1152,7 +1152,7 @@ Address: %4 사용자 인터페이스 언어(&L): - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. 사용자 인터페이스 언어를 여기서 설정할 수 있습니다. 이 설정은 비트코인을 다시 시작할때 적용됩니다. @@ -1164,7 +1164,7 @@ Address: %4 인터페이스에 표시하고 코인을 보낼때 사용할 기본 최소화 단위를 선택하십시오. - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. 송금 목록에 비트코인 주소를 표시할지의 여부입니다. @@ -1219,7 +1219,7 @@ Address: %4 유형 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. 표시한 정보가 오래된 것 같습니다. 비트코인 네트워크에 연결하고 난 다음에 지갑을 자동으로 동기화 하지만, 아직 과정이 끝나지는 않았습니다. @@ -1274,7 +1274,7 @@ Address: %4 URI 조작중 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. URI의 파싱에 문제가 발생했습니다. 잘못된 비트코인 주소나 URI 파라미터 구성에 오류가 존재할 수 있습니다. @@ -1341,7 +1341,7 @@ Address: %4 QObject - Pfennig + pfennig 비트코인 @@ -1357,11 +1357,11 @@ Address: %4 오류: 잘못된 -regtest 와 -testnet의 조합입니다. - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... 비트코인 코어가 아직 안전하게 종료되지 않았습니다. - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) 비트코인 주소를 입력하기 (예 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,7 +1483,7 @@ Address: %4 로그 파일 디버그 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. 비트코인 디버그 로그파일을 현재 데이터 폴더에서 여십시요. 용량이 큰 로그 파일들은 몇 초가 걸릴 수 있습니다. @@ -1491,7 +1491,7 @@ Address: %4 콘솔 초기화 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. 비트코인 RPC 콘솔에 오신걸 환영합니다 @@ -1554,7 +1554,7 @@ Address: %4 현재의 수취용 주소를 재사용합니다만 권장하지는 않습니다. (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 Pfennig network. + 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 pfennig network. @@ -1867,7 +1867,7 @@ Address: %4 거래가 거부되었습니다. 몇몇 코인들이 지갑에서 이미 사용된 경우, 예를 들어 코인을 이미 사용한 wallet.dat를 복사해서 사용한 경우 지금 지갑에 기록이 안되있어 이런 일이 생길 수 있습니다. - Warning: Invalid Pfennig address + Warning: Invalid pfennig address 경고: 잘못된 비트코인주소입니다 @@ -1954,7 +1954,7 @@ Address: %4 사용된 주소 목록에 새 주소를 추가하기 위해 제목을 입력합니다. - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1973,7 +1973,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... 비트코인코어가 닫아지고 있습니다 @@ -2028,7 +2028,7 @@ Address: %4 현재 서명을 시스템 클립보드에 복사 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address 여러분의 비트코인 주소를 증명하려면 메시지 서명하십시오 @@ -2056,7 +2056,7 @@ Address: %4 서명한 메시지의 주소입니다 (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address 정확한 비트코인주소가 입력됬는지 메시지를 확인하시오 @@ -2068,7 +2068,7 @@ Address: %4 모든 검증 메시지 필드 재설정 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) 비트코인 주소를 입력하기 (예 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2127,7 +2127,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core 비트코인코어 @@ -2622,8 +2622,8 @@ Address: %4 데이터 폴더 지정 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - <port>로 연결을 허용한다 (기본값: P2PPORT 또는 테스트넷: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + <port>로 연결을 허용한다 (기본값: 40002 또는 테스트넷: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2650,15 +2650,15 @@ Address: %4 IPv4 감청을 위한 RPC 포트 %u번을 설정중 오류가 발생했습니다: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - 포트 <port>을 통해 JSON-RPC 연결 (기본값: RPCPORT 또는 testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + 포트 <port>을 통해 JSON-RPC 연결 (기본값: 40001 또는 testnet: 50000) Accept command line and JSON-RPC commands 명령줄과 JSON-RPC 명령 수락 - Pfennig Core RPC client version + pfennig Core RPC client version 비트코인 코어 RPC 클라이언트 버전 @@ -2683,7 +2683,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2758,7 +2758,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 이 빌드 버전은 정식 출시 전 테스트의 목적이며, 예기치 않은 위험과 오류가 발생할 수 있습니다. 채굴과 상점용 소프트웨어로 사용하는 것을 권하지 않습니다. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2770,7 +2770,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 경고: -paytxfee값이 너무 큽니다! 이 값은 송금할때 지불할 송금 수수료입니다. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. 경고: 컴퓨터의 날짜와 시간이 올바른지 확인하십시오! 시간이 잘못되면 비트코인은 제대로 동작하지 않습니다. @@ -2806,7 +2806,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 손상된 wallet.dat에서 개인키 복원을 시도합니다 - Pfennig Core Daemon + pfennig Core Daemon 비트코인 코어 데몬 @@ -2826,8 +2826,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. SOCKS 프록시를 통해 연결 - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - JSON-RPC에 연결 <포트>(기본값:RPCPORT 또는 테스트넷: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + JSON-RPC에 연결 <포트>(기본값:40001 또는 테스트넷: 50000) Connection options: @@ -3050,7 +3050,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 외부 blk000??.dat 파일에서 블록을 가져옵니다. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3114,7 +3114,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 구동 시 블럭 트리를 출력합니다. (기본값: 0, 비활성화) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) RPC SSL 옵션: (비트코인 위키의 SSL 설정 설명서 참고) @@ -3134,11 +3134,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) SSL 옵션: (SSL 설정 절차를 보혀면 비트코인 위키를 참조하십시오) - Send command to Pfennig Core + Send command to pfennig Core 비트코인 코어로 명령 보내기 @@ -3174,7 +3174,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 밀리초 단위로 연결 제한시간을 설정하십시오(기본값: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon 비트코인 코어의 데몬 프로그램을 실행합니다. @@ -3290,11 +3290,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. wallet.dat 불러오기 에러: 지갑 오류 - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig wallet.dat 불러오기 에러: 지갑은 새버전의 비트코인이 필요합니다. - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete 지갑을 새로 써야 합니다.: 완성하기 위하여 비트코인을 다시 시작하십시오. diff --git a/src/qt/locale/bitmark_ko_KR.ts~ b/src/qt/locale/bitmark_ko_KR.ts~ new file mode 100644 index 0000000..9a4fbb1 --- /dev/null +++ b/src/qt/locale/bitmark_ko_KR.ts~ @@ -0,0 +1,3381 @@ + + + AboutDialog + + About GameCredits Core + 비트코인 코어 소개 + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + 이것이 비트코인 금액을 보내는 주소이다. 항상 코인을 보내기전에 잔고와 받는 주소를 확인하시오 + + + These are your GameCredits 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 GameCreditsS</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 + 지갑 암호화 완료 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + 지갑 비밀번호가 성공적으로 변경되었습니다 + + + + GameCreditsGUI + + Sign &message... + 메시지 서명&... + + + Synchronizing with network... + 네트워크와 동기화중... + + + &Overview + &개요 + + + Node + 노드 + + + Show general overview of wallet + 지갑의 일반적 개요를 보여 줍니다. + + + &Transactions + &거래 + + + Browse transaction history + 거래내역을 검색합니다. + + + E&xit + 나가기(&X) + + + Quit application + 적용 중단 + + + Show information about GameCredits + 비트코인에 대한 정보를 보여줍니다. + + + 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 GameCredits address + 비트코인 주소로 코인 전송 + + + Modify configuration options for GameCredits + 비트코인 설정 옵션 수정 + + + Backup wallet to another location + 지갑을 다른장소에 백업 + + + Change the passphrase used for wallet encryption + 지갑 암호화에 사용되는 암호를 변경합니다 + + + &Debug window + 디버그 창& + + + Open debugging and diagnostic console + 디버깅 및 진단 콘솔을 엽니다 + + + &Verify message... + 메시지 확인&... + + + GameCredits + 비트코인 + + + 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 GameCredits addresses to prove you own them + 지갑 주소가 자신 소유의 것인지 증명하기 위해 비트코인 주소에 서명할 수 있습니다. + + + Verify messages to ensure they were signed with specified GameCredits addresses + 비트코인 주소의 전자 서명 확인을 위해 첨부된 메시지가 있을 경우 이를 검증할 수 있습니다. + + + &File + &파일 + + + &Settings + &설정 + + + &Help + &도움말 + + + Tabs toolbar + 툴바 색인표 + + + [testnet] + [테스트넷] + + + GameCredits Core + 비트코인코어 + + + Request payments (generates QR codes and gamecredits: URIs) + 지불 요청하기 (QR코드와 비트코인이 생성됩니다: URIs) + + + &About GameCredits Core + &비트코인 코어 소개 + + + Show the list of used sending addresses and labels + 한번 이상 사용된 보내는 주소와 주소 제목의 목록을 보여줍니다. + + + Show the list of used receiving addresses and labels + 한번 이상 사용된 받는 주소와 주소 제목의 목록을 보여줍니다. + + + Open a gamecredits: URI or payment request + 비트코인: URI 또는 지불요청 열기 + + + &Command-line options + 명령어-라인 옵션 + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + 비트코인 고객 + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + 비트코인 코어 - 명령어-라인 옵션 + + + GameCredits 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 GameCredits Core. + 비트코인 코어에 오신것을 환영합니. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + 프로그램이 처음으로 실행되고 있습니다. 비트코인 코어가 어디에 데이터를 저장할지 선택할 수 있습니다. + + + GameCredits Core will download and store a copy of the GameCredits 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: + 커스텀 데이터 폴더 사용: + + + GameCredits + 비트코인 + + + 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 GameCredits after logging in to the system. + 시스템 로그인후에 비트코인을 자동으로 시작합니다. + + + &Start GameCredits on system login + 시스템 로그인시 비트코인 시작(&S) + + + Size of &database cache + 데이터베이스 캐시 크기 + + + MB + 메가바이트 + + + Number of script &verification threads + 스크립트 인증 쓰레드의 개수 + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + 사용자 인터페이스 언어를 여기서 설정할 수 있습니다. 이 설정은 비트코인을 다시 시작할때 적용됩니다. + + + &Unit to show amounts in: + 거래액을 표시할 단위(&U): + + + Choose the default subdivision unit to show in the interface and when sending coins. + 인터페이스에 표시하고 코인을 보낼때 사용할 기본 최소화 단위를 선택하십시오. + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + URI의 파싱에 문제가 발생했습니다. 잘못된 비트코인 주소나 URI 파라미터 구성에 오류가 존재할 수 있습니다. + + + Requested payment amount of %1 is too small (considered dust). + 요청한 금액 %1의 양이 너무 적습니다. (스팸성 거래로 간주) + + + Payment request error + 지불 요청 애러 + + + Cannot start gamecredits: 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 + + GameCredits + 비트코인 + + + 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의 조합입니다. + + + GameCredits Core didn't yet exit safely... + 비트코인 코어가 아직 안전하게 종료되지 않았습니다. + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 비트코인 주소를 입력하기 (예 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + 비트코인 디버그 로그파일을 현재 데이터 폴더에서 여십시요. 용량이 큰 로그 파일들은 몇 초가 걸릴 수 있습니다. + + + Clear console + 콘솔 초기화 + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 비트코인을 송금할 지갑 주소 입력하기 (예 : bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + 지급요청 미확인입니다 + + + Pay To: + 송금할 대상 : + + + Memo: + 메모: + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 메시지를 서명할 주소 (예: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 서명한 메시지의 주소입니다 (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + 정확한 비트코인주소가 입력됬는지 메시지를 확인하시오 + + + Verify &Message + 메시지 검증(&M) + + + Reset all verify message fields + 모든 검증 메시지 필드 재설정 + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 비트코인 주소를 입력하기 (예 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + 비트코인코어 + + + The Bitcoin 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 + 백업 성공 + + + + gamecredits-core + + Usage: + 사용법: + + + List commands + 커맨드 목록 + + + Get help for a command + 커맨드 도움말 + + + Options: + 옵션: + + + Specify configuration file (default: gamecredits.conf) + 설정파일 지정 (기본값: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + pid 파일 지정 (기본값: gamecreditsd.pid) + + + Specify data directory + 데이터 폴더 지정 + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + <port>로 연결을 허용한다 (기본값: 40002 또는 테스트넷: 50001) + + + 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: 40001 or testnet: 50000) + 포트 <port>을 통해 JSON-RPC 연결 (기본값: 40001 또는 testnet: 50000) + + + Accept command line and JSON-RPC commands + 명령줄과 JSON-RPC 명령 수락 + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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에서 개인키 복원을 시도합니다 + + + GameCredits 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: 40001 or testnet: 50000) + JSON-RPC에 연결 <포트>(기본값:40001 또는 테스트넷: 50000) + + + 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 gamecredits-cli): + 사용법 (오래되었습니다. gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL 옵션: (SSL 설정 절차를 보혀면 비트코인 위키를 참조하십시오) + + + Send command to GameCredits 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 GameCredits 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 GameCredits + wallet.dat 불러오기 에러: 지갑은 새버전의 비트코인이 필요합니다. + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_ky.ts b/src/qt/locale/bitmark_ky.ts index 2b66fe7..3af7fed 100644 --- a/src/qt/locale/bitmark_ky.ts +++ b/src/qt/locale/bitmark_ky.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Pfennig + Show information about pfennig @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,8 +367,8 @@ This product includes software developed by the OpenSSL Project for use in the O Билдирүүнү &текшерүү... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,8 +945,8 @@ Address: %4 - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,8 +1332,8 @@ Address: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 Консолду тазалоо - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_ky.ts~ b/src/qt/locale/bitmark_ky.ts~ new file mode 100644 index 0000000..be49545 --- /dev/null +++ b/src/qt/locale/bitmark_ky.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + &Транзакциялар + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about GameCredits + + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + Билдирүүнү &текшерүү... + + + GameCredits + GameCredits + + + Wallet + Капчык + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &Файл + + + &Settings + + + + &Help + &Жардам + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + МБ + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + GameCredits + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + Консолду тазалоо + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_la.ts b/src/qt/locale/bitmark_la.ts index 84c201f..7af4b42 100644 --- a/src/qt/locale/bitmark_la.ts +++ b/src/qt/locale/bitmark_la.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -102,11 +102,11 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig 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 Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -204,7 +204,7 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op Confirma cifrationem cassidilis - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! Monitio: Si cassidile tuum cifras et tesseram amittis, tu <b>AMITTES OMNES TUOS NUMMOS BITOS</b>! @@ -224,8 +224,8 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op Cassidile cifratum - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig iam desinet ut finiat actionem cifrandi. Memento cassidile cifrare non posse cuncte curare ne tui nummi clepantur ab malis programatibus in tuo computatro. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig 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 @@ -257,7 +257,7 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op - PfennigGUI + pfennigGUI Sign &message... Signa &nuntium... @@ -295,8 +295,8 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op Exi applicatione - Show information about Pfennig - Monstra informationem de Pfennig + Show information about pfennig + Monstra informationem de pfennig About &Qt @@ -343,12 +343,12 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op Recreans indicem frustorum in disco... - Send coins to a Pfennig address - Mitte nummos ad inscriptionem Pfennig + Send coins to a pfennig address + Mitte nummos ad inscriptionem pfennig - Modify configuration options for Pfennig - Muta configurationis optiones pro Pfennig + Modify configuration options for pfennig + Muta configurationis optiones pro pfennig Backup wallet to another location @@ -371,8 +371,8 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op &Verifica nuntium... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -399,12 +399,12 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op Cifra claves privatas quae cassidili tui sunt - Sign messages with your Pfennig addresses to prove you own them - Signa nuntios cum tuis inscriptionibus Pfennig ut demonstres te eas possidere + Sign messages with your pfennig addresses to prove you own them + Signa nuntios cum tuis inscriptionibus pfennig ut demonstres te eas possidere - Verify messages to ensure they were signed with specified Pfennig addresses - Verifica nuntios ut certus sis eos signatos esse cum specificatis inscriptionibus Pfennig + Verify messages to ensure they were signed with specified pfennig addresses + Verifica nuntios ut certus sis eos signatos esse cum specificatis inscriptionibus pfennig &File @@ -427,15 +427,15 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op [testnet] - Pfennig Core - Pfennig Nucleus + pfennig Core + pfennig Nucleus Request payments (generates QR codes and pfennig: URIs) - &About Pfennig Core + &About pfennig Core @@ -455,16 +455,16 @@ Hoc productum continet programmata composita ab OpenSSL Project pro utendo in Op - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Pfennig cliens + pfennig client + pfennig cliens - %n active connection(s) to Pfennig network - %n activa conexio ad rete Pfennig%n activae conexiones ad rete Pfennig + %n active connection(s) to pfennig network + %n activa conexio ad rete pfennig%n activae conexiones ad rete pfennig No block source available... @@ -559,8 +559,8 @@ Inscriptio: %4 Cassidile <b>cifratum</b> est et iam nunc <b>seratum</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Error fatalis accidit. Pfennig nondum pergere tute potest, et exibit. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Error fatalis accidit. pfennig nondum pergere tute potest, et exibit. @@ -844,8 +844,8 @@ Inscriptio: %4 Inserta inscriptio "%1" iam in libro inscriptionum est. - The entered address "%1" is not a valid Pfennig address. - Inscriptio inserta "%1" non valida inscriptio Pfennig est. + The entered address "%1" is not a valid pfennig address. + Inscriptio inserta "%1" non valida inscriptio pfennig est. Could not unlock wallet. @@ -882,12 +882,12 @@ Inscriptio: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Pfennig Nucleus + pfennig Core + pfennig Nucleus version @@ -933,15 +933,15 @@ Inscriptio: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -953,8 +953,8 @@ Inscriptio: %4 - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1015,12 +1015,12 @@ Inscriptio: %4 Solve &mercedem transactionis - Automatically start Pfennig after logging in to the system. - Pelle Pfennig per se postquam in systema inire. + Automatically start pfennig after logging in to the system. + Pelle pfennig per se postquam in systema inire. - &Start Pfennig on system login - &Pelle Pfennig cum inire systema + &Start pfennig on system login + &Pelle pfennig cum inire systema Size of &database cache @@ -1035,7 +1035,7 @@ Inscriptio: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1095,8 +1095,8 @@ Inscriptio: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Aperi per se portam clientis Pfennig in itineratore. Hoc tantum effectivum est si itineratrum tuum supportat UPnP et id activum est. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Aperi per se portam clientis pfennig in itineratore. Hoc tantum effectivum est si itineratrum tuum supportat UPnP et id activum est. Map port using &UPnP @@ -1151,8 +1151,8 @@ Inscriptio: %4 &Lingua monstranda utenti: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Lingua monstranda utenti hic constitui potest. Haec configuratio effectiva erit postquam Pfennig iterum initiatum erit. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Lingua monstranda utenti hic constitui potest. Haec configuratio effectiva erit postquam pfennig iterum initiatum erit. &Unit to show amounts in: @@ -1163,8 +1163,8 @@ Inscriptio: %4 Selige praedefinitam unitam subdivisionis monstrare in interfacie et quando nummos mittere - Whether to show Pfennig addresses in the transaction list or not. - Num monstrare inscriptiones Pfennig in enumeratione transactionum. + Whether to show pfennig addresses in the transaction list or not. + Num monstrare inscriptiones pfennig in enumeratione transactionum. &Display addresses in transaction list @@ -1218,8 +1218,8 @@ Inscriptio: %4 Schema - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig postquam conexio constabilita est, sed hoc actio nondum perfecta est. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig postquam conexio constabilita est, sed hoc actio nondum perfecta est. Wallet @@ -1273,8 +1273,8 @@ Inscriptio: %4 Tractatio URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI intellegi non posse! Huius causa possit inscriptionem Pfennig non validam aut URI parametra maleformata. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI intellegi non posse! Huius causa possit inscriptionem pfennig non validam aut URI parametra maleformata. Requested payment amount of %1 is too small (considered dust). @@ -1286,7 +1286,7 @@ Inscriptio: %4 Cannot start pfennig: click-to-pay handler - Pfennig incipere non potest: cliccare-ad-pensandum handler + pfennig incipere non potest: cliccare-ad-pensandum handler Net manager warning @@ -1340,8 +1340,8 @@ Inscriptio: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1356,12 +1356,12 @@ Inscriptio: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Insere inscriptionem Pfennig (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Insere inscriptionem pfennig (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1482,16 +1482,16 @@ Inscriptio: %4 Debug catalogi plica - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Aperi plicam catalogi de Pfennig debug ex activo indice datorum. Hoc possit pauca secunda pro plicis magnis catalogi. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Aperi plicam catalogi de pfennig debug ex activo indice datorum. Hoc possit pauca secunda pro plicis magnis catalogi. Clear console Vacuefac terminale - Welcome to the Pfennig RPC console. - Bene ventio in terminale RPC de Pfennig. + Welcome to the pfennig RPC console. + Bene ventio in terminale RPC de pfennig. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1553,7 +1553,7 @@ Inscriptio: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1866,7 +1866,7 @@ Inscriptio: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1953,7 +1953,7 @@ Inscriptio: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1972,7 +1972,7 @@ Inscriptio: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2027,8 +2027,8 @@ Inscriptio: %4 Copia signationem in latibulum systematis - Sign the message to prove you own this Pfennig address - Signa nuntium ut demonstres hanc inscriptionem Pfennig a te possessa esse + Sign the message to prove you own this pfennig address + Signa nuntium ut demonstres hanc inscriptionem pfennig a te possessa esse Sign &Message @@ -2055,8 +2055,8 @@ Inscriptio: %4 Inscriptio qua nuntius signatus est (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Verifica nuntium ut cures signatum esse cum specifica inscriptione Pfennig + Verify the message to ensure it was signed with the specified pfennig address + Verifica nuntium ut cures signatum esse cum specifica inscriptione pfennig Verify &Message @@ -2067,8 +2067,8 @@ Inscriptio: %4 Reconstitue omnes campos verificandi nuntii - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Insere inscriptionem Pfennig (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Insere inscriptionem pfennig (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2126,8 +2126,8 @@ Inscriptio: %4 SplashScreen - Pfennig Core - Pfennig Nucleus + pfennig Core + pfennig Nucleus The Bitcoin Core Developers @@ -2621,8 +2621,8 @@ Inscriptio: %4 Specifica indicem datorum - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Ausculta pro conexionibus in <porta> (praedefinitum: P2PPORT vel testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Ausculta pro conexionibus in <porta> (praedefinitum: 40002 vel testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2649,15 +2649,15 @@ Inscriptio: %4 Error erat dum initians portam RPC %u pro auscultando in IPv4: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Ausculta pro conexionibus JSON-RPC in <porta> (praedefinitum: RPCPORT vel testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Ausculta pro conexionibus JSON-RPC in <porta> (praedefinitum: 40001 vel testnet: 50000) Accept command line and JSON-RPC commands Accipe terminalis et JSON-RPC mandata. - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2682,7 +2682,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, necesse est te rpcpassword constituere in plica configurationis: %s @@ -2693,7 +2693,7 @@ rpcpassword=%s Nomen usoris et tessera eadem esse NON POSSUNT. Si plica non existit, eam crea cum permissionibus ut eius dominus tantum sinitur id legere. Quoque hortatur alertnotify constituere ut tu notificetur de problematibus; -exempli gratia: alertnotify=echo %%s | mail -s "Pfennig Notificatio" admin@foo.com +exempli gratia: alertnotify=echo %%s | mail -s "pfennig Notificatio" admin@foo.com @@ -2765,7 +2765,7 @@ exempli gratia: alertnotify=echo %%s | mail -s "Pfennig Notificatio" a 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. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2777,8 +2777,8 @@ exempli gratia: alertnotify=echo %%s | mail -s "Pfennig Notificatio" a Monitio: -paytxfee constitutum valde magnum! Hoc est merces transactionis solves si mittis transactionem. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Monitio: Sodes cura ut dies tempusque computatri tui recti sunt! Si horologium tuum pravum est, Pfennig non proprie fungetur. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Monitio: Sodes cura ut dies tempusque computatri tui recti sunt! Si horologium tuum pravum est, pfennig non proprie fungetur. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2813,7 +2813,7 @@ exempli gratia: alertnotify=echo %%s | mail -s "Pfennig Notificatio" a Conare recipere claves privatas de corrupto wallet.dat - Pfennig Core Daemon + pfennig Core Daemon @@ -2833,7 +2833,7 @@ exempli gratia: alertnotify=echo %%s | mail -s "Pfennig Notificatio" a - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3057,7 +3057,7 @@ exempli gratia: alertnotify=echo %%s | mail -s "Pfennig Notificatio" a Importat frusta ab externa plica blk000??.dat - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3121,7 +3121,7 @@ exempli gratia: alertnotify=echo %%s | mail -s "Pfennig Notificatio" a - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3141,11 +3141,11 @@ exempli gratia: alertnotify=echo %%s | mail -s "Pfennig Notificatio" a - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Optiones SSL: (vide vici de Pfennig pro instructionibus SSL configurationis) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Optiones SSL: (vide vici de pfennig pro instructionibus SSL configurationis) - Send command to Pfennig Core + Send command to pfennig Core @@ -3181,7 +3181,7 @@ exempli gratia: alertnotify=echo %%s | mail -s "Pfennig Notificatio" a Specifica tempumfati conexionis in millisecundis (praedefinitum: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3297,12 +3297,12 @@ exempli gratia: alertnotify=echo %%s | mail -s "Pfennig Notificatio" a Error legendi wallet.dat: Cassidile corruptum - Error loading wallet.dat: Wallet requires newer version of Pfennig - Error legendi wallet.dat: Cassidili necesse est recentior versio Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Error legendi wallet.dat: Cassidili necesse est recentior versio pfennig - Wallet needed to be rewritten: restart Pfennig to complete - Cassidili necesse erat rescribi: Repelle Pfennig ut compleas + Wallet needed to be rewritten: restart pfennig to complete + Cassidili necesse erat rescribi: Repelle pfennig ut compleas Error loading wallet.dat diff --git a/src/qt/locale/bitmark_la.ts~ b/src/qt/locale/bitmark_la.ts~ new file mode 100644 index 0000000..83fceee --- /dev/null +++ b/src/qt/locale/bitmark_la.ts~ @@ -0,0 +1,3388 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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. + Hoc est experimentale programma. + +Distributum sub MIT/X11 licentia programmatum, vide comitantem plicam COPYING vel http://www.opensource.org/licenses/mit-license.php. + +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 Bitcoin Core Developers + + + + (%1-bit) + + + + + AddressBookPage + + 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 + + + &Copy + + + + C&lose + + + + &Copy Address + &Copia Inscriptionem + + + 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 + + + &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 GameCredits 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 GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + Copia &Titulum + + + &Edit + &Muta + + + Export Address List + + + + Comma separated file (*.csv) + Comma Separata Plica (*.csv) + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Titulus + + + Address + Inscriptio + + + (no label) + (nullus titulus) + + + + 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 GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits 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. + + + + GameCreditsGUI + + 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 + + + E&xit + E&xi + + + Quit application + Exi applicatione + + + Show information about GameCredits + Monstra informationem de GameCredits + + + 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 GameCredits address + Mitte nummos ad inscriptionem GameCredits + + + Modify configuration options for GameCredits + Muta configurationis optiones pro GameCredits + + + 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... + + + GameCredits + GameCredits + + + Wallet + Cassidile + + + &Send + &Mitte + + + &Receive + &Accipe + + + &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 GameCredits addresses to prove you own them + Signa nuntios cum tuis inscriptionibus GameCredits ut demonstres te eas possidere + + + Verify messages to ensure they were signed with specified GameCredits addresses + Verifica nuntios ut certus sis eos signatos esse cum specificatis inscriptionibus GameCredits + + + &File + &Plica + + + &Settings + &Configuratio + + + &Help + &Auxilium + + + Tabs toolbar + Tabella instrumentorum "Tabs" + + + [testnet] + [testnet] + + + GameCredits Core + GameCredits Nucleus + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + GameCredits cliens + + + %n active connection(s) to GameCredits network + %n activa conexio ad rete GameCredits%n activae conexiones ad rete GameCredits + + + 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 + + + Up to date + Recentissimo + + + Catching up... + Persequens... + + + Sent transaction + Transactio missa + + + Incoming transaction + Transactio incipiens + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Dies: %1 +Quantitas: %2 +Typus: %3 +Inscriptio: %4 + + + + 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. GameCredits can no longer continue safely and will quit. + Error fatalis accidit. GameCredits nondum pergere tute potest, et exibit. + + + + 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 list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Inscriptio + + + 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 GameCredits address. + Inscriptio inserta "%1" non valida inscriptio GameCredits est. + + + Could not unlock wallet. + Non potuisse cassidile reserare + + + New key generation failed. + Generare novam clavem abortum est. + + + + 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Pelle GameCredits per se postquam in systema inire. + + + &Start GameCredits on system login + &Pelle GameCredits cum inire systema + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Aperi per se portam clientis GameCredits in itineratore. Hoc tantum effectivum est si itineratrum tuum supportat UPnP et id activum est. + + + Map port using &UPnP + Designa portam utendo &UPnP + + + Proxy &IP: + &IP vicarii: + + + &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 GameCredits. + Lingua monstranda utenti hic constitui potest. Haec configuratio effectiva erit postquam GameCredits 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 GameCredits addresses in the transaction list or not. + Num monstrare inscriptiones GameCredits 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 + + + default + praedefinitum + + + none + + + + Confirm options reset + Confirma optionum reconstituere + + + 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. + Inscriptio vicarii tradita non valida est. + + + + OverviewPage + + Form + Schema + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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 GameCredits postquam conexio constabilita est, sed hoc actio nondum perfecta est. + + + 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> + + + out of sync + non synchronizato + + + + PaymentServer + + URI handling + Tractatio URI + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + URI intellegi non posse! Huius causa possit inscriptionem GameCredits non validam aut URI parametra maleformata. + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: click-to-pay handler + GameCredits 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 + + + + + QObject + + GameCredits + GameCredits + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Insere inscriptionem GameCredits (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + Salva codicem QR + + + 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 + + + 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 + + + &Console + &Terminale + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + Dies aedificandi + + + Debug log file + Debug catalogi plica + + + Open the GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Aperi plicam catalogi de GameCredits debug ex activo indice datorum. Hoc possit pauca secunda pro plicis magnis catalogi. + + + Clear console + Vacuefac terminale + + + Welcome to the GameCredits RPC console. + Bene ventio in terminale RPC de GameCredits. + + + 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 GameCredits 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 + + + Clear all fields of the form. + + + + Clear &All + Vacuefac &Omnia + + + Balance: + Pendendum: + + + Confirm the send action + Confirma actionem mittendi + + + S&end + &Mitte + + + Confirm send coins + Confirma mittendum nummorum + + + %1 to %2 + + + + 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. + + + 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 GameCredits 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 + + A&mount: + &Quantitas: + + + Pay &To: + Pensa &Ad: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Inscriptio cui mittere pensitationem (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Inscriptio qua signare nuntium (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Signa nuntium ut demonstres hanc inscriptionem GameCredits a te possessa esse + + + Sign &Message + Signa &Nuntium + + + Reset all sign message fields + Reconstitue omnes campos signandi nuntii + + + Clear &All + 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Inscriptio qua nuntius signatus est (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Verifica nuntium ut cures signatum esse cum specifica inscriptione GameCredits + + + Verify &Message + Verifica &Nuntium + + + Reset all verify message fields + Reconstitue omnes campos verificandi nuntii + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Insere inscriptionem GameCredits (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Clicca "Signa Nuntium" ut signatio generetur + + + 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. + + + + SplashScreen + + GameCredits Core + GameCredits Nucleus + + + The Bitcoin 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 + + + 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 + + + + TransactionDescDialog + + Transaction details + Particularia transactionis + + + This pane shows a detailed description of the transaction + Haec tabula monstrat descriptionem verbosam transactionis + + + + 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 + + + Confirmed (%1 confirmations) + Confirmatum (%1 confirmationes) + + + 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. + + + + 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 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 + + + Range: + Intervallum: + + + to + ad + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + Mitte Nummos + + + + 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 %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + Successum in conservando + + + + gamecredits-core + + Usage: + Usus: + + + List commands + Enumera mandata + + + Get help for a command + Accipe auxilium pro mandato + + + Options: + Optiones: + + + Specify configuration file (default: gamecredits.conf) + Specifica configurationis plicam (praedefinitum: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Specifica pid plicam (praedefinitum: gamecredits.pid) + + + Specify data directory + Specifica indicem datorum + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Ausculta pro conexionibus in <porta> (praedefinitum: 40002 vel testnet: 50001) + + + 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: 40001 or testnet: 50000) + Ausculta pro conexionibus JSON-RPC in <porta> (praedefinitum: 40001 vel testnet: 50000) + + + Accept command line and JSON-RPC commands + Accipe terminalis et JSON-RPC mandata. + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, necesse est te rpcpassword constituere in plica configurationis: +%s +Hortatur te hanc fortuitam tesseram uti: +rpcuser=gamecreditsrpc +rpcpassword=%s +(non est necesse te hanc tesseram meminisse) +Nomen usoris et tessera eadem esse NON POSSUNT. +Si plica non existit, eam crea cum permissionibus ut eius dominus tantum sinitur id legere. +Quoque hortatur alertnotify constituere ut tu notificetur de problematibus; +exempli gratia: alertnotify=echo %%s | mail -s "GameCredits Notificatio" 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 + 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 + + + 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 wallet transaction changes (%s in cmd is replaced by TxID) + Facere mandatum quotiescumque cassidilis transactio mutet (%s in mandato sbstituitur ab 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 + 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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Monitio: Sodes cura ut dies tempusque computatri tui recti sunt! Si horologium tuum pravum est, GameCredits 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 + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 = omnia) + + + 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 gamecredits-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 + + + Cannot obtain a lock on data directory %s. GameCredits 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 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) + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the GameCredits 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 GameCredits Wiki for SSL setup instructions) + Optiones SSL: (vide vici de GameCredits pro instructionibus SSL configurationis) + + + Send command to GameCredits Core + + + + Send trace/debug info to console instead of debug.log file + Mitte informationem vestigii/debug ad terminale potius quam plicam debug.log + + + 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 GameCredits 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) + + + 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! + + + 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) + + + 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) + + + 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 GameCredits + Error legendi wallet.dat: Cassidili necesse est recentior versio GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + Cassidili necesse erat rescribi: Repelle GameCredits 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 + + + 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. + Necesse est te rpcpassword=<tesseram> constituere in plica configurationum: +%s +Si plica non existat, crea eam cum permissionibus ut solus eius dominus eam legere sinatur. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_lt.ts b/src/qt/locale/bitmark_lt.ts index 81d7bb6..de57c6a 100644 --- a/src/qt/locale/bitmark_lt.ts +++ b/src/qt/locale/bitmark_lt.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -102,11 +102,11 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -204,8 +204,8 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. Patvirtinkite piniginės užšifravimą - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Dėmesio: jei užšifruosite savo piniginę ir pamesite slaptafrazę, jūs<b>PRARASITE VISUS SAVO PfennigUS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Dėmesio: jei užšifruosite savo piniginę ir pamesite slaptafrazę, jūs<b>PRARASITE VISUS SAVO pfennigUS</b>! Are you sure you wish to encrypt your wallet? @@ -224,8 +224,8 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. Piniginė užšifruota - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig dabar užsidarys šifravimo proceso pabaigai. Atminkite, kad piniginės šifravimas negali pilnai apsaugoti pfennigų vagysčių kai tinkle esančios kenkėjiškos programos patenka į jūsų kompiuterį. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig dabar užsidarys šifravimo proceso pabaigai. Atminkite, kad piniginės šifravimas negali pilnai apsaugoti pfennigų vagysčių kai tinkle esančios kenkėjiškos programos patenka į jūsų kompiuterį. Wallet encryption failed @@ -257,7 +257,7 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. - PfennigGUI + pfennigGUI Sign &message... Pasirašyti ži&nutę... @@ -295,8 +295,8 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. Išjungti programą - Show information about Pfennig - Rodyti informaciją apie Pfennig + Show information about pfennig + Rodyti informaciją apie pfennig About &Qt @@ -343,11 +343,11 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. Blokai iš naujo indeksuojami... - Send coins to a Pfennig address - Siųsti monetas Pfennig adresui + Send coins to a pfennig address + Siųsti monetas pfennig adresui - Modify configuration options for Pfennig + Modify configuration options for pfennig Keisti pfennig konfigūracijos galimybes @@ -371,8 +371,8 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. &Tikrinti žinutę... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -399,11 +399,11 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -427,15 +427,15 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. [testavimotinklas] - Pfennig Core - Pfennig branduolys + pfennig Core + pfennig branduolys Request payments (generates QR codes and pfennig: URIs) - &About Pfennig Core + &About pfennig Core @@ -455,16 +455,16 @@ Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www. - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Pfennig klientas + pfennig client + pfennig klientas - %n active connection(s) to Pfennig network - %n Pfennig tinklo aktyvus ryšys%n Pfennig tinklo aktyvūs ryšiai%n Pfennig tinklo aktyvūs ryšiai + %n active connection(s) to pfennig network + %n pfennig tinklo aktyvus ryšys%n pfennig tinklo aktyvūs ryšiai%n pfennig tinklo aktyvūs ryšiai No block source available... @@ -558,7 +558,7 @@ Adresas: %4 Piniginė <b>užšifruota</b> ir šiuo metu <b>užrakinta</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -843,8 +843,8 @@ Adresas: %4 Įvestas adresas „%1“ jau yra adresų knygelėje. - The entered address "%1" is not a valid Pfennig address. - Įvestas adresas „%1“ nėra galiojantis Pfennig adresas. + The entered address "%1" is not a valid pfennig address. + Įvestas adresas „%1“ nėra galiojantis pfennig adresas. Could not unlock wallet. @@ -881,12 +881,12 @@ Adresas: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Pfennig branduolys + pfennig Core + pfennig branduolys version @@ -932,15 +932,15 @@ Adresas: %4 Sveiki - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -952,8 +952,8 @@ Adresas: %4 - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1014,12 +1014,12 @@ Adresas: %4 &Mokėti sandorio mokestį - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. Automatiškai paleisti Bitkoin programą įjungus sistemą. - &Start Pfennig on system login - &Paleisti Pfennig programą su window sistemos paleidimu + &Start pfennig on system login + &Paleisti pfennig programą su window sistemos paleidimu Size of &database cache @@ -1034,7 +1034,7 @@ Adresas: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1094,8 +1094,8 @@ Adresas: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Automatiškai atidaryti Pfennig kliento prievadą maršrutizatoriuje. Tai veikia tik tada, kai jūsų maršrutizatorius palaiko UPnP ir ji įjungta. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatiškai atidaryti pfennig kliento prievadą maršrutizatoriuje. Tai veikia tik tada, kai jūsų maršrutizatorius palaiko UPnP ir ji įjungta. Map port using &UPnP @@ -1150,8 +1150,8 @@ Adresas: %4 Naudotojo sąsajos &kalba: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Čia gali būti nustatyta naudotojo sąsajos kalba. Šis nustatymas įsigalios iš naujo paleidus Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Čia gali būti nustatyta naudotojo sąsajos kalba. Šis nustatymas įsigalios iš naujo paleidus pfennig. &Unit to show amounts in: @@ -1162,7 +1162,7 @@ Adresas: %4 Rodomų ir siunčiamų monetų kiekio matavimo vienetai - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1217,7 +1217,7 @@ Adresas: %4 Forma - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1272,7 +1272,7 @@ Adresas: %4 URI apdorojimas - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1339,8 +1339,8 @@ Adresas: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1355,11 +1355,11 @@ Adresas: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Įveskite bitkoinų adresą (pvz. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1481,7 +1481,7 @@ Adresas: %4 Derinimo žurnalo failas - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1489,8 +1489,8 @@ Adresas: %4 Išvalyti konsolę - Welcome to the Pfennig RPC console. - Sveiki atvykę į Pfennig RPC konsolę. + Welcome to the pfennig RPC console. + Sveiki atvykę į pfennig RPC konsolę. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1552,7 +1552,7 @@ Adresas: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1865,7 +1865,7 @@ Adresas: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1952,7 +1952,7 @@ Adresas: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1971,7 +1971,7 @@ Adresas: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2026,7 +2026,7 @@ Adresas: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address Registruotis žinute įrodymuii, kad turite šį adresą @@ -2054,8 +2054,8 @@ Adresas: %4 Įveskite bitkoinų adresą (pvz. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Patikrinkite žinutę, jog įsitikintumėte, kad ją pasirašė nurodytas Pfennig adresas + Verify the message to ensure it was signed with the specified pfennig address + Patikrinkite žinutę, jog įsitikintumėte, kad ją pasirašė nurodytas pfennig adresas Verify &Message @@ -2066,7 +2066,7 @@ Adresas: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Įveskite bitkoinų adresą (pvz. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2125,8 +2125,8 @@ Adresas: %4 SplashScreen - Pfennig Core - Pfennig branduolys + pfennig Core + pfennig branduolys The Bitcoin Core Developers @@ -2620,8 +2620,8 @@ Adresas: %4 Nustatyti duomenų aplanką - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Sujungimo klausymas prijungčiai <port> (pagal nutylėjimą: P2PPORT arba testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Sujungimo klausymas prijungčiai <port> (pagal nutylėjimą: 40002 arba testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2648,15 +2648,15 @@ Adresas: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Klausymas JSON-RPC sujungimui prijungčiai <port> (pagal nutylėjimą: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Klausymas JSON-RPC sujungimui prijungčiai <port> (pagal nutylėjimą: 40001 or testnet: 50000) Accept command line and JSON-RPC commands Priimti komandinę eilutę ir JSON-RPC komandas - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2681,7 +2681,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2754,7 +2754,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2766,8 +2766,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Įspėjimas: -paytxfee yra nustatytas per didelis. Tai sandorio mokestis, kurį turėsite mokėti, jei siųsite sandorį. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Įspėjimas: Patikrinkite, kad kompiuterio data ir laikas yra teisingi.Jei Jūsų laikrodis neteisingai nustatytas Pfennig, veiks netinkamai. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Įspėjimas: Patikrinkite, kad kompiuterio data ir laikas yra teisingi.Jei Jūsų laikrodis neteisingai nustatytas pfennig, veiks netinkamai. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2802,7 +2802,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2822,7 +2822,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3046,7 +3046,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3110,7 +3110,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3130,11 +3130,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL opcijos (žr.e Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL opcijos (žr.e pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3170,7 +3170,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Nustatyti sujungimo trukmę milisekundėmis (pagal nutylėjimą: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3286,12 +3286,12 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. wallet.dat pakrovimo klaida, wallet.dat sugadintas - Error loading wallet.dat: Wallet requires newer version of Pfennig - wallet.dat pakrovimo klaida, wallet.dat reikalauja naujasnės Pfennig versijos + Error loading wallet.dat: Wallet requires newer version of pfennig + wallet.dat pakrovimo klaida, wallet.dat reikalauja naujasnės pfennig versijos - Wallet needed to be rewritten: restart Pfennig to complete - Piniginė turi būti prrašyta: įvykdymui perkraukite Pfennig + Wallet needed to be rewritten: restart pfennig to complete + Piniginė turi būti prrašyta: įvykdymui perkraukite pfennig Error loading wallet.dat diff --git a/src/qt/locale/bitmark_lt.ts~ b/src/qt/locale/bitmark_lt.ts~ new file mode 100644 index 0000000..332de38 --- /dev/null +++ b/src/qt/locale/bitmark_lt.ts~ @@ -0,0 +1,3375 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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. + Tai eksperimentinė programa. + +Platinama pagal MIT/X11 licenciją, kurią rasite faile COPYING arba http://www.opensource.org/licenses/mit-license.php. + +Š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 Bitcoin Core Developers + + + + (%1-bit) + + + + + AddressBookPage + + 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į + + + &Copy + &Kopijuoti + + + C&lose + &Užverti + + + &Copy Address + &Kopijuoti adresą + + + Delete the currently selected address from the list + + + + Export the data in the current tab to a file + + + + &Export + &Eksportuoti + + + &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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + Kopijuoti ž&ymę + + + &Edit + &Keisti + + + Export Address List + + + + Comma separated file (*.csv) + Kableliais išskirtas failas (*.csv) + + + Exporting Failed + + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Žymė + + + Address + Adresas + + + (no label) + (nėra žymės) + + + + 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 GameCreditsS</b>! + Dėmesio: jei užšifruosite savo piniginę ir pamesite slaptafrazę, jūs<b>PRARASITE VISUS SAVO GameCreditsUS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits dabar užsidarys šifravimo proceso pabaigai. Atminkite, kad piniginės šifravimas negali pilnai apsaugoti gamecreditsų 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. + + + + GameCreditsGUI + + 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ą + + + E&xit + &Išeiti + + + Quit application + Išjungti programą + + + Show information about GameCredits + Rodyti informaciją apie GameCredits + + + 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 GameCredits address + Siųsti monetas GameCredits adresui + + + Modify configuration options for GameCredits + Keisti gamecredits 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ę... + + + GameCredits + GameCredits + + + Wallet + Piniginė + + + &Send + &Siųsti + + + &Receive + &Gauti + + + &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 GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &Failas + + + &Settings + &Nustatymai + + + &Help + &Pagalba + + + Tabs toolbar + Kortelių įrankinė + + + [testnet] + [testavimotinklas] + + + GameCredits Core + GameCredits branduolys + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + GameCredits klientas + + + %n active connection(s) to GameCredits network + %n GameCredits tinklo aktyvus ryšys%n GameCredits tinklo aktyvūs ryšiai%n GameCredits 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 + + + Up to date + Atnaujinta + + + Catching up... + Vejamasi... + + + Sent transaction + Sandoris nusiųstas + + + Incoming transaction + Ateinantis sandoris + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Data: %1 +Suma: %2 +Tipas: %3 +Adresas: %4 + + + 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. GameCredits can no longer continue safely and will quit. + + + + + 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 list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Adresas + + + 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 GameCredits address. + Įvestas adresas „%1“ nėra galiojantis GameCredits adresas. + + + Could not unlock wallet. + Nepavyko atrakinti piniginės. + + + New key generation failed. + Naujo rakto generavimas nepavyko. + + + + 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Automatiškai paleisti Bitkoin programą įjungus sistemą. + + + &Start GameCredits on system login + &Paleisti GameCredits programą su window sistemos paleidimu + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Automatiškai atidaryti GameCredits 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 + + + Proxy &IP: + Tarpinio serverio &IP: + + + &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 GameCredits. + Čia gali būti nustatyta naudotojo sąsajos kalba. Šis nustatymas įsigalios iš naujo paleidus GameCredits. + + + &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 GameCredits 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 + + + default + numatyta + + + 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. + Nurodytas tarpinio serverio adresas negalioja. + + + + OverviewPage + + Form + Forma + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits network after a connection is established, but this process has not completed yet. + + + + 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> + + + out of sync + nesinchronizuota + + + + PaymentServer + + URI handling + URI apdorojimas + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + Tinklo užklausos klaida + + + + QObject + + GameCredits + GameCredits + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Įveskite bitkoinų adresą (pvz. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + + + + &Copy Image + + + + Save QR Code + Įrašyti QR kodą + + + 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 + + + Block chain + Blokų grandinė + + + Current number of blocks + Dabartinis blokų skaičius + + + Estimated total blocks + + + + Last block time + Paskutinio bloko laikas + + + &Open + &Atverti + + + &Console + &Konsolė + + + &Network Traffic + + + + &Clear + + + + Totals + + + + In: + + + + Out: + + + + Build date + Kompiliavimo data + + + Debug log file + Derinimo žurnalo failas + + + Open the GameCredits 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 GameCredits RPC console. + Sveiki atvykę į GameCredits 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 GameCredits 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ą + + + Clear all fields of the form. + + + + Clear &All + Išvalyti &viską + + + Balance: + Balansas: + + + Confirm the send action + Patvirtinti siuntimo veiksmą + + + S&end + &Siųsti + + + Confirm send coins + Patvirtinti monetų siuntimą + + + %1 to %2 + + + + 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. + + + 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 GameCredits 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 + + A&mount: + Su&ma: + + + Pay &To: + Mokėti &gavėjui: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 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 entry + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Įveskite bitkoinų adresą (pvz. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Įveskite bitkoinų adresą (pvz. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Patikrinkite žinutę, jog įsitikintumėte, kad ją pasirašė nurodytas GameCredits adresas + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Įveskite bitkoinų adresą (pvz. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Spragtelėkite "Registruotis žinutę" tam, kad gauti 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. + + + + SplashScreen + + GameCredits Core + GameCredits branduolys + + + The Bitcoin 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 + + + 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 + + + + TransactionDescDialog + + Transaction details + Sandorio detelės + + + This pane shows a detailed description of the transaction + Šis langas sandorio detalų aprašymą + + + + 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 + + + Confirmed (%1 confirmations) + Patvirtinta (%1 patvirtinimai) + + + 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 + + + + 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 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 + + + Range: + Grupė: + + + to + skirta + + + + WalletFrame + + No wallet has been loaded. + + + + + WalletModel + + Send Coins + Siųsti monetas + + + + 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 %1. + + + + The wallet data was successfully saved to %1. + + + + Backup Successful + Atsarginė kopija sėkmingai padaryta + + + + gamecredits-core + + Usage: + Naudojimas: + + + List commands + Komandų sąrašas + + + Get help for a command + Suteikti pagalba komandai + + + Options: + Parinktys: + + + Specify configuration file (default: gamecredits.conf) + Nurodyti konfigūracijos failą (pagal nutylėjimąt: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Nurodyti pid failą (pagal nutylėjimą: gamecreditsd.pid) + + + Specify data directory + Nustatyti duomenų aplanką + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Sujungimo klausymas prijungčiai <port> (pagal nutylėjimą: 40002 arba testnet: 50001) + + + 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: 40001 or testnet: 50000) + Klausymas JSON-RPC sujungimui prijungčiai <port> (pagal nutylėjimą: 40001 or testnet: 50000) + + + Accept command line and JSON-RPC commands + Priimti komandinę eilutę ir JSON-RPC komandas + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits 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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Įspėjimas: Patikrinkite, kad kompiuterio data ir laikas yra teisingi.Jei Jūsų laikrodis neteisingai nustatytas GameCredits, veiks netinkamai. + + + 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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) + + + + Force safe mode (default: 0) + + + + Generate coins (default: 0) + Generuoti monetas (numatyta: 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 gamecredits-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 + + + + Cannot obtain a lock on data directory %s. GameCredits 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 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) + + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL opcijos (žr.e GameCredits Wiki for SSL setup instructions) + + + Send command to GameCredits Core + + + + Send trace/debug info to console instead of debug.log file + Siųsti atsekimo/derinimo info į konsolę vietoj debug.log failo + + + 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) + + + Start GameCredits 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) + + + Username for JSON-RPC connections + Vartotojo vardas JSON-RPC jungimuisi + + + Warning + + + + Warning: This version is obsolete, upgrade required! + + + + 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) + + + 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) + + + 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 GameCredits + wallet.dat pakrovimo klaida, wallet.dat reikalauja naujasnės GameCredits versijos + + + Wallet needed to be rewritten: restart GameCredits to complete + Piniginė turi būti prrašyta: įvykdymui perkraukite GameCredits + + + 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 + + + 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. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_lv_LV.ts b/src/qt/locale/bitmark_lv_LV.ts index 26f084d..5b27463 100644 --- a/src/qt/locale/bitmark_lv_LV.ts +++ b/src/qt/locale/bitmark_lv_LV.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Par Pfennig Core + About pfennig Core + Par pfennig Core - <b>Pfennig Core</b> version - <b>Pfennig Core</b> versija + <b>pfennig Core</b> version + <b>pfennig Core</b> versija @@ -29,7 +29,7 @@ Izplatīta saskaņā ar MIT/X11 programmatūras licenci, skatīt pievienoto datn The Bitcoin Core Developers - Pfennig Core izstrādātāji + pfennig Core izstrādātāji (%1-bit) @@ -103,11 +103,11 @@ Izplatīta saskaņā ar MIT/X11 programmatūras licenci, skatīt pievienoto datn Saņemšanas adreses - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -205,8 +205,8 @@ Izplatīta saskaņā ar MIT/X11 programmatūras licenci, skatīt pievienoto datn Apstiprināt maciņa šifrēšanu - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Brīdinājums: Ja tu nošifrē savu maciņu un pazaudē paroli, tu <b>PAZAUDĒSI VISAS SAVAS PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Brīdinājums: Ja tu nošifrē savu maciņu un pazaudē paroli, tu <b>PAZAUDĒSI VISAS SAVAS pfennigS</b>! Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ Izplatīta saskaņā ar MIT/X11 programmatūras licenci, skatīt pievienoto datn Maciņš nošifrēts - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig 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. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig 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 @@ -258,7 +258,7 @@ Izplatīta saskaņā ar MIT/X11 programmatūras licenci, skatīt pievienoto datn - PfennigGUI + pfennigGUI Sign &message... Parakstīt &ziņojumu... @@ -296,8 +296,8 @@ Izplatīta saskaņā ar MIT/X11 programmatūras licenci, skatīt pievienoto datn Aizvērt programmu - Show information about Pfennig - Parādīt informāciju par Pfennig + Show information about pfennig + Parādīt informāciju par pfennig About &Qt @@ -344,12 +344,12 @@ Izplatīta saskaņā ar MIT/X11 programmatūras licenci, skatīt pievienoto datn Bloku reindeksēšana no diska... - Send coins to a Pfennig address - Nosūtīt bitkoinus uz Pfennig adresi + Send coins to a pfennig address + Nosūtīt bitkoinus uz pfennig adresi - Modify configuration options for Pfennig - Mainīt Pfennig konfigurācijas uzstādījumus + Modify configuration options for pfennig + Mainīt pfennig konfigurācijas uzstādījumus Backup wallet to another location @@ -372,8 +372,8 @@ Izplatīta saskaņā ar MIT/X11 programmatūras licenci, skatīt pievienoto datn &Pārbaudīt ziņojumu... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ Izplatīta saskaņā ar MIT/X11 programmatūras licenci, skatīt pievienoto datn Šifrēt privātās atslēgas kuras pieder tavam maciņam - Sign messages with your Pfennig addresses to prove you own them - Parakstīt ziņojumus ar savām Pfennig adresēm lai pierādītu ka tās pieder tev + Sign messages with your pfennig addresses to prove you own them + Parakstīt ziņojumus ar savām pfennig adresēm lai pierādītu ka tās pieder tev - Verify messages to ensure they were signed with specified Pfennig addresses - Pārbaudīt ziņojumus lai pārliecinātos, ka tie tika parakstīti ar norādītajām Pfennig adresēm + Verify messages to ensure they were signed with specified pfennig addresses + Pārbaudīt ziņojumus lai pārliecinātos, ka tie tika parakstīti ar norādītajām pfennig adresēm &File @@ -428,16 +428,16 @@ Izplatīta saskaņā ar MIT/X11 programmatūras licenci, skatīt pievienoto datn [testnet] - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core Request payments (generates QR codes and pfennig: URIs) Pieprasīt maksājumus (izveido QR kodu un pfennig: URIs) - &About Pfennig Core - Par &Pfennig Core + &About pfennig Core + Par &pfennig Core Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ Izplatīta saskaņā ar MIT/X11 programmatūras licenci, skatīt pievienoto datn &Komandrindas iespējas - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Pfennig klients + pfennig client + pfennig klients - %n active connection(s) to Pfennig network - %n aktīvu savienojumu ar Pfennig tīklu%n aktīvs savienojums ar Pfennig tīklu%n aktīvu savienojumu as Pfennig tīklu + %n active connection(s) to pfennig network + %n aktīvu savienojumu ar pfennig tīklu%n aktīvs savienojums ar pfennig tīklu%n aktīvu savienojumu as pfennig tīklu No block source available... @@ -560,8 +560,8 @@ Adrese: %4 Maciņš ir <b>šifrēts</b> un pašlaik <b>slēgts</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Radās fatāla kļūda. Pfennig Core nevar vairs droši turpināt un tiks izslēgta. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Radās fatāla kļūda. pfennig Core nevar vairs droši turpināt un tiks izslēgta. @@ -575,7 +575,7 @@ Adrese: %4 CoinControlDialog Coin Control Address Selection - Pfennig Kontroles Adrešu Atlase + pfennig Kontroles Adrešu Atlase Quantity: @@ -845,8 +845,8 @@ Adrese: %4 Nupat ierakstītā adrese "%1" jau atrodas adrešu grāmatā. - The entered address "%1" is not a valid Pfennig address. - Ierakstītā adrese "%1" nav derīga Pfennig adrese. + The entered address "%1" is not a valid pfennig address. + Ierakstītā adrese "%1" nav derīga pfennig adrese. Could not unlock wallet. @@ -883,12 +883,12 @@ Adrese: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core - Komandrindas iespējas + pfennig Core - Command-line options + pfennig Core - Komandrindas iespējas - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core version @@ -934,15 +934,15 @@ Adrese: %4 Sveiciens - Welcome to Pfennig Core. - Sveicināts Pfennig Core + Welcome to pfennig Core. + Sveicināts pfennig Core - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -954,8 +954,8 @@ Adrese: %4 Izmantot pielāgotu datu mapi: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,12 +1016,12 @@ Adrese: %4 &Maksāt par transakciju - Automatically start Pfennig after logging in to the system. - Automātiski sākt Pfennig pēc pieteikšanās sistēmā. + Automatically start pfennig after logging in to the system. + Automātiski sākt pfennig pēc pieteikšanās sistēmā. - &Start Pfennig on system login - &Sākt Pfennig reizē ar sistēmu + &Start pfennig on system login + &Sākt pfennig reizē ar sistēmu Size of &database cache @@ -1036,8 +1036,8 @@ Adrese: %4 Skriptu &pārbaudes pavedienu skaits - Connect to the Pfennig network through a SOCKS proxy. - Savienoties ar Pfennig tīklu caur SOCKS starpniekserveri. + Connect to the pfennig network through a SOCKS proxy. + Savienoties ar pfennig tīklu caur SOCKS starpniekserveri. &Connect through SOCKS proxy (default proxy): @@ -1096,8 +1096,8 @@ Adrese: %4 &Tērēt neapstiprinātu atlikumu - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Uz rūtera automātiski atvērt Pfennig klienta portu. Tas strādā tikai tad, ja rūteris atbalsta UPnP un tas ir ieslēgts. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Uz rūtera automātiski atvērt pfennig klienta portu. Tas strādā tikai tad, ja rūteris atbalsta UPnP un tas ir ieslēgts. Map port using &UPnP @@ -1152,8 +1152,8 @@ Adrese: %4 Lietotāja interfeiss un &valoda: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Šeit var iestatīt lietotāja valodu. Iestatījums aktivizēsies pēc Pfennig pārstartēšanas. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Šeit var iestatīt lietotāja valodu. Iestatījums aktivizēsies pēc pfennig pārstartēšanas. &Unit to show amounts in: @@ -1164,8 +1164,8 @@ Adrese: %4 Izvēlēties dalījuma vienību pēc noklusēšanas, ko izmantot interfeisā un nosūtot bitkoinus. - Whether to show Pfennig addresses in the transaction list or not. - Rādīt vai nē Pfennig adreses transakciju sarakstā. + Whether to show pfennig addresses in the transaction list or not. + Rādīt vai nē pfennig adreses transakciju sarakstā. &Display addresses in transaction list @@ -1173,7 +1173,7 @@ Adrese: %4 Whether to show coin control features or not. - Vai rādīt Pfennig kontroles funkcijas vai nē. + Vai rādīt pfennig kontroles funkcijas vai nē. &OK @@ -1219,8 +1219,8 @@ Adrese: %4 Forma - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig tīklu, taču šis process vēl nav beidzies. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig tīklu, taču šis process vēl nav beidzies. Wallet @@ -1274,7 +1274,7 @@ Adrese: %4 URI apstrāde - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1287,7 +1287,7 @@ Adrese: %4 Cannot start pfennig: click-to-pay handler - Nevar palaist Pfennig: nospied-lai-maksātu apstrādātāju + Nevar palaist pfennig: nospied-lai-maksātu apstrādātāju Net manager warning @@ -1341,8 +1341,8 @@ Adrese: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,12 +1357,12 @@ Adrese: %4 - Pfennig Core didn't yet exit safely... - Pfennig Core vel neizgāja droši... + pfennig Core didn't yet exit safely... + pfennig Core vel neizgāja droši... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Ierakstiet Pfennig adresi (piem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ierakstiet pfennig adresi (piem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,7 +1483,7 @@ Adrese: %4 Atkļūdošanas žurnāla datne - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1491,8 +1491,8 @@ Adrese: %4 Notīrīt konsoli - Welcome to the Pfennig RPC console. - Laipni lūgti Pfennig RPC konsolē. + Welcome to the pfennig RPC console. + Laipni lūgti pfennig RPC konsolē. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1554,7 +1554,7 @@ Adrese: %4 &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 Pfennig network. + 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 pfennig network. @@ -1708,7 +1708,7 @@ Adrese: %4 Coin Control Features - Pfennig Kontroles Funkcijas + pfennig Kontroles Funkcijas Inputs... @@ -1867,8 +1867,8 @@ Adrese: %4 - Warning: Invalid Pfennig address - Brīdinājums: Nederīga Pfennig adrese + Warning: Invalid pfennig address + Brīdinājums: Nederīga pfennig adrese (no label) @@ -1954,7 +1954,7 @@ Adrese: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1973,8 +1973,8 @@ Adrese: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig Core tiek izslēgta... + pfennig Core is shutting down... + pfennig Core tiek izslēgta... Do not shut down the computer until this window disappears. @@ -2028,8 +2028,8 @@ Adrese: %4 Kopēt parakstu uz sistēmas starpliktuvi - Sign the message to prove you own this Pfennig address - Parakstīt ziņojumu lai pierādītu, ka esi šīs Pfennig adreses īpašnieks. + Sign the message to prove you own this pfennig address + Parakstīt ziņojumu lai pierādītu, ka esi šīs pfennig adreses īpašnieks. Sign &Message @@ -2056,7 +2056,7 @@ Adrese: %4 Adrese ar kādu ziņojums tika parakstīts (piem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2068,8 +2068,8 @@ Adrese: %4 Atiestatīt visus laukus - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Ierakstiet Pfennig adresi (piem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ierakstiet pfennig adresi (piem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2127,12 +2127,12 @@ Adrese: %4 SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core The Bitcoin Core Developers - Pfennig Core izstrādātāji + pfennig Core izstrādātāji [testnet] @@ -2622,8 +2622,8 @@ Adrese: %4 Norādiet datu direktoriju - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Gaidīt savienojumus portā <port> (pēc noklusēšanas: P2PPORT vai testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Gaidīt savienojumus portā <port> (pēc noklusēšanas: 40002 vai testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2650,7 +2650,7 @@ Adrese: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2658,8 +2658,8 @@ Adrese: %4 Pieņemt komandrindas un JSON-RPC komandas - Pfennig Core RPC client version - Pfennig Core RPC klienta versija + pfennig Core RPC client version + pfennig Core RPC klienta versija Run in the background as a daemon and accept commands @@ -2683,7 +2683,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2756,7 +2756,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2768,8 +2768,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Brīdinājums: Lūdzu pārbaudi vai tava datora datums un laiks ir pareizs! Ja pulkstenis ir nepareizs, Pfennig Core nestrādās pareizi. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Brīdinājums: Lūdzu pārbaudi vai tava datora datums un laiks ir pareizs! Ja pulkstenis ir nepareizs, pfennig Core nestrādās pareizi. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2804,8 +2804,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Mēģināt atgūt privātās atslēgas no bojāta wallet.dat - Pfennig Core Daemon - Pfennig Core Process + pfennig Core Daemon + pfennig Core Process Block creation options: @@ -2824,7 +2824,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Savienoties caur SOCKS starpniekserveri - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3048,7 +3048,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Importēt blokus no ārējās blk000??.dat datnes - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3112,7 +3112,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3132,12 +3132,12 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core - Sūtīt komandu uz Pfennig Core + Send command to pfennig Core + Sūtīt komandu uz pfennig Core Send trace/debug info to console instead of debug.log file @@ -3172,8 +3172,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon - Sākt Pfennig Core Procesu + Start pfennig Core Daemon + Sākt pfennig Core Procesu System error: @@ -3288,12 +3288,12 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Nevar ielādēt wallet.dat: maciņš bojāts - Error loading wallet.dat: Wallet requires newer version of Pfennig - Nevar ielādēt wallet.dat: maciņa atvēršanai nepieciešama jaunāka Pfennig versija + Error loading wallet.dat: Wallet requires newer version of pfennig + Nevar ielādēt wallet.dat: maciņa atvēršanai nepieciešama jaunāka pfennig versija - Wallet needed to be rewritten: restart Pfennig to complete - Bija nepieciešams pārstartēt maciņu: pabeigšanai pārstartējiet Pfennig + Wallet needed to be rewritten: restart pfennig to complete + Bija nepieciešams pārstartēt maciņu: pabeigšanai pārstartējiet pfennig Error loading wallet.dat diff --git a/src/qt/locale/bitmark_lv_LV.ts~ b/src/qt/locale/bitmark_lv_LV.ts~ new file mode 100644 index 0000000..5a0e4c7 --- /dev/null +++ b/src/qt/locale/bitmark_lv_LV.ts~ @@ -0,0 +1,3379 @@ + + + AboutDialog + + About GameCredits Core + Par GameCredits Core + + + <b>GameCredits Core</b> version + <b>GameCredits 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 Bitcoin Core Developers + GameCredits Core izstrādātāji + + + (%1-bit) + (%1-biti) + + + + AddressBookPage + + 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 + + + &Copy + &Kopēt + + + C&lose + &Aizvērt + + + &Copy Address + &Kopēt adresi + + + 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 + + + &Delete + &Dzēst + + + Choose the address to send coins to + Izvēlies adresi uz kuru sūtīt gamecreditss + + + Choose the address to receive coins with + Izvēlies adresi ar kuru saņemt gamecreditss + + + C&hoose + &Izvēlēties + + + Sending addresses + Sūtīšanas adreses + + + Receiving addresses + Saņemšanas adreses + + + These are your GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + + + + Copy &Label + Kopēt &Nosaukumu + + + &Edit + &Rediģēt + + + Export Address List + Eksportēt Adrešu Sarakstu + + + Comma separated file (*.csv) + Fails ar komatu kā atdalītāju (*.csv) + + + Exporting Failed + Eksportēšana Neizdevās + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Nosaukums + + + Address + Adrese + + + (no label) + (bez nosaukuma) + + + + 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 GameCreditsS</b>! + Brīdinājums: Ja tu nošifrē savu maciņu un pazaudē paroli, tu <b>PAZAUDĒSI VISAS SAVAS GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits 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. + + + + GameCreditsGUI + + 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 + + + E&xit + &Iziet + + + Quit application + Aizvērt programmu + + + Show information about GameCredits + Parādīt informāciju par GameCredits + + + About &Qt + Par &Qt + + + Show information about Qt + Parādīt informāciju par Qt + + + &Options... + &Iespējas... + + + &Encrypt Wallet... + Šifrēt &maciņu... + + + &Backup Wallet... + &Maciņa Rezerves Kopija... + + + &Change Passphrase... + 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 GameCredits address + Nosūtīt bitkoinus uz GameCredits adresi + + + Modify configuration options for GameCredits + Mainīt GameCredits 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 + &Atkļūdošanas logs + + + Open debugging and diagnostic console + Atvērt atkļūdošanas un diagnostikas konsoli + + + &Verify message... + &Pārbaudīt ziņojumu... + + + GameCredits + GameCredits + + + Wallet + Maciņš + + + &Send + &Sūtīt + + + &Receive + Saņe&mt + + + &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 GameCredits addresses to prove you own them + Parakstīt ziņojumus ar savām GameCredits adresēm lai pierādītu ka tās pieder tev + + + Verify messages to ensure they were signed with specified GameCredits addresses + Pārbaudīt ziņojumus lai pārliecinātos, ka tie tika parakstīti ar norādītajām GameCredits adresēm + + + &File + &Fails + + + &Settings + &Uzstādījumi + + + &Help + &Palīdzība + + + Tabs toolbar + Ciļņu rīkjosla + + + [testnet] + [testnet] + + + GameCredits Core + GameCredits Core + + + Request payments (generates QR codes and gamecredits: URIs) + Pieprasīt maksājumus (izveido QR kodu un gamecredits: URIs) + + + &About GameCredits Core + Par &GameCredits Core + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + Atvērt gamecredits URI vai maksājuma pieprasījumu + + + &Command-line options + &Komandrindas iespējas + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + GameCredits klients + + + %n active connection(s) to GameCredits network + %n aktīvu savienojumu ar GameCredits tīklu%n aktīvs savienojums ar GameCredits tīklu%n aktīvu savienojumu as GameCredits 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 + + + Up to date + Sinhronizēts + + + Catching up... + Sinhronizējos... + + + Sent transaction + Transakcija nosūtīta + + + Incoming transaction + Ienākoša transakcija + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Datums: %1 +Daudzums: %2 +Tips: %3 +Adrese: %4 + + + + 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. GameCredits can no longer continue safely and will quit. + Radās fatāla kļūda. GameCredits Core nevar vairs droši turpināt un tiks izslēgta. + + + + ClientModel + + Network Alert + Tīkla brīdinājums + + + + CoinControlDialog + + Coin Control Address Selection + GameCredits 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 + + + + 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 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 list entry + + + + The address associated with this address list entry. This can only be modified for sending addresses. + + + + &Address + &Adrese + + + 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 GameCredits address. + Ierakstītā adrese "%1" nav derīga GameCredits adrese. + + + Could not unlock wallet. + Nav iespējams atslēgt maciņu. + + + New key generation failed. + Neizdevās ģenerēt jaunu atslēgu. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + GameCredits Core - Komandrindas iespējas + + + GameCredits Core + GameCredits 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 GameCredits Core. + Sveicināts GameCredits Core + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Automātiski sākt GameCredits pēc pieteikšanās sistēmā. + + + &Start GameCredits on system login + &Sākt GameCredits 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 GameCredits network through a SOCKS proxy. + Savienoties ar GameCredits 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 gamecredits &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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Uz rūtera automātiski atvērt GameCredits 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 + + + Proxy &IP: + Starpniekservera &IP: + + + &Port: + &Ports: + + + Port of the proxy (e.g. 9050) + Starpniekservera ports (piem. 9050) + + + SOCKS &Version: + SOCKS &Versija: + + + SOCKS version of the proxy (e.g. 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 GameCredits. + Šeit var iestatīt lietotāja valodu. Iestatījums aktivizēsies pēc GameCredits 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 GameCredits addresses in the transaction list or not. + Rādīt vai nē GameCredits adreses transakciju sarakstā. + + + &Display addresses in transaction list + &Attēlot adreses transakciju sarakstā + + + Whether to show coin control features or not. + Vai rādīt GameCredits kontroles funkcijas vai nē. + + + &OK + &Labi + + + &Cancel + &Atcelt + + + default + pēc noklusēšanas + + + none + neviena + + + Confirm options reset + Apstiprināt iestatījumu atiestatīšanu + + + Client restart required to activate changes. + + + + 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. + + + + The supplied proxy address is invalid. + 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 GameCredits 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 GameCredits tīklu, taču šis process vēl nav beidzies. + + + Wallet + Maciņš + + + 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> + + + out of sync + nav sinhronizēts + + + + PaymentServer + + URI handling + URI apstrāde + + + URI can not be parsed! This can be caused by an invalid GameCredits 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 gamecredits: click-to-pay handler + Nevar palaist GameCredits: 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 + + + + QObject + + GameCredits + GameCredits + + + 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. + + + + GameCredits Core didn't yet exit safely... + GameCredits Core vel neizgāja droši... + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ierakstiet GameCredits adresi (piem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + &Saglabāt Attēlu... + + + &Copy Image + &Kopēt Attēlu + + + Save QR Code + Saglabāt QR kodu + + + PNG Image (*.png) + PNG Attēls (*.png) + + + + RPCConsole + + Client name + Klienta vārds + + + N/A + N/A + + + Client version + Klienta versija + + + &Information + &Informācija + + + 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 + + + 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 + + + &Console + &Konsole + + + &Network Traffic + &Tīkla Satiksme + + + &Clear + &Notīrīt + + + Totals + Kopsummas + + + In: + Ie.: + + + Out: + Iz.: + + + Build date + Kompilācijas datums + + + Debug log file + Atkļūdošanas žurnāla datne + + + Open the GameCredits 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 GameCredits RPC console. + Laipni lūgti GameCredits 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 GameCredits 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 + GameCredits 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 + + + Clear all fields of the form. + Notīrīt visus laukus formā. + + + Clear &All + &Notīrīt visu + + + Balance: + Bilance: + + + Confirm the send action + Apstiprināt nosūtīšanu + + + S&end + &Sūtīt + + + Confirm send coins + Apstiprināt bitkoinu sūtīšanu + + + %1 to %2 + %1 līdz %2 + + + 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. + + + 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. + + + + Warning: Invalid GameCredits address + Brīdinājums: Nederīga GameCredits 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 + + A&mount: + Apjo&ms + + + Pay &To: + &Saņēmējs: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adrese lai sūtītu maksājumu uz (piem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + Noņem šo ierakstu + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + Šis ir nepārbaudīts maksājuma pieprasījums. + + + Pay To: + Maksāt: + + + Memo: + Memo: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adrese ar kuru parakstīt ziņojumu (piem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Parakstīt ziņojumu lai pierādītu, ka esi šīs GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adrese ar kādu ziņojums tika parakstīts (piem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + &Pārbaudīt Ziņojumu + + + Reset all verify message fields + Atiestatīt visus laukus + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ierakstiet GameCredits adresi (piem. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Nospied "Parakstīt Ziņojumu" lai ģenerētu parakstu + + + 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 + + GameCredits Core + GameCredits Core + + + The Bitcoin Core Developers + GameCredits Core izstrādātāji + + + [testnet] + [testnets] + + + + TrafficGraphWidget + + KB/s + KB/s + + + + TransactionDesc + + Open until %1 + Atvērts līdz %1 + + + 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. + + + + 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 + + + + TransactionDescDialog + + Transaction details + Transakcijas detaļas + + + This pane shows a detailed description of the transaction + Šis panelis parāda transakcijas detaļas + + + + 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 + + + Confirmed (%1 confirmations) + Apstiprināts (%1 apstiprinājumu) + + + 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. + + + + 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 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 + + + 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 %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 + Dublēšana Veiksmīga + + + + gamecredits-core + + Usage: + Lietojums: + + + List commands + Komandu saraksts + + + Get help for a command + Palīdzība par komandu + + + Options: + Iespējas: + + + Specify configuration file (default: gamecredits.conf) + Norādiet konfigurācijas failu (pēc noklusēšanas: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Norādiet pid failu (pēc noklusēšanas: gamecreditsd.pid) + + + Specify data directory + Norādiet datu direktoriju + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Gaidīt savienojumus portā <port> (pēc noklusēšanas: 40002 vai testnet: 50001) + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + Pieņemt komandrindas un JSON-RPC komandas + + + GameCredits Core RPC client version + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits will not work properly. + Brīdinājums: Lūdzu pārbaudi vai tava datora datums un laiks ir pareizs! Ja pulkstenis ir nepareizs, GameCredits 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. + + + + (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 + + + GameCredits Core Daemon + GameCredits Core Process + + + Block creation options: + + + + 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: 40001 or testnet: 50000) + + + + 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 + + + + 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) + + + + 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 gamecredits-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. GameCredits 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ācija + + + 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits Core + Sūtīt komandu uz GameCredits Core + + + Send trace/debug info to console instead of debug.log file + Debug/trace informāciju izvadīt konsolē, nevis debug.log failā + + + 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 GameCredits Core Daemon + Sākt GameCredits 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) + + + + 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... + + + + 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) + + + 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) + + + 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 GameCredits + Nevar ielādēt wallet.dat: maciņa atvēršanai nepieciešama jaunāka GameCredits versija + + + Wallet needed to be rewritten: restart GameCredits to complete + Bija nepieciešams pārstartēt maciņu: pabeigšanai pārstartējiet GameCredits + + + 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 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 + + + 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. + Konfigurācijas failā jāuzstāda rpcpassword=<password>: +%s +Ja fails neeksistē, izveidojiet to ar atļauju lasīšanai tikai īpašniekam. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_mn.ts b/src/qt/locale/bitmark_mn.ts index 539e02d..2167a66 100644 --- a/src/qt/locale/bitmark_mn.ts +++ b/src/qt/locale/bitmark_mn.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O Түрүйвчийн цоожийг баталгаажуулах - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O Түрүйвч цоожлогдлоо - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. Цоожлолтын процесыг дуусгахын тулд Биткойн одоо хаагдана. Ѳѳрийн түрүйвчийг цоожлох нь таны биткойнуудыг компьютерийн вирус хулгайлахаас бүрэн сэргийлж чадахгүй гэдгийг санаарай. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... &Зурвас хавсаргах... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O Програмаас Гарах - Show information about Pfennig + Show information about pfennig Биткойны мэдээллийг харуулах @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig Биткойн @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client Биткойн клиент - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network Биткойны сүлжээрүү %n идэвхитэй холболт байна Биткойны сүлжээрүү %n идэвхитэй холболтууд байна @@ -558,7 +558,7 @@ Address: %4 Түрүйвч <b>цоожтой</b> ба одоогоор цоож <b>хаалттай</b> байна - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -843,7 +843,7 @@ Address: %4 Таны оруулсан хаяг "%1" нь хаягийн бүртгэлд ѳмнѳ нь орсон байна - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -881,11 +881,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -932,15 +932,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -952,7 +952,7 @@ Address: %4 - Pfennig + pfennig Биткойн @@ -1014,11 +1014,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1034,7 +1034,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. Биткойны сүлжээрүү SOCKS проксигоор холбогдох. @@ -1094,7 +1094,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1150,7 +1150,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1162,7 +1162,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1217,7 +1217,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1272,7 +1272,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1339,7 +1339,7 @@ Address: %4 QObject - Pfennig + pfennig Биткойн @@ -1355,11 +1355,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1481,7 +1481,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1489,7 +1489,7 @@ Address: %4 Консолыг цэвэрлэх - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1552,7 +1552,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1865,7 +1865,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address Анхаар:Буруу Биткойны хаяг байна @@ -1952,7 +1952,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1971,7 +1971,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... Биткойны цѳм хаагдаж байна... @@ -2026,7 +2026,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2054,7 +2054,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2066,7 +2066,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2125,7 +2125,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2620,8 +2620,8 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - <port> дээрх холболтуудыг чагна (ѳгѳгдмѳл: P2PPORT эсвэл testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + <port> дээрх холболтуудыг чагна (ѳгѳгдмѳл: 40002 эсвэл testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2648,7 +2648,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2656,7 +2656,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2681,7 +2681,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2754,7 +2754,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2766,7 +2766,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2802,7 +2802,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2822,7 +2822,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. SOCKS проксигоор холбогдох - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3046,7 +3046,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3110,7 +3110,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3130,11 +3130,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3170,7 +3170,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3286,11 +3286,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. wallet.dat-ыг ачааллахад алдаа гарлаа: Түрүйвч эвдэрсэн байна - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig wallet.dat-ыг ачааллахад алдаа гарлаа: Түрүйвч Биткойны шинэ хувилбарыг шаардаж байна - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_mn.ts~ b/src/qt/locale/bitmark_mn.ts~ new file mode 100644 index 0000000..54659ee --- /dev/null +++ b/src/qt/locale/bitmark_mn.ts~ @@ -0,0 +1,3375 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + Түрүйвч цоожлогдлоо + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + Түрүйвчийн нууц үг амжилттай ѳѳр + + + + GameCreditsGUI + + Sign &message... + &Зурвас хавсаргах... + + + Synchronizing with network... + Сүлжээтэй тааруулж байна... + + + &Overview + + + + Node + Нод + + + Show general overview of wallet + + + + &Transactions + Гүйлгээнүүд + + + Browse transaction history + Гүйлгээнүүдийн түүхийг харах + + + E&xit + Гарах + + + Quit application + Програмаас Гарах + + + Show information about GameCredits + Биткойны мэдээллийг харуулах + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + Түрүйвчийг цоожлох нууц үгийг солих + + + &Debug window + + + + Open debugging and diagnostic console + Оношилгоо ба засварын консолыг онгойлго + + + &Verify message... + + + + GameCredits + Биткойн + + + Wallet + Түрүйвч + + + &Send + + + + &Receive + + + + &Show / Hide + &Харуул / Нуу + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &Файл + + + &Settings + &Тохиргоо + + + &Help + &Тусламж + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + Биткойн клиент + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + Биткойн + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + МБ + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + Биткойн + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + Консолыг цэвэрлэх + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + Хэрэглээ: + + + List commands + Үйлдлүүдийг жагсаах + + + Get help for a command + Үйлдэлд туслалцаа авах + + + Options: + Сонголтууд: + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + <port> дээрх холболтуудыг чагна (ѳгѳгдмѳл: 40002 эсвэл testnet: 50001) + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + wallet.dat-ыг ачааллахад алдаа гарлаа: Түрүйвч Биткойны шинэ хувилбарыг шаардаж байна + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_ms_MY.ts b/src/qt/locale/bitmark_ms_MY.ts index af40116..0ecaeaf 100644 --- a/src/qt/locale/bitmark_ms_MY.ts +++ b/src/qt/locale/bitmark_ms_MY.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Pfennig + Show information about pfennig @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_ms_MY.ts~ b/src/qt/locale/bitmark_ms_MY.ts~ new file mode 100644 index 0000000..d9ae5c8 --- /dev/null +++ b/src/qt/locale/bitmark_ms_MY.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about GameCredits + + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_nb.ts b/src/qt/locale/bitmark_nb.ts index bf8f845..62bdacc 100644 --- a/src/qt/locale/bitmark_nb.ts +++ b/src/qt/locale/bitmark_nb.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Om Pfennig Core + About pfennig Core + Om pfennig Core - <b>Pfennig Core</b> version - <b>Pfennig Core</b> versjon + <b>pfennig Core</b> version + <b>pfennig Core</b> versjon @@ -29,7 +29,7 @@ Dette produktet inneholder programvare utviklet av OpenSSL Project for bruk i Op The Bitcoin Core Developers - Pfennig Core utviklerne + pfennig Core utviklerne (%1-bit) @@ -103,12 +103,12 @@ Dette produktet inneholder programvare utviklet av OpenSSL Project for bruk i Op Mottaksadresser - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Dette er dine Pfennig-adresser for å sende betalinger. Alltid sjekk beløp og mottakeradresse før sending av mynter. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Dette er dine pfennig-adresser for å sende betalinger. Alltid sjekk beløp og mottakeradresse før sending av mynter. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Dette er dine Pfennig-adresser for å sende betalinger. Det er anbefalt å bruk en ny mottaksadresse for hver transaksjon. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Dette er dine pfennig-adresser for å sende betalinger. Det er anbefalt å bruk en ny mottaksadresse for hver transaksjon. Copy &Label @@ -205,8 +205,8 @@ Dette produktet inneholder programvare utviklet av OpenSSL Project for bruk i Op Bekreft kryptering av lommebok - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Advarsel: Hvis du krypterer lommeboken og mister adgangsfrasen, så vil du <b>MISTE ALLE DINE PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Advarsel: Hvis du krypterer lommeboken og mister adgangsfrasen, så vil du <b>MISTE ALLE DINE pfennigS</b>! Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ Dette produktet inneholder programvare utviklet av OpenSSL Project for bruk i Op Lommebok kryptert - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig vil nå lukkes for å fullføre krypteringsprosessen. Husk at kryptering av lommeboken ikke fullt ut kan beskytte dine pfennigs fra å bli stjålet om skadevare infiserer datamaskinen. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig vil nå lukkes for å fullføre krypteringsprosessen. Husk at kryptering av lommeboken ikke fullt ut kan beskytte dine pfennigs fra å bli stjålet om skadevare infiserer datamaskinen. Wallet encryption failed @@ -258,7 +258,7 @@ Dette produktet inneholder programvare utviklet av OpenSSL Project for bruk i Op - PfennigGUI + pfennigGUI Sign &message... Signer &melding... @@ -296,8 +296,8 @@ Dette produktet inneholder programvare utviklet av OpenSSL Project for bruk i Op Avslutt applikasjonen - Show information about Pfennig - Vis informasjon om Pfennig + Show information about pfennig + Vis informasjon om pfennig About &Qt @@ -344,12 +344,12 @@ Dette produktet inneholder programvare utviklet av OpenSSL Project for bruk i Op Reindekserer blokker på harddisk... - Send coins to a Pfennig address - Send til en Pfennig-adresse + Send coins to a pfennig address + Send til en pfennig-adresse - Modify configuration options for Pfennig - Endre oppsett for Pfennig + Modify configuration options for pfennig + Endre oppsett for pfennig Backup wallet to another location @@ -372,8 +372,8 @@ Dette produktet inneholder programvare utviklet av OpenSSL Project for bruk i Op &Verifiser melding... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ Dette produktet inneholder programvare utviklet av OpenSSL Project for bruk i Op Krypter de private nøklene som tilhører lommeboken din - Sign messages with your Pfennig addresses to prove you own them - Signer en melding med Pfennig-adressene dine for å bevise at du eier dem + Sign messages with your pfennig addresses to prove you own them + Signer en melding med pfennig-adressene dine for å bevise at du eier dem - Verify messages to ensure they were signed with specified Pfennig addresses - Bekreft meldinger for å være sikker på at de ble signert av en angitt Pfennig-adresse + Verify messages to ensure they were signed with specified pfennig addresses + Bekreft meldinger for å være sikker på at de ble signert av en angitt pfennig-adresse &File @@ -428,16 +428,16 @@ Dette produktet inneholder programvare utviklet av OpenSSL Project for bruk i Op [testnett] - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core Request payments (generates QR codes and pfennig: URIs) Forespør betalinger (genererer QR-koder og pfennig: URIer) - &About Pfennig Core - &Om Pfennig Core + &About pfennig Core + &Om pfennig Core Show the list of used sending addresses and labels @@ -449,23 +449,23 @@ Dette produktet inneholder programvare utviklet av OpenSSL Project for bruk i Op Open a pfennig: URI or payment request - Åpne en Pfennig: URI eller betalingsetterspørring + Åpne en pfennig: URI eller betalingsetterspørring &Command-line options &Kommandolinjevalg - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Vis Pfennig Core hjelpemeldingen for å få en liste med mulige kommandolinjevalg + Show the pfennig Core help message to get a list with possible pfennig command-line options + Vis pfennig Core hjelpemeldingen for å få en liste med mulige kommandolinjevalg - Pfennig client - Pfennig-klienten + pfennig client + pfennig-klienten - %n active connection(s) to Pfennig network - %n aktiv forbindelse til Pfennig-nettverket%n aktive forbindelser til Pfennig-nettverket + %n active connection(s) to pfennig network + %n aktiv forbindelse til pfennig-nettverket%n aktive forbindelser til pfennig-nettverket No block source available... @@ -560,8 +560,8 @@ Adresse: %4 Lommeboken er <b>kryptert</b> og for tiden <b>låst</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - En fatal feil har inntruffet. Det er ikke trygt å fortsette og Pfennig må derfor avslutte. + A fatal error occurred. pfennig can no longer continue safely and will quit. + En fatal feil har inntruffet. Det er ikke trygt å fortsette og pfennig må derfor avslutte. @@ -845,8 +845,8 @@ Adresse: %4 Den oppgitte adressen "%1" er allerede i adresseboken. - The entered address "%1" is not a valid Pfennig address. - Den angitte adressed "%1" er ikke en gyldig Pfennig-adresse. + The entered address "%1" is not a valid pfennig address. + Den angitte adressed "%1" er ikke en gyldig pfennig-adresse. Could not unlock wallet. @@ -883,12 +883,12 @@ Adresse: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core - Kommandolinjevalg + pfennig Core - Command-line options + pfennig Core - Kommandolinjevalg - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core version @@ -934,16 +934,16 @@ Adresse: %4 Velkommen - Welcome to Pfennig Core. - Velkommen til Pfennig Core. + Welcome to pfennig Core. + Velkommen til pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Siden dette er første gang programmet starter, kan du nå velge hvor Pfennig Core skal lagre sine data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Siden dette er første gang programmet starter, kan du nå velge hvor pfennig Core skal lagre sine data. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig Core vil laste ned og lagre en kopi av Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. + pfennig Core vil laste ned og lagre en kopi av pfennig 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 @@ -954,8 +954,8 @@ Adresse: %4 Bruk en egendefinert datamappe: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,12 +1016,12 @@ Adresse: %4 Betal &transaksjonsgebyr - Automatically start Pfennig after logging in to the system. - Start Pfennig automatisk etter innlogging. + Automatically start pfennig after logging in to the system. + Start pfennig automatisk etter innlogging. - &Start Pfennig on system login - &Start Pfennig ved systeminnlogging + &Start pfennig on system login + &Start pfennig ved systeminnlogging Size of &database cache @@ -1036,8 +1036,8 @@ Adresse: %4 Antall script &verifikasjonstråder - Connect to the Pfennig network through a SOCKS proxy. - Koble til Pfennig-nettverket gjennom en SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. + Koble til pfennig-nettverket gjennom en SOCKS proxy. &Connect through SOCKS proxy (default proxy): @@ -1096,8 +1096,8 @@ Adresse: %4 &Bruk ubekreftet veksel - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Åpne automatisk Pfennig klientporten på ruteren. Dette virker kun om din ruter støtter UPnP og dette er påslått. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Åpne automatisk pfennig klientporten på ruteren. Dette virker kun om din ruter støtter UPnP og dette er påslått. Map port using &UPnP @@ -1152,8 +1152,8 @@ Adresse: %4 &Språk for brukergrensesnitt - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Språket for brukergrensesnittet kan settes her. Innstillingen trer i kraft ved omstart av Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Språket for brukergrensesnittet kan settes her. Innstillingen trer i kraft ved omstart av pfennig. &Unit to show amounts in: @@ -1164,8 +1164,8 @@ Adresse: %4 Velg standard delt enhet for visning i grensesnittet og for sending av pfennigs. - Whether to show Pfennig addresses in the transaction list or not. - Om Pfennig-adresser skal vises i transaksjonslisten eller ikke. + Whether to show pfennig addresses in the transaction list or not. + Om pfennig-adresser skal vises i transaksjonslisten eller ikke. &Display addresses in transaction list @@ -1219,8 +1219,8 @@ Adresse: %4 Skjema - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig-nettverket etter at tilkobling er opprettet, men denne prosessen er ikke ferdig enda. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig-nettverket etter at tilkobling er opprettet, men denne prosessen er ikke ferdig enda. Wallet @@ -1274,8 +1274,8 @@ Adresse: %4 URI-håndtering - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI kunne ikke tolkes! Dette kan forårsakes av en ugyldig Pfennig-adresse eller feil i URI-parametere. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI kunne ikke tolkes! Dette kan forårsakes av en ugyldig pfennig-adresse eller feil i URI-parametere. Requested payment amount of %1 is too small (considered dust). @@ -1287,7 +1287,7 @@ Adresse: %4 Cannot start pfennig: click-to-pay handler - Kan ikke starte Pfennig: klikk-og-betal håndterer + Kan ikke starte pfennig: klikk-og-betal håndterer Net manager warning @@ -1341,8 +1341,8 @@ Adresse: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,12 +1357,12 @@ Adresse: %4 Feil: Ugyldig kombinasjon av -regtest og -testnet. - Pfennig Core didn't yet exit safely... - Pfennig Core har ennå ikke avsluttet på en sikker måte... + pfennig Core didn't yet exit safely... + pfennig Core har ennå ikke avsluttet på en sikker måte... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Skriv inn en Pfennig-adresse (f.eks. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Skriv inn en pfennig-adresse (f.eks. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,16 +1483,16 @@ Adresse: %4 Loggfil for feilsøk - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Åpne Pfennig sin loggfil for feilsøk fra den gjeldende datamappen. Dette kan ta noen sekunder for store loggfiler. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Åpne pfennig 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 Pfennig RPC console. - Velkommen til Pfennig sin RPC-konsoll. + Welcome to the pfennig RPC console. + Velkommen til pfennig sin RPC-konsoll. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1554,8 +1554,8 @@ Adresse: %4 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 Pfennig 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 Pfennig-nettverket. + 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 pfennig 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 pfennig-nettverket. An optional label to associate with the new receiving address. @@ -1704,7 +1704,7 @@ Adresse: %4 SendCoinsDialog Send Coins - Send Pfennigs + Send pfennigs Coin Control Features @@ -1867,8 +1867,8 @@ Adresse: %4 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 Pfennig address - Advarsel: Ugyldig Pfennig-adresse + Warning: Invalid pfennig address + Advarsel: Ugyldig pfennig-adresse (no label) @@ -1954,8 +1954,8 @@ Adresse: %4 Skriv inn en merkelapp for denne adressen for å legge den til listen av brukte adresser - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. - En melding som var tilknyttet pfennigen: URI vil bli lagret med transaksjonen for din oversikt. Denne meldingen vil ikke bli sendt over Pfennig-nettverket. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. + En melding som var tilknyttet pfennigen: URI vil bli lagret med transaksjonen for din oversikt. Denne meldingen vil ikke bli sendt over pfennig-nettverket. This is an unverified payment request. @@ -1973,8 +1973,8 @@ Adresse: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig Core lukker... + pfennig Core is shutting down... + pfennig Core lukker... Do not shut down the computer until this window disappears. @@ -2028,8 +2028,8 @@ Adresse: %4 Kopier valgt signatur til utklippstavle - Sign the message to prove you own this Pfennig address - Signer meldingen for å bevise at du eier denne Pfennig-adressen + Sign the message to prove you own this pfennig address + Signer meldingen for å bevise at du eier denne pfennig-adressen Sign &Message @@ -2056,8 +2056,8 @@ Adresse: %4 Adressen meldingen var signert med (f.eks. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Verifiser meldingen for å være sikker på at den ble signert av den angitte Pfennig-adressen + Verify the message to ensure it was signed with the specified pfennig address + Verifiser meldingen for å være sikker på at den ble signert av den angitte pfennig-adressen Verify &Message @@ -2068,8 +2068,8 @@ Adresse: %4 Tilbakestill alle felter for meldingsverifikasjon - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Skriv inn en Pfennig-adresse (f.eks. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Skriv inn en pfennig-adresse (f.eks. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2127,12 +2127,12 @@ Adresse: %4 SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core The Bitcoin Core Developers - Pfennig Core utviklerne + pfennig Core utviklerne [testnet] @@ -2553,7 +2553,7 @@ Adresse: %4 WalletModel Send Coins - Send Pfennigs + Send pfennigs @@ -2622,8 +2622,8 @@ Adresse: %4 Angi mappe for datafiler - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Lytt etter tilkoblinger på <port> (standardverdi: P2PPORT eller testnett: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Lytt etter tilkoblinger på <port> (standardverdi: 40002 eller testnett: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2650,16 +2650,16 @@ Adresse: %4 En feil oppstod ved opprettelse av RPC-port %u for IPv4: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Lytt etter JSON-RPC tilkoblinger på <port> (standardverdi: RPCPORT eller testnett: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Lytt etter JSON-RPC tilkoblinger på <port> (standardverdi: 40001 eller testnett: 50000) Accept command line and JSON-RPC commands Ta imot kommandolinje- og JSON-RPC-kommandoer - Pfennig Core RPC client version - Pfennig Core RPC-klientversjon + pfennig Core RPC client version + pfennig Core RPC-klientversjon Run in the background as a daemon and accept commands @@ -2683,7 +2683,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, du må angi rpcpassord i konfigurasjonsfilen. %s @@ -2694,7 +2694,7 @@ 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 "Pfennig Varsel" admin@foo.com +For eksempel: varselmelding=echo %%s | mail -s "pfennig Varsel" admin@foo.com Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -2765,8 +2765,8 @@ For eksempel: varselmelding=echo %%s | mail -s "Pfennig Varsel" admin@ 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. Pfennig Core is probably already running. - Ute av stand til å binde til %s på denne datamaskinen. Pfennig Core kjører sannsynligvis allerede. + Unable to bind to %s on this computer. pfennig Core is probably already running. + Ute av stand til å binde til %s på denne datamaskinen. pfennig Core kjører sannsynligvis allerede. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2777,8 +2777,8 @@ For eksempel: varselmelding=echo %%s | mail -s "Pfennig Varsel" admin@ Advarsel: -paytxfee er satt veldig høyt! Dette er transaksjonsgebyret du betaler når du sender transaksjoner. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Advarsel: Vennligst undersøk at din datamaskin har riktig dato og klokkeslett! Hvis klokken er stilt feil vil ikke Pfennig fungere riktig. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Advarsel: Vennligst undersøk at din datamaskin har riktig dato og klokkeslett! Hvis klokken er stilt feil vil ikke pfennig fungere riktig. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2813,8 +2813,8 @@ For eksempel: varselmelding=echo %%s | mail -s "Pfennig Varsel" admin@ Forsøk å berge private nøkler fra en korrupt wallet.dat - Pfennig Core Daemon - Pfennig Core Daemon + pfennig Core Daemon + pfennig Core Daemon Block creation options: @@ -2833,8 +2833,8 @@ For eksempel: varselmelding=echo %%s | mail -s "Pfennig Varsel" admin@ Koble til via SOCKS proxy - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Koble til JSON-RPC på <port> (default: RPCPORT eller testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Koble til JSON-RPC på <port> (default: 40001 eller testnet: 50000) Connection options: @@ -3057,8 +3057,8 @@ For eksempel: varselmelding=echo %%s | mail -s "Pfennig Varsel" admin@ Importerer blokker fra ekstern fil blk000??.dat - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - Ute av stand til å låse datamappen %s. Pfennig Core kjører sannsynligvis allerede. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + Ute av stand til å låse datamappen %s. pfennig 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) @@ -3121,8 +3121,8 @@ For eksempel: varselmelding=echo %%s | mail -s "Pfennig Varsel" admin@ Skriv ut blokktreet ved oppstart (standardverdi: 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) - RPC SSL-valg: (se Pfennig Wiki for oppsettsinstruksjoner for SSL) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) + RPC SSL-valg: (se pfennig Wiki for oppsettsinstruksjoner for SSL) RPC server options: @@ -3141,12 +3141,12 @@ For eksempel: varselmelding=echo %%s | mail -s "Pfennig Varsel" admin@ Kjør en tråd som skriver lommeboken til disk periodisk (standard: 1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL valg: (se Pfennig Wiki for instruksjoner for oppsett av SSL) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL valg: (se pfennig Wiki for instruksjoner for oppsett av SSL) - Send command to Pfennig Core - Send kommando til Pfennig Core + Send command to pfennig Core + Send kommando til pfennig Core Send trace/debug info to console instead of debug.log file @@ -3181,8 +3181,8 @@ For eksempel: varselmelding=echo %%s | mail -s "Pfennig Varsel" admin@ Angi tidsavbrudd for forbindelse i millisekunder (standardverdi: 5000) - Start Pfennig Core Daemon - Start Pfennig Core Daemon + Start pfennig Core Daemon + Start pfennig Core Daemon System error: @@ -3297,12 +3297,12 @@ For eksempel: varselmelding=echo %%s | mail -s "Pfennig Varsel" admin@ Feil ved lasting av wallet.dat: Lommeboken er skadet - Error loading wallet.dat: Wallet requires newer version of Pfennig - Feil ved lasting av wallet.dat: Lommeboken krever en nyere versjon av Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Feil ved lasting av wallet.dat: Lommeboken krever en nyere versjon av pfennig - Wallet needed to be rewritten: restart Pfennig to complete - Lommeboken måtte skrives om: start Pfennig på nytt for å fullføre + Wallet needed to be rewritten: restart pfennig to complete + Lommeboken måtte skrives om: start pfennig på nytt for å fullføre Error loading wallet.dat diff --git a/src/qt/locale/bitmark_nb.ts~ b/src/qt/locale/bitmark_nb.ts~ new file mode 100644 index 0000000..d1f41c8 --- /dev/null +++ b/src/qt/locale/bitmark_nb.ts~ @@ -0,0 +1,3388 @@ + + + AboutDialog + + About GameCredits Core + Om GameCredits Core + + + <b>GameCredits Core</b> version + <b>GameCredits Core</b> versjon + + + +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. + +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 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 Bitcoin Core Developers + GameCredits Core utviklerne + + + (%1-bit) + (%1-bit) + + + + AddressBookPage + + Double-click to edit address or label + 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 + + + &Copy + &Kopier + + + C&lose + &Lukk + + + &Copy Address + &Kopier Adresse + + + 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 + + + &Delete + &Slett + + + 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Dette er dine GameCredits-adresser for å sende betalinger. Alltid sjekk beløp og mottakeradresse før sending av mynter. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Dette er dine GameCredits-adresser for å sende betalinger. Det er anbefalt å bruk en ny mottaksadresse for hver transaksjon. + + + Copy &Label + Kopier &Merkelapp + + + &Edit + &Rediger + + + Export Address List + Ekporter Adresseliste + + + Comma separated file (*.csv) + Kommaseparert fil (*.csv) + + + Exporting Failed + Ekport Feilet + + + 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) + + + + 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 GameCreditsS</b>! + Advarsel: Hvis du krypterer lommeboken og mister adgangsfrasen, så vil du <b>MISTE ALLE DINE GameCreditsS</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 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å! + + + Wallet encrypted + Lommebok kryptert + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits vil nå lukkes for å fullføre krypteringsprosessen. Husk at kryptering av lommeboken ikke fullt ut kan beskytte dine gamecreditss 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. + + + + GameCreditsGUI + + 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 + + + E&xit + &Avslutt + + + Quit application + Avslutt applikasjonen + + + Show information about GameCredits + Vis informasjon om GameCredits + + + 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... + Reindekserer blokker på harddisk... + + + Send coins to a GameCredits address + Send til en GameCredits-adresse + + + Modify configuration options for GameCredits + Endre oppsett for GameCredits + + + Backup wallet to another location + 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... + + + GameCredits + GameCredits + + + Wallet + Lommebok + + + &Send + &Send + + + &Receive + &Motta + + + &Show / Hide + &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 GameCredits addresses to prove you own them + Signer en melding med GameCredits-adressene dine for å bevise at du eier dem + + + Verify messages to ensure they were signed with specified GameCredits addresses + Bekreft meldinger for å være sikker på at de ble signert av en angitt GameCredits-adresse + + + &File + &Fil + + + &Settings + &Innstillinger + + + &Help + &Hjelp + + + Tabs toolbar + Verktøylinje for faner + + + [testnet] + [testnett] + + + GameCredits Core + GameCredits Core + + + Request payments (generates QR codes and gamecredits: URIs) + Forespør betalinger (genererer QR-koder og gamecredits: URIer) + + + &About GameCredits Core + &Om GameCredits 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 gamecredits: URI or payment request + Åpne en GameCredits: URI eller betalingsetterspørring + + + &Command-line options + &Kommandolinjevalg + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Vis GameCredits Core hjelpemeldingen for å få en liste med mulige kommandolinjevalg + + + GameCredits client + GameCredits-klienten + + + %n active connection(s) to GameCredits network + %n aktiv forbindelse til GameCredits-nettverket%n aktive forbindelser til GameCredits-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 + + + Up to date + Ajour + + + Catching up... + Kommer ajour... + + + Sent transaction + Sendt transaksjon + + + Incoming transaction + Innkommende transaksjon + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Dato: %1 +Beløp: %2 +Type: %3 +Adresse: %4 + + + + 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. GameCredits can no longer continue safely and will quit. + En fatal feil har inntruffet. Det er ikke trygt å fortsette og GameCredits må derfor avslutte. + + + + 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 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 + + + 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 GameCredits address. + Den angitte adressed "%1" er ikke en gyldig GameCredits-adresse. + + + Could not unlock wallet. + Kunne ikke låse opp lommeboken. + + + New key generation failed. + Generering av ny nøkkel feilet. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + GameCredits Core - Kommandolinjevalg + + + GameCredits Core + GameCredits 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 + + + 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 GameCredits Core. + Velkommen til GameCredits Core. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Siden dette er første gang programmet starter, kan du nå velge hvor GameCredits Core skal lagre sine data. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits Core vil laste ned og lagre en kopi av GameCredits 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: + + + GameCredits + GameCredits + + + 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 &transaksjonsgebyr + + + Automatically start GameCredits after logging in to the system. + Start GameCredits automatisk etter innlogging. + + + &Start GameCredits on system login + &Start GameCredits 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 GameCredits network through a SOCKS proxy. + Koble til GameCredits-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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Åpne automatisk GameCredits 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 ved hjelp av &UPnP + + + Proxy &IP: + Proxy &IP: + + + &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 GameCredits. + Språket for brukergrensesnittet kan settes her. Innstillingen trer i kraft ved omstart av GameCredits. + + + &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 gamecreditss. + + + Whether to show GameCredits addresses in the transaction list or not. + Om GameCredits-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 + + + default + standardverdi + + + none + ingen + + + Confirm options reset + Bekreft tilbakestilling av innstillinger + + + Client restart required to activate changes. + Omstart av klienten er nødvendig for å aktivere endringene. + + + Client will be shutdown, do you want to proceed? + Klienten vil bli lukket, vil du fortsette? + + + This change would require a client restart. + Denne endringen krever omstart av klienten. + + + The supplied proxy address is invalid. + Angitt proxyadresse er ugyldig. + + + + OverviewPage + + Form + Skjema + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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 GameCredits-nettverket etter at tilkobling er opprettet, men denne prosessen er ikke ferdig enda. + + + 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> + + + out of sync + ute av synk + + + + PaymentServer + + URI handling + URI-håndtering + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + URI kunne ikke tolkes! Dette kan forårsakes av en ugyldig GameCredits-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 gamecredits: click-to-pay handler + Kan ikke starte GameCredits: 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 + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Feil: Spesifisert datamappe "%1" finnes ikke. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Feil: Kan ikke lese konfigurasjonsfil: %1. Bruk kun syntaksen nøkkel=verdi. + + + Error: Invalid combination of -regtest and -testnet. + Feil: Ugyldig kombinasjon av -regtest og -testnet. + + + GameCredits Core didn't yet exit safely... + GameCredits Core har ennå ikke avsluttet på en sikker måte... + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Skriv inn en GameCredits-adresse (f.eks. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + &Lagre Bilde... + + + &Copy Image + &Kopier Bilde + + + Save QR Code + Lagre QR-kode + + + 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 + + + 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 + + + &Console + &Konsoll + + + &Network Traffic + &Nettverkstrafikk + + + &Clear + &Fjern + + + Totals + Totalt + + + In: + Inn: + + + Out: + Ut: + + + Build date + Byggedato + + + Debug log file + Loggfil for feilsøk + + + Open the GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Åpne GameCredits 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 GameCredits RPC console. + Velkommen til GameCredits 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 GameCredits 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 GameCredits-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 GameCreditss + + + 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 en mottaker + + + Add &Recipient + Legg til &Mottaker + + + Clear all fields of the form. + Fjern alle felter fra skjemaet. + + + Clear &All + Fjern &Alt + + + Balance: + Saldo: + + + Confirm the send action + Bekreft sending + + + S&end + S&end + + + Confirm send coins + Bekreft sending av gamecreditss + + + %1 to %2 + %1 til %2 + + + 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ø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. + Doble antall adresser funnet. Kan bare sende en gang til hver adresse per operasjon. + + + Transaction creation failed! + Opprettelse av transaksjon feilet! + + + 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 GameCredits address + Advarsel: Ugyldig GameCredits-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 + + A&mount: + &Beløp: + + + Pay &To: + Betal &Til: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adressen betalingen skal sendes til (f.eks. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + Fjern denne oppføringen + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + En melding som var tilknyttet gamecreditsen: URI vil bli lagret med transaksjonen for din oversikt. Denne meldingen vil ikke bli sendt over GameCredits-nettverket. + + + This is an unverified payment request. + Dette er en uverifisert betalingsetterspørring + + + Pay To: + Betal Til: + + + Memo: + Memo: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits 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 + + + &Sign Message + &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 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adressen for signering av meldingen (f.eks. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Signer meldingen for å bevise at du eier denne GameCredits-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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adressen meldingen var signert med (f.eks. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Verifiser meldingen for å være sikker på at den ble signert av den angitte GameCredits-adressen + + + Verify &Message + Verifiser &Melding + + + Reset all verify message fields + Tilbakestill alle felter for meldingsverifikasjon + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Skriv inn en GameCredits-adresse (f.eks. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Klikk "Signer Melding" for å generere 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. + + + + SplashScreen + + GameCredits Core + GameCredits Core + + + The Bitcoin Core Developers + GameCredits 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 + + + 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 gamecreditss 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 med hell enda + + + Open for %n more block(s) + Åpen for %n blokk tilÅpen for %n blokker til + + + unknown + ukjent + + + + TransactionDescDialog + + Transaction details + Transaksjonsdetaljer + + + This pane shows a detailed description of the transaction + Her vises en detaljert beskrivelse av transaksjonen + + + + 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 + + + Confirmed (%1 confirmations) + Bekreftet (%1 bekreftelser) + + + 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. + + + Amount removed from or added to balance. + Beløp fjernet eller lagt til saldo. + + + + 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 + Kopier beløp + + + Copy transaction ID + Kopier transaksjons-ID + + + Edit label + Rediger merkelapp + + + Show transaction details + Vis transaksjonsdetaljer + + + 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 + + + Range: + Intervall: + + + to + til + + + + WalletFrame + + No wallet has been loaded. + Ingen lommebok har blitt lastet. + + + + WalletModel + + Send Coins + Send GameCreditss + + + + 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 + + + Wallet Data (*.dat) + Lommebokdata (*.dat) + + + Backup Failed + Sikkerhetskopiering Feilet + + + 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 + + + + gamecredits-core + + Usage: + Bruk: + + + List commands + List opp kommandoer + + + Get help for a command + Vis hjelpetekst for en kommando + + + Options: + Innstillinger: + + + Specify configuration file (default: gamecredits.conf) + Angi konfigurasjonsfil (standardverdi: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Angi pid-fil (standardverdi: gamecreditsd.pid) + + + Specify data directory + Angi mappe for datafiler + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Lytt etter tilkoblinger på <port> (standardverdi: 40002 eller testnett: 50001) + + + 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 IPv4: %s + + + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Lytt etter JSON-RPC tilkoblinger på <port> (standardverdi: 40001 eller testnett: 50000) + + + Accept command line and JSON-RPC commands + Ta imot kommandolinje- og JSON-RPC-kommandoer + + + GameCredits Core RPC client version + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, du må angi rpcpassord i konfigurasjonsfilen. +%s +Det anbefales at du bruker det følgende tilfeldige passordet: +rpcbruker=gamecreditsrpc +rpcpassord=%s +(du behøver ikke å huske passordet) +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 "GameCredits 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 + + + 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 + + + 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 wallet transaction changes (%s in cmd is replaced by TxID) + Kjør kommando når en lommeboktransaksjon endres (%s i kommando er erstattet med TxID) + + + 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. GameCredits Core is probably already running. + Ute av stand til å binde til %s på denne datamaskinen. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Advarsel: Vennligst undersøk at din datamaskin har riktig dato og klokkeslett! Hvis klokken er stilt feil vil ikke GameCredits 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 + + + GameCredits Core Daemon + GameCredits 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: 40001 or testnet: 50000) + Koble til JSON-RPC på <port> (default: 40001 eller testnet: 50000) + + + 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 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 gamecredits 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 oppgitt) + + + Force safe mode (default: 0) + Tving sikkerhetsmodus (standard: 0) + + + Generate coins (default: 0) + Generer gamecreditss (standardverdi: 0) + + + How many blocks to check at startup (default: 288, 0 = all) + Hvor mange blokker skal sjekkes ved oppstart (standardverdi: 288, 0 = alle) + + + 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 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 gamecredits-cli): + Bruk (foreldet, bruk gamecredits-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 + + + Cannot obtain a lock on data directory %s. GameCredits Core is probably already running. + Ute av stand til å låse datamappen %s. GameCredits 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 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) + + + Print block on startup, if found in block index + Skriv ut blokken ved oppstart, hvis funnet i blokkindeksen + + + Print block tree on startup (default: 0) + Skriv ut blokktreet ved oppstart (standardverdi: 0) + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + RPC SSL-valg: (se GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL valg: (se GameCredits Wiki for instruksjoner for oppsett av SSL) + + + Send command to GameCredits Core + Send kommando til GameCredits Core + + + Send trace/debug info to console instead of debug.log file + Send spor-/feilsøkingsinformasjon til konsollen istedenfor filen debug.log + + + 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 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 GameCredits Core Daemon + Start GameCredits 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) + + + 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! + + + 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) + Utfør kommando når beste blokk endrer seg (%s i kommandoen erstattes med blokkens hash) + + + Upgrade wallet to latest format + Oppgrader lommebok til nyeste format + + + Set key pool size to <n> (default: 100) + Angi størrelsen på nøkkellageret til <n> (standardverdi: 100) + + + Rescan the block chain for missing wallet transactions + 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) + + + 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) + + + Allow DNS lookups for -addnode, -seednode and -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 GameCredits + Feil ved lasting av wallet.dat: Lommeboken krever en nyere versjon av GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + Lommeboken måtte skrives om: start GameCredits 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 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 + + + 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. + Du må sette rpcpassword=<passord> i konfigurasjonsfilen: +%s +Hvis filen ikke finnes, opprett den med leserettighet kun for eier av filen. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_nl.ts b/src/qt/locale/bitmark_nl.ts index 9a39062..3ff7215 100644 --- a/src/qt/locale/bitmark_nl.ts +++ b/src/qt/locale/bitmark_nl.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Over Pfennig Core + About pfennig Core + Over pfennig Core - <b>Pfennig Core</b> version - <b> Pfennig Core</b> versie + <b>pfennig Core</b> version + <b> pfennig Core</b> versie @@ -29,7 +29,7 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d The Bitcoin Core Developers - De Pfennig Core ontwikkelaars + De pfennig Core ontwikkelaars (%1-bit) @@ -103,12 +103,12 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d Adressen ontvangen - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Dit zijn uw Pfennigadressen om betalingen mee te verzenden. Check altijd het bedrag en het ontvangende adres voordat u uw pfennigs verzendt. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Dit zijn uw pfennigadressen om betalingen mee te verzenden. Check altijd het bedrag en het ontvangende adres voordat u uw pfennigs verzendt. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Dit zijn uw Pfennig-adressen waarmee u kunt betalen. We raden u aan om een nieuw ontvangstadres voor elke transactie te gebruiken. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Dit zijn uw pfennig-adressen waarmee u kunt betalen. We raden u aan om een nieuw ontvangstadres voor elke transactie te gebruiken. Copy &Label @@ -205,8 +205,8 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d Bevestig versleuteling van de portemonnee - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Waarschuwing: Als u uw portemonnee versleutelt en uw wachtwoord vergeet, zult u <b>AL UW PfennigS VERLIEZEN</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Waarschuwing: Als u uw portemonnee versleutelt en uw wachtwoord vergeet, zult u <b>AL UW pfennigS VERLIEZEN</b>! Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d Portemonnee versleuteld - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig 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 pfennigs stelen. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig 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 pfennigs stelen. Wallet encryption failed @@ -258,7 +258,7 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d - PfennigGUI + pfennigGUI Sign &message... &Onderteken bericht... @@ -296,8 +296,8 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d Programma afsluiten - Show information about Pfennig - Laat informatie zien over Pfennig + Show information about pfennig + Laat informatie zien over pfennig About &Qt @@ -344,12 +344,12 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d Bezig met herindexeren van blokken op harde schijf... - Send coins to a Pfennig address - Verstuur munten naar een Pfennigadres + Send coins to a pfennig address + Verstuur munten naar een pfennigadres - Modify configuration options for Pfennig - Wijzig instellingen van Pfennig + Modify configuration options for pfennig + Wijzig instellingen van pfennig Backup wallet to another location @@ -372,8 +372,8 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d &Verifiëer bericht... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d Versleutel de geheime sleutels die bij uw portemonnee horen - Sign messages with your Pfennig addresses to prove you own them - Onderteken berichten met uw Pfennigadressen om te bewijzen dat u deze adressen bezit + Sign messages with your pfennig addresses to prove you own them + Onderteken berichten met uw pfennigadressen om te bewijzen dat u deze adressen bezit - Verify messages to ensure they were signed with specified Pfennig addresses - Verifiëer handtekeningen om zeker te zijn dat de berichten zijn ondertekend met de gespecificeerde Pfennigadressen + Verify messages to ensure they were signed with specified pfennig addresses + Verifiëer handtekeningen om zeker te zijn dat de berichten zijn ondertekend met de gespecificeerde pfennigadressen &File @@ -428,16 +428,16 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d [testnetwerk] - Pfennig Core - Pfennig Kern + pfennig Core + pfennig Kern Request payments (generates QR codes and pfennig: URIs) Vraag betaling aan (genereert QR codes en pfennig: URIs) - &About Pfennig Core - &Over Pfennig Core + &About pfennig Core + &Over pfennig Core Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ Dit product bevat software ontwikkeld door het OpenSSL Project voor gebruik in d &Commandoregel-opties - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Toon het Pfennig Core hulpbericht om een lijst te krijgen met mogelijke Pfennig commandoregelopties + Show the pfennig Core help message to get a list with possible pfennig command-line options + Toon het pfennig Core hulpbericht om een lijst te krijgen met mogelijke pfennig commandoregelopties - Pfennig client - Pfennig client + pfennig client + pfennig client - %n active connection(s) to Pfennig network - %n actieve connectie naar Pfennignetwerk%n actieve connecties naar Pfennignetwerk + %n active connection(s) to pfennig network + %n actieve connectie naar pfennignetwerk%n actieve connecties naar pfennignetwerk No block source available... @@ -560,8 +560,8 @@ Adres: %4 Portemonnee is <b>versleuteld</b> en momenteel <b>gesloten</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Er is een fatale fout opgetreden. Pfennig kan niet meer veilig doorgaan en zal nu afgesloten worden. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Er is een fatale fout opgetreden. pfennig kan niet meer veilig doorgaan en zal nu afgesloten worden. @@ -845,8 +845,8 @@ Adres: %4 Het opgegeven adres "%1" bestaat al in uw adresboek. - The entered address "%1" is not a valid Pfennig address. - Het opgegeven adres "%1" is een ongeldig Pfennigadres + The entered address "%1" is not a valid pfennig address. + Het opgegeven adres "%1" is een ongeldig pfennigadres Could not unlock wallet. @@ -883,12 +883,12 @@ Adres: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core - Commandoregel-opties + pfennig Core - Command-line options + pfennig Core - Commandoregel-opties - Pfennig Core - Pfennig Kern + pfennig Core + pfennig Kern version @@ -934,16 +934,16 @@ Adres: %4 Welkom - Welcome to Pfennig Core. - Welkom bij Pfennig Core + Welcome to pfennig Core. + Welkom bij pfennig Core - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Omdat dit de eerste keer is dat het programma gestart is, kunt u nu kiezen waar Pfennig Core de data moet opslaan. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Omdat dit de eerste keer is dat het programma gestart is, kunt u nu kiezen waar pfennig Core de data moet opslaan. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig Core zal een kopie van de Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. + pfennig Core zal een kopie van de pfennig 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 @@ -954,8 +954,8 @@ Adres: %4 Gebruik een persoonlijke gegevensmap: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,12 +1016,12 @@ Adres: %4 Betaal &transactiekosten - Automatically start Pfennig after logging in to the system. - Start Pfennig automatisch na inloggen in het systeem + Automatically start pfennig after logging in to the system. + Start pfennig automatisch na inloggen in het systeem - &Start Pfennig on system login - Start &Pfennig bij het inloggen in het systeem + &Start pfennig on system login + Start &pfennig bij het inloggen in het systeem Size of &database cache @@ -1036,8 +1036,8 @@ Adres: %4 Aantal threads voor &scriptverificatie - Connect to the Pfennig network through a SOCKS proxy. - Verbind met het Pfennig-netwerk via een SOCKS-proxy. + Connect to the pfennig network through a SOCKS proxy. + Verbind met het pfennig-netwerk via een SOCKS-proxy. &Connect through SOCKS proxy (default proxy): @@ -1096,8 +1096,8 @@ Adres: %4 &Spendeer onbevestigd wisselgeld - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Open de Pfennig-poort automatisch op de router. Dit werkt alleen als de router UPnP ondersteunt en het aanstaat. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Open de pfennig-poort automatisch op de router. Dit werkt alleen als de router UPnP ondersteunt en het aanstaat. Map port using &UPnP @@ -1152,8 +1152,8 @@ Adres: %4 Taal &Gebruikersinterface: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - De taal van de gebruikersinterface kan hier ingesteld worden. Deze instelling zal pas van kracht worden nadat Pfennig herstart wordt. + The user interface language can be set here. This setting will take effect after restarting pfennig. + De taal van de gebruikersinterface kan hier ingesteld worden. Deze instelling zal pas van kracht worden nadat pfennig herstart wordt. &Unit to show amounts in: @@ -1164,8 +1164,8 @@ Adres: %4 Kies de standaard onderverdelingseenheid om weer te geven in uw programma, en voor het versturen van munten - Whether to show Pfennig addresses in the transaction list or not. - Of Pfennigadressen getoond worden in de transactielijst + Whether to show pfennig addresses in the transaction list or not. + Of pfennigadressen getoond worden in de transactielijst &Display addresses in transaction list @@ -1219,8 +1219,8 @@ Adres: %4 Vorm - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennignetwerk nadat een verbinding is gelegd, maar dit proces is nog niet voltooid. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennignetwerk nadat een verbinding is gelegd, maar dit proces is nog niet voltooid. Wallet @@ -1274,8 +1274,8 @@ Adres: %4 URI-behandeling - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI kan niet worden geïnterpreteerd. Dit kan komen door een ongeldig Pfennigadres of misvormde URI-parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI kan niet worden geïnterpreteerd. Dit kan komen door een ongeldig pfennigadres of misvormde URI-parameters. Requested payment amount of %1 is too small (considered dust). @@ -1341,8 +1341,8 @@ Adres: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,12 +1357,12 @@ Adres: %4 Fout: Ongeldige combinatie van -regtest en -testnet - Pfennig Core didn't yet exit safely... - Pfennig Core is nog niet veilig uitgeschakeld... + pfennig Core didn't yet exit safely... + pfennig Core is nog niet veilig uitgeschakeld... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Vul een Pfennigadres in (bijv. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Vul een pfennigadres in (bijv. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,16 +1483,16 @@ Adres: %4 Debug-logbestand - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Open het Pfennigdebug-logbestand van de huidige datamap. Dit kan een aantal seconden duren voor grote logbestanden. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open het pfennigdebug-logbestand van de huidige datamap. Dit kan een aantal seconden duren voor grote logbestanden. Clear console Maak console leeg - Welcome to the Pfennig RPC console. - Welkom bij de Pfennig RPC-console. + Welcome to the pfennig RPC console. + Welkom bij de pfennig RPC-console. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1554,8 +1554,8 @@ Adres: %4 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 Pfennig 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 Pfennig netwerk. + 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 pfennig 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 pfennig netwerk. An optional label to associate with the new receiving address. @@ -1867,8 +1867,8 @@ Adres: %4 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 Pfennig address - Waarschuwing: Ongeldig Pfennig adres + Warning: Invalid pfennig address + Waarschuwing: Ongeldig pfennig adres (no label) @@ -1954,8 +1954,8 @@ Adres: %4 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 pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. - Een bericht dat werd toegevoegd aan de pfennig: URI dewelke wordt opgeslagen met de transactie ter referentie. Opmerking: Dit bericht zal niet worden verzonden over het Pfennig netwerk. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. + Een bericht dat werd toegevoegd aan de pfennig: URI dewelke wordt opgeslagen met de transactie ter referentie. Opmerking: Dit bericht zal niet worden verzonden over het pfennig netwerk. This is an unverified payment request. @@ -1973,8 +1973,8 @@ Adres: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig Core is aan het afsluiten... + pfennig Core is shutting down... + pfennig Core is aan het afsluiten... Do not shut down the computer until this window disappears. @@ -2028,8 +2028,8 @@ Adres: %4 Kopieer de huidige handtekening naar het systeemklembord - Sign the message to prove you own this Pfennig address - Onderteken een bericht om te bewijzen dat u een bepaald Pfennigadres bezit + Sign the message to prove you own this pfennig address + Onderteken een bericht om te bewijzen dat u een bepaald pfennigadres bezit Sign &Message @@ -2056,8 +2056,8 @@ Adres: %4 Het adres waarmee bet bericht was ondertekend (Vb.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR). - Verify the message to ensure it was signed with the specified Pfennig address - Controleer een bericht om te verifiëren dat het gespecificeerde Pfennigadres het bericht heeft ondertekend. + Verify the message to ensure it was signed with the specified pfennig address + Controleer een bericht om te verifiëren dat het gespecificeerde pfennigadres het bericht heeft ondertekend. Verify &Message @@ -2068,8 +2068,8 @@ Adres: %4 Verwijder alles in de invulvelden - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Vul een Pfennigadres in (bijv. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Vul een pfennigadres in (bijv. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2127,12 +2127,12 @@ Adres: %4 SplashScreen - Pfennig Core - Pfennig Kern + pfennig Core + pfennig Kern The Bitcoin Core Developers - De Pfennig Core ontwikkelaars + De pfennig Core ontwikkelaars [testnet] @@ -2624,8 +2624,8 @@ Adres: %4 Stel datamap in - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Luister voor verbindingen op <poort> (standaard: P2PPORT of testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Luister voor verbindingen op <poort> (standaard: 40002 of testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2652,16 +2652,16 @@ Adres: %4 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: RPCPORT or testnet: 1RPCPORT) - Wacht op JSON-RPC-connecties op poort <port> (standaard: RPCPORT of testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Wacht op JSON-RPC-connecties op poort <port> (standaard: 40001 of testnet: 50000) Accept command line and JSON-RPC commands Aanvaard commandoregel- en JSON-RPC-commando's - Pfennig Core RPC client version - Pfennig Core RPC-client versie + pfennig Core RPC client version + pfennig Core RPC-client versie Run in the background as a daemon and accept commands @@ -2685,7 +2685,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, u moet een RPC-wachtwoord instellen in het configuratiebestand: %s U wordt aangeraden het volgende willekeurige wachtwoord te gebruiken: @@ -2695,7 +2695,7 @@ 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; -bijvoorbeeld: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com +bijvoorbeeld: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -2766,8 +2766,8 @@ bijvoorbeeld: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo 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. Pfennig Core is probably already running. - Niet in staat om %s te verbinden op deze computer. Pfennig Core draait waarschijnlijk al. + Unable to bind to %s on this computer. pfennig Core is probably already running. + Niet in staat om %s te verbinden op deze computer. pfennig Core draait waarschijnlijk al. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2778,8 +2778,8 @@ bijvoorbeeld: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Waarschuwing: -paytxfee is zeer hoog ingesteld. Dit zijn de transactiekosten die u betaalt bij het versturen van een transactie. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Waarschuwing: Controleer dat de datum en tijd op uw computer correct zijn ingesteld. Als uw klok fout staat zal Pfennig niet correct werken. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Waarschuwing: Controleer dat de datum en tijd op uw computer correct zijn ingesteld. Als uw klok fout staat zal pfennig niet correct werken. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2814,8 +2814,8 @@ bijvoorbeeld: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Poog de geheime sleutels uit een corrupt wallet.dat bestand terug te halen - Pfennig Core Daemon - Pfennig Core Daemon + pfennig Core Daemon + pfennig Core Daemon Block creation options: @@ -2834,8 +2834,8 @@ bijvoorbeeld: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Verbind via een SOCKS-proxy - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Verbinden met JSON-RPC op <poort> (standaard: RPCPORT of testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Verbinden met JSON-RPC op <poort> (standaard: 40001 of testnet: 50000) Connection options: @@ -3023,7 +3023,7 @@ bijvoorbeeld: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Usage (deprecated, use pfennig-cli): - Gebruik (vervangen; gebruik Pfennig-cli); + Gebruik (vervangen; gebruik pfennig-cli); Verifying blocks... @@ -3058,8 +3058,8 @@ bijvoorbeeld: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Importeert blokken van extern blk000??.dat bestand - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - Kan geen lock verkrijgen op gegevensmap %s. Pfennig Core draait waarschijnlijk al. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + Kan geen lock verkrijgen op gegevensmap %s. pfennig 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) @@ -3122,8 +3122,8 @@ bijvoorbeeld: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Toon block structuur bij opstarten (default: 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) - RPC SSL opties: (zie de Pfennig Wiki voor SSL installatie-instructies) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) + RPC SSL opties: (zie de pfennig Wiki voor SSL installatie-instructies) RPC server options: @@ -3142,12 +3142,12 @@ bijvoorbeeld: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Draai een proces om de wallet periodiek te flushen (default: 1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL-opties: (zie de Pfennig wiki voor SSL-instructies) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL-opties: (zie de pfennig wiki voor SSL-instructies) - Send command to Pfennig Core - Stuur commando naar Pfennig Core + Send command to pfennig Core + Stuur commando naar pfennig Core Send trace/debug info to console instead of debug.log file @@ -3182,8 +3182,8 @@ bijvoorbeeld: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Specificeer de time-outtijd in milliseconden (standaard: 5000) - Start Pfennig Core Daemon - Start Pfennig Core Daemon + Start pfennig Core Daemon + Start pfennig Core Daemon System error: @@ -3298,12 +3298,12 @@ bijvoorbeeld: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Fout bij laden wallet.dat: Portemonnee corrupt - Error loading wallet.dat: Wallet requires newer version of Pfennig - Fout bij laden wallet.dat: Portemonnee vereist een nieuwere versie van Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Fout bij laden wallet.dat: Portemonnee vereist een nieuwere versie van pfennig - Wallet needed to be rewritten: restart Pfennig to complete - Portemonnee moest herschreven worden: Herstart Pfennig om te voltooien + Wallet needed to be rewritten: restart pfennig to complete + Portemonnee moest herschreven worden: Herstart pfennig om te voltooien Error loading wallet.dat diff --git a/src/qt/locale/bitmark_nl.ts~ b/src/qt/locale/bitmark_nl.ts~ new file mode 100644 index 0000000..261a2cd --- /dev/null +++ b/src/qt/locale/bitmark_nl.ts~ @@ -0,0 +1,3389 @@ + + + AboutDialog + + About GameCredits Core + Over GameCredits Core + + + <b>GameCredits Core</b> version + <b> GameCredits Core</b> versie + + + +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. + +Dit is experimentele software. + +Gedistribueerd onder de MIT/X11 software licentie, zie het bijgevoegde bestand COPYING of http://www.opensource.org/licenses/mit-license.php. + +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 Bitcoin Core Developers + De GameCredits Core ontwikkelaars + + + (%1-bit) + (%1-bit) + + + + AddressBookPage + + 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 + + + &Copy + &Kopieer + + + C&lose + S&luiten + + + &Copy Address + &Kopiëer Adres + + + 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 + + + &Delete + &Verwijder + + + 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Dit zijn uw GameCreditsadressen om betalingen mee te verzenden. Check altijd het bedrag en het ontvangende adres voordat u uw gamecreditss verzendt. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Dit zijn uw GameCredits-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 + + + Export Address List + Exporteer adreslijst + + + Comma separated file (*.csv) + Kommagescheiden bestand (*.csv) + + + Exporting Failed + Export Mislukt + + + 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) + + + + AskPassphraseDialog + + Passphrase Dialog + Wachtwoorddialoogscherm + + + Enter passphrase + Voer wachtwoord in + + + New passphrase + Nieuw wachtwoord + + + Repeat new passphrase + 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> . + + + 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 GameCreditsS</b>! + Waarschuwing: Als u uw portemonnee versleutelt en uw wachtwoord vergeet, zult u <b>AL UW GameCreditsS 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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits 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 gamecreditss 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. + + + + GameCreditsGUI + + 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 + + + E&xit + &Afsluiten + + + Quit application + Programma afsluiten + + + Show information about GameCredits + Laat informatie zien over GameCredits + + + 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 GameCredits address + Verstuur munten naar een GameCreditsadres + + + Modify configuration options for GameCredits + Wijzig instellingen van GameCredits + + + Backup wallet to another location + 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... + + + GameCredits + GameCredits + + + Wallet + Portemonnee + + + &Send + &Versturen + + + &Receive + &Ontvangen + + + &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 GameCredits addresses to prove you own them + Onderteken berichten met uw GameCreditsadressen om te bewijzen dat u deze adressen bezit + + + Verify messages to ensure they were signed with specified GameCredits addresses + Verifiëer handtekeningen om zeker te zijn dat de berichten zijn ondertekend met de gespecificeerde GameCreditsadressen + + + &File + &Bestand + + + &Settings + &Instellingen + + + &Help + &Hulp + + + Tabs toolbar + Tab-werkbalk + + + [testnet] + [testnetwerk] + + + GameCredits Core + GameCredits Kern + + + Request payments (generates QR codes and gamecredits: URIs) + Vraag betaling aan (genereert QR codes en gamecredits: URIs) + + + &About GameCredits Core + &Over GameCredits 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 gamecredits: URI or payment request + Open een gamecredits: URI of betalingsverzoek + + + &Command-line options + &Commandoregel-opties + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Toon het GameCredits Core hulpbericht om een lijst te krijgen met mogelijke GameCredits commandoregelopties + + + GameCredits client + GameCredits client + + + %n active connection(s) to GameCredits network + %n actieve connectie naar GameCreditsnetwerk%n actieve connecties naar GameCreditsnetwerk + + + 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 + + + Up to date + Bijgewerkt + + + Catching up... + Aan het bijwerken... + + + Sent transaction + Verzonden transactie + + + Incoming transaction + Binnenkomende transactie + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Datum: %1 +Bedrag: %2 +Type: %3 +Adres: %4 + + + + 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. GameCredits can no longer continue safely and will quit. + Er is een fatale fout opgetreden. GameCredits kan niet meer veilig doorgaan en zal nu afgesloten worden. + + + + 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 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 + + + 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 GameCredits address. + Het opgegeven adres "%1" is een ongeldig GameCreditsadres + + + Could not unlock wallet. + Kon de portemonnee niet openen. + + + New key generation failed. + Genereren nieuwe sleutel mislukt. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + GameCredits Core - Commandoregel-opties + + + GameCredits Core + GameCredits 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 GameCredits Core. + Welkom bij GameCredits Core + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Omdat dit de eerste keer is dat het programma gestart is, kunt u nu kiezen waar GameCredits Core de data moet opslaan. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits Core zal een kopie van de GameCredits 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: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Start GameCredits automatisch na inloggen in het systeem + + + &Start GameCredits on system login + Start &GameCredits 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 GameCredits network through a SOCKS proxy. + Verbind met het GameCredits-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 + + + (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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Open de GameCredits-poort automatisch op de router. Dit werkt alleen als de router UPnP ondersteunt en het aanstaat. + + + Map port using &UPnP + Portmapping via &UPnP + + + Proxy &IP: + Proxy &IP: + + + &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 GameCredits. + De taal van de gebruikersinterface kan hier ingesteld worden. Deze instelling zal pas van kracht worden nadat GameCredits 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 GameCredits addresses in the transaction list or not. + Of GameCreditsadressen 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 + + + default + standaard + + + none + geen + + + Confirm options reset + Bevestig reset opties + + + Client restart required to activate changes. + Herstart van de client is vereist om veranderingen door te voeren. + + + Client will be shutdown, do you want to proceed? + De client zal worden afgesloten, wilt u doorgaan? + + + This change would require a client restart. + Om dit aan te passen moet de client opnieuw gestart worden. + + + The supplied proxy address is invalid. + Het opgegeven proxyadres is ongeldig. + + + + OverviewPage + + Form + Vorm + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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 GameCreditsnetwerk nadat een verbinding is gelegd, maar dit proces is nog niet voltooid. + + + 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> + + + out of sync + niet gesynchroniseerd + + + + PaymentServer + + URI handling + URI-behandeling + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + URI kan niet worden geïnterpreteerd. Dit kan komen door een ongeldig GameCreditsadres 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 gamecredits: click-to-pay handler + Kan gamecredits 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 + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Fout: Opgegeven gegevensmap "%1" bestaat niet. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Fout: Kan configuratiebestand niet parsen: %1. Gebruik enkel de key=value syntax. + + + Error: Invalid combination of -regtest and -testnet. + Fout: Ongeldige combinatie van -regtest en -testnet + + + GameCredits Core didn't yet exit safely... + GameCredits Core is nog niet veilig uitgeschakeld... + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Vul een GameCreditsadres in (bijv. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + &Afbeelding opslaan... + + + &Copy Image + &Afbeelding kopiëren + + + Save QR Code + Sla QR-code op + + + 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 + + + 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 + + + &Console + &Console + + + &Network Traffic + &Netwerkverkeer + + + &Clear + &Wissen + + + Totals + Totalen + + + In: + In; + + + Out: + Uit: + + + Build date + Bouwdatum + + + Debug log file + Debug-logbestand + + + Open the GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Open het GameCreditsdebug-logbestand van de huidige datamap. Dit kan een aantal seconden duren voor grote logbestanden. + + + Clear console + Maak console leeg + + + Welcome to the GameCredits RPC console. + Welkom bij de GameCredits 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 GameCredits 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 GameCredits 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 + + + Clear all fields of the form. + Wis alle velden van het formulier. + + + Clear &All + Verwijder &Alles + + + Balance: + Saldo: + + + Confirm the send action + Bevestig de verstuuractie + + + S&end + &Verstuur + + + Confirm send coins + Bevestig versturen munten + + + %1 to %2 + %1 tot %2 + + + 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 + + + Transaction creation failed! + Transactie creatie niet gelukt! + + + 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 GameCredits address + Waarschuwing: Ongeldig GameCredits 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 + + A&mount: + Bedra&g: + + + Pay &To: + Betaal &Aan: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Het adres waaraan u wilt betalen (bijv. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + Verwijder deze toevoeging + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + Een bericht dat werd toegevoegd aan de gamecredits: URI dewelke wordt opgeslagen met de transactie ter referentie. Opmerking: Dit bericht zal niet worden verzonden over het GameCredits netwerk. + + + This is an unverified payment request. + Dit is een ongeverifieerd betalingsverzoek. + + + Pay To: + Betaal Aan: + + + Memo: + Memo: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Het adres om het bericht mee te ondertekenen (Vb.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR). + + + 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 GameCredits address + Onderteken een bericht om te bewijzen dat u een bepaald GameCreditsadres 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Het adres waarmee bet bericht was ondertekend (Vb.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR). + + + Verify the message to ensure it was signed with the specified GameCredits address + Controleer een bericht om te verifiëren dat het gespecificeerde GameCreditsadres het bericht heeft ondertekend. + + + Verify &Message + Verifiëer &Bericht + + + Reset all verify message fields + Verwijder alles in de invulvelden + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Vul een GameCreditsadres in (bijv. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Klik "Onderteken Bericht" om de handtekening te genereren + + + 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. + + + + SplashScreen + + GameCredits Core + GameCredits Kern + + + The Bitcoin Core Developers + De GameCredits 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: + + + 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 + + + + TransactionDescDialog + + Transaction details + Transactiedetails + + + This pane shows a detailed description of the transaction + Dit venster laat een uitgebreide beschrijving van de transactie zien + + + + 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 + + + Confirmed (%1 confirmations) + Bevestigd (%1 bevestigingen) + + + 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 + + + + 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 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 + + + Range: + Bereik: + + + to + naar + + + + WalletFrame + + No wallet has been loaded. + Portemonnee werd niet geladen. + + + + WalletModel + + Send Coins + Verstuur munten + + + + 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 + Portemonnee backuppen + + + Wallet Data (*.dat) + Portemonnee-data (*.dat) + + + Backup Failed + Backup Mislukt + + + 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 + + + + gamecredits-core + + Usage: + Gebruik: + + + List commands + Lijst van commando's + + + Get help for a command + Toon hulp voor een commando + + + Options: + Opties: + + + Specify configuration file (default: gamecredits.conf) + Specificeer configuratiebestand (standaard: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + Specificeer pid-bestand (standaard: gamecreditsd.pid) + + + + Specify data directory + Stel datamap in + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Luister voor verbindingen op <poort> (standaard: 40002 of testnet: 50001) + + + 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: 40001 or testnet: 50000) + Wacht op JSON-RPC-connecties op poort <port> (standaard: 40001 of testnet: 50000) + + + Accept command line and JSON-RPC commands + Aanvaard commandoregel- en JSON-RPC-commando's + + + GameCredits Core RPC client version + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, u moet een RPC-wachtwoord instellen in het configuratiebestand: %s +U wordt aangeraden het volgende willekeurige wachtwoord te gebruiken: +rpcuser=gamecreditsrpc +rpcpassword=%s +(u hoeft dit wachtwoord niet te onthouden) +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; +bijvoorbeeld: alertnotify=echo %%s | mail -s "GameCredits 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 + + + 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 wallet transaction changes (%s in cmd is replaced by TxID) + Voer opdracht uit zodra een portemonneetransactie verandert (%s in cmd wordt vervangen door TxID) + + + 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. GameCredits Core is probably already running. + Niet in staat om %s te verbinden op deze computer. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Waarschuwing: Controleer dat de datum en tijd op uw computer correct zijn ingesteld. Als uw klok fout staat zal GameCredits 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 + + + GameCredits Core Daemon + GameCredits 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: 40001 or testnet: 50000) + Verbinden met JSON-RPC op <poort> (standaard: 40001 of testnet: 50000) + + + 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) + + + 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. + + + 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 gamecredits-cli): + Gebruik (vervangen; gebruik GameCredits-cli); + + + Verifying blocks... + Blokken aan het controleren... + + + Verifying wallet... + 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 + + + Cannot obtain a lock on data directory %s. GameCredits Core is probably already running. + Kan geen lock verkrijgen op gegevensmap %s. GameCredits 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 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) + + + Print block on startup, if found in block index + Toon block bij opstarten, wanneer gevonden in block index + + + Print block tree on startup (default: 0) + Toon block structuur bij opstarten (default: 0) + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + RPC SSL opties: (zie de GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL-opties: (zie de GameCredits wiki voor SSL-instructies) + + + Send command to GameCredits Core + Stuur commando naar GameCredits 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 + + + 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 GameCredits Core Daemon + Start GameCredits 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) + + + 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! + + + 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) + + + 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) + + + 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 GameCredits + Fout bij laden wallet.dat: Portemonnee vereist een nieuwere versie van GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + Portemonnee moest herschreven worden: Herstart GameCredits 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 + + + 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. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_pam.ts b/src/qt/locale/bitmark_pam.ts index 7efc27d..da775a2 100644 --- a/src/qt/locale/bitmark_pam.ts +++ b/src/qt/locale/bitmark_pam.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -101,11 +101,11 @@ Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project p - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Reni reng kekang Pfennig address king pamagpadalang kabayaran. Lawan mulang masalese reng alaga ampo ing address na ning tumanggap bayu ka magpadalang barya. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Reni reng kekang pfennig address king pamagpadalang kabayaran. Lawan mulang masalese reng alaga ampo ing address na ning tumanggap bayu ka magpadalang barya. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -203,8 +203,8 @@ Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project p Kumpirman ya ing wallet encryption - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Kapabaluan: Istung in-encrypt me ing kekang wallet at meala ya ing passphrase na, ma-<b>ALA NO NGAN RING KEKANG PfennigS</b> + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Kapabaluan: Istung in-encrypt me ing kekang wallet at meala ya ing passphrase na, ma-<b>ALA NO NGAN RING KEKANG pfennigS</b> Are you sure you wish to encrypt your wallet? @@ -223,8 +223,8 @@ Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project p Me-encrypt ne ing wallet - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Ing Pfennig ngeni magsara ya ban ayari ing proseso ning pamag-encrypt. Tandanan yu king pamag-encrypt wallet, ali nala aprotektan king kabuuan reng pfennigs yu kareng malware a kasalunsungan atiu kareng computer yu. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + Ing pfennig ngeni magsara ya ban ayari ing proseso ning pamag-encrypt. Tandanan yu king pamag-encrypt wallet, ali nala aprotektan king kabuuan reng pfennigs yu kareng malware a kasalunsungan atiu kareng computer yu. Wallet encryption failed @@ -256,7 +256,7 @@ Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project p - PfennigGUI + pfennigGUI Sign &message... I-sign ing &mensayi @@ -294,8 +294,8 @@ Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project p Tuknangan ing aplikasyon - Show information about Pfennig - Ipakit ing impormasyun tungkul king Pfennig + Show information about pfennig + Ipakit ing impormasyun tungkul king pfennig About &Qt @@ -342,12 +342,12 @@ Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project p - Send coins to a Pfennig address - Magpadalang barya king Pfennig address + Send coins to a pfennig address + Magpadalang barya king pfennig address - Modify configuration options for Pfennig - Alilan ing pipamilian konpigurasion para keng Pfennig + Modify configuration options for pfennig + Alilan ing pipamilian konpigurasion para keng pfennig Backup wallet to another location @@ -370,8 +370,8 @@ Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project p &Beripikan ing message... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -398,11 +398,11 @@ Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project p - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -426,15 +426,15 @@ Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project p [testnet] - Pfennig Core - Kapilubluban ning Pfennig + pfennig Core + Kapilubluban ning pfennig Request payments (generates QR codes and pfennig: URIs) - &About Pfennig Core + &About pfennig Core @@ -454,16 +454,16 @@ Ing produktung ini atin yang makayabeng software a gewa dareng OpenSSL Project p - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Pfennig client + pfennig client + pfennig client - %n active connection(s) to Pfennig network - %n ya ing aktibong koneksion keng Pfennig network%n lareng aktibong koneksion keng Pfennig network + %n active connection(s) to pfennig network + %n ya ing aktibong koneksion keng pfennig network%n lareng aktibong koneksion keng pfennig network No block source available... @@ -558,8 +558,8 @@ Address: %4 Maka-<b>encrypt</b> ya ing wallet at kasalukuyan yang maka-<b>locked</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Atin kamalian a milyari. Ali ne magsilbing sumulung pa ing Pfennig at kailangan na ng tuknang. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Atin kamalian a milyari. Ali ne magsilbing sumulung pa ing pfennig at kailangan na ng tuknang. @@ -843,8 +843,8 @@ Address: %4 Ing pepalub yung address "%1" ati na yu king aklat dareng address - The entered address "%1" is not a valid Pfennig address. - Ing pepalub yung address "%1" ali ya katanggap-tanggap a Pfennig address. + The entered address "%1" is not a valid pfennig address. + Ing pepalub yung address "%1" ali ya katanggap-tanggap a pfennig address. Could not unlock wallet. @@ -881,12 +881,12 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Kapilubluban ning Pfennig + pfennig Core + Kapilubluban ning pfennig version @@ -932,15 +932,15 @@ Address: %4 Malaus ka - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -952,8 +952,8 @@ Address: %4 - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1014,12 +1014,12 @@ Address: %4 Mamayad &bayad para king transaksion - Automatically start Pfennig after logging in to the system. - Umpisan yang antimu ing Pfennig kaibat mekapag-log in king sistema. + Automatically start pfennig after logging in to the system. + Umpisan yang antimu ing pfennig kaibat mekapag-log in king sistema. - &Start Pfennig on system login - &Umpisan ya ing Pfennig king pamag-log-in na ning sistema. + &Start pfennig on system login + &Umpisan ya ing pfennig king pamag-log-in na ning sistema. Size of &database cache @@ -1034,7 +1034,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1094,8 +1094,8 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Ibuklat yang antimanu ing Pfennig client port king router. Gagana yamu ini istung ing router mu susuporta yang UPnP at magsilbi ya. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Ibuklat yang antimanu ing pfennig client port king router. Gagana yamu ini istung ing router mu susuporta yang UPnP at magsilbi ya. Map port using &UPnP @@ -1150,8 +1150,8 @@ Address: %4 Amanu na ning user interface: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Ing amanu na ning user interface maliari yang i-ayus o ilage keni. Ing ayus a ini magsilbi yamu istung pesibayuan meng pasibayu ing Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Ing amanu na ning user interface maliari yang i-ayus o ilage keni. Ing ayus a ini magsilbi yamu istung pesibayuan meng pasibayu ing pfennig. &Unit to show amounts in: @@ -1162,8 +1162,8 @@ Address: %4 Pilinan ing default subdivision unit a ipalto o ipakit king interface at istung magpadala kang barya. - Whether to show Pfennig addresses in the transaction list or not. - Ipakit man ing Pfennig address king listahan naning transaksion o ali. + Whether to show pfennig addresses in the transaction list or not. + Ipakit man ing pfennig address king listahan naning transaksion o ali. &Display addresses in transaction list @@ -1217,8 +1217,8 @@ Address: %4 Form - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig network istung mekakonekta ne king network, oneng ing prosesung ini ali ya pa kumpletu. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig network istung mekakonekta ne king network, oneng ing prosesung ini ali ya pa kumpletu. Wallet @@ -1272,7 +1272,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1339,8 +1339,8 @@ Address: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1355,12 +1355,12 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Magpalub kang Pfennig address(e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Magpalub kang pfennig address(e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1481,16 +1481,16 @@ Address: %4 Debug log file - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Ibuklat ing Pfennig debug log file menibat king kasalungsungan data directory. Magluat ya ining pilan segundu para kareng mamaragul a log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Ibuklat ing pfennig 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 Pfennig RPC console. - Malaus kayu king Pfennig RPC console. + Welcome to the pfennig RPC console. + Malaus kayu king pfennig RPC console. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1552,7 +1552,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1865,7 +1865,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1952,7 +1952,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1971,7 +1971,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2026,8 +2026,8 @@ Address: %4 Kopyan ing kasalungsungan pirma king system clipboard - Sign the message to prove you own this Pfennig address - Pirman ing mensayi ban patune na keka ya ining Pfennig address + Sign the message to prove you own this pfennig address + Pirman ing mensayi ban patune na keka ya ining pfennig address Sign &Message @@ -2054,8 +2054,8 @@ Address: %4 Ing address na ning mensayi nung nokarin me pirma ya ini (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Beripikan ing mensayi ban asiguradu a me pirma ya ini gamit ing mepiling Pfennig address + Verify the message to ensure it was signed with the specified pfennig address + Beripikan ing mensayi ban asiguradu a me pirma ya ini gamit ing mepiling pfennig address Verify &Message @@ -2066,8 +2066,8 @@ Address: %4 Ibalik king dati reng ngan fields na ning pamag beripikang mensayi - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Magpalub kang Pfennig address(e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Magpalub kang pfennig address(e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2125,8 +2125,8 @@ Address: %4 SplashScreen - Pfennig Core - Kapilubluban ning Pfennig + pfennig Core + Kapilubluban ning pfennig The Bitcoin Core Developers @@ -2620,8 +2620,8 @@ Address: %4 Pilinan ing data directory - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Makiramdam king koneksion king <port>(default: P2PPORT o testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Makiramdam king koneksion king <port>(default: 40002 o testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2648,7 +2648,7 @@ Address: %4 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: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2656,7 +2656,7 @@ Address: %4 Tumanggap command line at JSON-RPC commands - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2681,7 +2681,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2754,7 +2754,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2766,8 +2766,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 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 Pfennig 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 Pfennig. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig 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 pfennig. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2802,7 +2802,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2822,7 +2822,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3046,7 +3046,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3110,7 +3110,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3130,11 +3130,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Pipamilian ning SSL: (lawen ye ing Pfennig Wiki para king SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Pipamilian ning SSL: (lawen ye ing pfennig Wiki para king SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3170,7 +3170,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3286,12 +3286,12 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Me-mali ya ing pamag-load king wallet.dat: Me-corrupt ya ing wallet - Error loading wallet.dat: Wallet requires newer version of Pfennig - Me-mali ya ing pamag-load na ning wallet.dat: Ing wallet mangailangan yang bayung bersion na ning Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Me-mali ya ing pamag-load na ning wallet.dat: Ing wallet mangailangan yang bayung bersion na ning pfennig - Wallet needed to be rewritten: restart Pfennig to complete - Ing wallet mangailangan yang misulat pasibayu: Umpisan yang pasibayu ing Pfennig ban ma-kumpleto ya + Wallet needed to be rewritten: restart pfennig to complete + Ing wallet mangailangan yang misulat pasibayu: Umpisan yang pasibayu ing pfennig ban ma-kumpleto ya Error loading wallet.dat diff --git a/src/qt/locale/bitmark_pam.ts~ b/src/qt/locale/bitmark_pam.ts~ new file mode 100644 index 0000000..d512bb0 --- /dev/null +++ b/src/qt/locale/bitmark_pam.ts~ @@ -0,0 +1,3377 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Reni reng kekang GameCredits address king pamagpadalang kabayaran. Lawan mulang masalese reng alaga ampo ing address na ning tumanggap bayu ka magpadalang barya. + + + These are your GameCredits 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 GameCreditsS</b>! + Kapabaluan: Istung in-encrypt me ing kekang wallet at meala ya ing passphrase na, ma-<b>ALA NO NGAN RING KEKANG GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + Ing GameCredits ngeni magsara ya ban ayari ing proseso ning pamag-encrypt. Tandanan yu king pamag-encrypt wallet, ali nala aprotektan king kabuuan reng gamecreditss 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. + + + + GameCreditsGUI + + 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 GameCredits + Ipakit ing impormasyun tungkul king GameCredits + + + 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 GameCredits address + Magpadalang barya king GameCredits address + + + Modify configuration options for GameCredits + Alilan ing pipamilian konpigurasion para keng GameCredits + + + 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... + + + GameCredits + GameCredits + + + 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 GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &File + + + &Settings + &Pamag-ayus + + + &Help + &Saup + + + Tabs toolbar + Gamit para king Tabs + + + [testnet] + [testnet] + + + GameCredits Core + Kapilubluban ning GameCredits + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + GameCredits client + + + %n active connection(s) to GameCredits network + %n ya ing aktibong koneksion keng GameCredits network%n lareng aktibong koneksion keng GameCredits 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. GameCredits can no longer continue safely and will quit. + Atin kamalian a milyari. Ali ne magsilbing sumulung pa ing GameCredits 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 GameCredits address. + Ing pepalub yung address "%1" ali ya katanggap-tanggap a GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + Kapilubluban ning GameCredits + + + 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Umpisan yang antimu ing GameCredits kaibat mekapag-log in king sistema. + + + &Start GameCredits on system login + &Umpisan ya ing GameCredits king pamag-log-in na ning sistema. + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Ibuklat yang antimanu ing GameCredits 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 GameCredits. + Ing amanu na ning user interface maliari yang i-ayus o ilage keni. Ing ayus a ini magsilbi yamu istung pesibayuan meng pasibayu ing GameCredits. + + + &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 GameCredits addresses in the transaction list or not. + Ipakit man ing GameCredits 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 GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + GameCredits + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Magpalub kang GameCredits address(e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Ibuklat ing GameCredits 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 GameCredits RPC console. + Malaus kayu king GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ing address nung nokarin ipadala ya ing kabayaran (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ing address ban a -pirman ya ing mensayi kayabe ning (e.g.bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Pirman ing mensayi ban patune na keka ya ining GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ing address na ning mensayi nung nokarin me pirma ya ini (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Beripikan ing mensayi ban asiguradu a me pirma ya ini gamit ing mepiling GameCredits address + + + Verify &Message + Beripikan ing &Mensayi + + + Reset all verify message fields + Ibalik king dati reng ngan fields na ning pamag beripikang mensayi + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Magpalub kang GameCredits address(e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + Kapilubluban ning GameCredits + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + Pamanggamit: + + + List commands + Listahan dareng commands + + + Get help for a command + Maniauad saup para kareng command + + + Options: + Pipamilian: + + + Specify configuration file (default: gamecredits.conf) + Pilinan ing configuration file(default: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Pilinan ing pid file(default: gamecreditsd.pid) + + + Specify data directory + Pilinan ing data directory + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Makiramdam king koneksion king <port>(default: 40002 o testnet: 50001) + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + Tumanggap command line at JSON-RPC commands + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 GameCredits. + + + 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + Pipamilian ning SSL: (lawen ye ing GameCredits Wiki para king SSL setup instructions) + + + Send command to GameCredits 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 GameCredits 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 GameCredits + Me-mali ya ing pamag-load na ning wallet.dat: Ing wallet mangailangan yang bayung bersion na ning GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + Ing wallet mangailangan yang misulat pasibayu: Umpisan yang pasibayu ing GameCredits 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/bitmark_pl.ts b/src/qt/locale/bitmark_pl.ts index d49e5c5..bbf29cb 100644 --- a/src/qt/locale/bitmark_pl.ts +++ b/src/qt/locale/bitmark_pl.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - O Pfennig Core + About pfennig Core + O pfennig Core - <b>Pfennig Core</b> version - Wersja <b>Pfennig Core</b> + <b>pfennig Core</b> version + Wersja <b>pfennig Core</b> @@ -29,7 +29,7 @@ This product includes software developed by the OpenSSL Project for use in the O The Bitcoin Core Developers - Deweloperzy Pfennig Core + Deweloperzy pfennig Core (%1-bit) @@ -103,11 +103,11 @@ This product includes software developed by the OpenSSL Project for use in the O Adres odbiorczy - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Tutaj znajdują się Twoje adresy Pfennig do wysyłania płatności. Zawsze sprawdzaj ilość i adres odbiorcy przed wysyłką monet. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Tutaj znajdują się Twoje adresy pfennig do wysyłania płatności. Zawsze sprawdzaj ilość i adres odbiorcy przed wysyłką monet. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. To twoje adresy pfennig do odbierania płatności. Zaleca się używanie nowych adresów odbiorczych dla każdej tranzakcji. @@ -205,8 +205,8 @@ This product includes software developed by the OpenSSL Project for use in the O Potwierdź szyfrowanie portfela - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Uwaga: Jeśli zaszyfrujesz swój portfel i zgubisz hasło to <b>STRACISZ WSZYSTKIE SWOJE Pfennig'Y</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Uwaga: Jeśli zaszyfrujesz swój portfel i zgubisz hasło to <b>STRACISZ WSZYSTKIE SWOJE pfennig'Y</b>! Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ This product includes software developed by the OpenSSL Project for use in the O Portfel zaszyfrowany - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Program Pfennig zamknie się aby dokończyć proces szyfrowania. Pamiętaj, że szyfrowanie portfela nie zabezpiecza w pełni Twoich pfennigów przed kradzieżą przez wirusy lub trojany mogące zainfekować Twój komputer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + Program pfennig zamknie się aby dokończyć proces szyfrowania. Pamiętaj, że szyfrowanie portfela nie zabezpiecza w pełni Twoich pfennigów przed kradzieżą przez wirusy lub trojany mogące zainfekować Twój komputer. Wallet encryption failed @@ -258,7 +258,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... Podpisz wiado&mość... @@ -296,8 +296,8 @@ This product includes software developed by the OpenSSL Project for use in the O Zamknij program - Show information about Pfennig - Pokaż informację o Pfennig + Show information about pfennig + Pokaż informację o pfennig About &Qt @@ -344,11 +344,11 @@ This product includes software developed by the OpenSSL Project for use in the O Ponowne indeksowanie bloków na dysku... - Send coins to a Pfennig address - Wyślij monety na adres Pfennig + Send coins to a pfennig address + Wyślij monety na adres pfennig - Modify configuration options for Pfennig + Modify configuration options for pfennig Zmienia opcje konfiguracji pfenniga @@ -372,8 +372,8 @@ This product includes software developed by the OpenSSL Project for use in the O &Zweryfikuj wiadomość... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ This product includes software developed by the OpenSSL Project for use in the O Szyfruj klucze prywatne, które są powiązane z twoim portfelem - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them Podpisz wiadomości swoim adresem aby udowodnić jego posiadanie - Verify messages to ensure they were signed with specified Pfennig addresses - Zweryfikuj wiadomość, aby upewnić się, że została podpisana odpowiednim adresem Pfennig. + Verify messages to ensure they were signed with specified pfennig addresses + Zweryfikuj wiadomość, aby upewnić się, że została podpisana odpowiednim adresem pfennig. &File @@ -428,16 +428,16 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core - Rdzeń Pfennig + pfennig Core + Rdzeń pfennig Request payments (generates QR codes and pfennig: URIs) Żądaj płatności (generuje kod QR oraz pfennig URI) - &About Pfennig Core - &O Pfennig Core + &About pfennig Core + &O pfennig Core Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Pfennig klient + pfennig client + pfennig klient - %n active connection(s) to Pfennig network - %n aktywne połączenie do sieci Pfennig%n aktywne połączenia do sieci Pfennig%n aktywnych połączeń do sieci Pfennig + %n active connection(s) to pfennig network + %n aktywne połączenie do sieci pfennig%n aktywne połączenia do sieci pfennig%n aktywnych połączeń do sieci pfennig No block source available... @@ -560,8 +560,8 @@ Adres: %4 Portfel jest <b>zaszyfrowany</b> i obecnie <b>zablokowany</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Błąd krytyczny. Pfennig nie może kontynuować bezpiecznie więc zostanie zamknięty. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Błąd krytyczny. pfennig nie może kontynuować bezpiecznie więc zostanie zamknięty. @@ -845,8 +845,8 @@ Adres: %4 Wprowadzony adres "%1" już istnieje w książce adresowej. - The entered address "%1" is not a valid Pfennig address. - Wprowadzony adres "%1" nie jest poprawnym adresem Pfennig. + The entered address "%1" is not a valid pfennig address. + Wprowadzony adres "%1" nie jest poprawnym adresem pfennig. Could not unlock wallet. @@ -883,12 +883,12 @@ Adres: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options Opcje konsoli - Pfennig Core - Rdzeń Pfennig + pfennig Core + Rdzeń pfennig version @@ -934,16 +934,16 @@ Adres: %4 Witaj - Welcome to Pfennig Core. - Witam w Pfennig Core + Welcome to pfennig Core. + Witam w pfennig Core - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. Ponieważ jest to pierwsze uruchomienie programu, możesz wybrać gdzie będą przechowywane informacje. - Pfennig Core will download and store a copy of the Pfennig 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 Pfennig. 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. + pfennig Core will download and store a copy of the pfennig 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 pfennig. 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 @@ -954,8 +954,8 @@ Adres: %4 Użyj wybranego folderu dla danych - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,12 +1016,12 @@ Adres: %4 Płać prowizję za transakcje - Automatically start Pfennig after logging in to the system. - Automatycznie uruchamia Pfennig po zalogowaniu do systemu. + Automatically start pfennig after logging in to the system. + Automatycznie uruchamia pfennig po zalogowaniu do systemu. - &Start Pfennig on system login - Uruchamiaj Pfennig wraz z zalogowaniem do &systemu + &Start pfennig on system login + Uruchamiaj pfennig wraz z zalogowaniem do &systemu Size of &database cache @@ -1036,7 +1036,7 @@ Adres: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1096,8 +1096,8 @@ Adres: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Automatycznie otwiera port klienta Pfennig na routerze. Ta opcja dzieła tylko jeśli twój router wspiera UPnP i jest ono włączone. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatycznie otwiera port klienta pfennig na routerze. Ta opcja dzieła tylko jeśli twój router wspiera UPnP i jest ono włączone. Map port using &UPnP @@ -1152,8 +1152,8 @@ Adres: %4 Język &Użytkownika: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Można tu ustawić język interfejsu uzytkownika. Żeby ustawienie przyniosło skutek trzeba uruchomić ponownie Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Można tu ustawić język interfejsu uzytkownika. Żeby ustawienie przyniosło skutek trzeba uruchomić ponownie pfennig. &Unit to show amounts in: @@ -1164,8 +1164,8 @@ Adres: %4 Wybierz podział jednostki pokazywany w interfejsie oraz podczas wysyłania monet - Whether to show Pfennig addresses in the transaction list or not. - Pokazuj adresy Pfennig na liście transakcji. + Whether to show pfennig addresses in the transaction list or not. + Pokazuj adresy pfennig na liście transakcji. &Display addresses in transaction list @@ -1219,7 +1219,7 @@ Adres: %4 Formularz - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig 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ą pfennig, zaraz po tym jak uzyskano połączenie, ale proces ten nie został jeszcze ukończony. @@ -1274,8 +1274,8 @@ Adres: %4 Obsługa URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI nie może zostać przetworzony! Prawdopodobnie błędny adres Pfennig bądź nieprawidłowe parametry URI. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI nie może zostać przetworzony! Prawdopodobnie błędny adres pfennig bądź nieprawidłowe parametry URI. Requested payment amount of %1 is too small (considered dust). @@ -1341,8 +1341,8 @@ Adres: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,12 +1357,12 @@ Adres: %4 Błąd: Niepoprawna kombinacja -regtest i -testnet. - Pfennig Core didn't yet exit safely... - Pfennig Core jeszcze się nie wyłączył bezpiecznie… + pfennig Core didn't yet exit safely... + pfennig Core jeszcze się nie wyłączył bezpiecznie… - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Wprowadź adres Pfennig (np. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Wprowadź adres pfennig (np. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,16 +1483,16 @@ Adres: %4 Plik logowania debugowania - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Otwórz plik logowania debugowania Pfennig z obecnego katalogu z danymi. Może to potrwać kilka sekund przy większych plikach. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Otwórz plik logowania debugowania pfennig z obecnego katalogu z danymi. Może to potrwać kilka sekund przy większych plikach. Clear console Wyczyść konsolę - Welcome to the Pfennig RPC console. - Witam w konsoli Pfennig RPC + Welcome to the pfennig RPC console. + Witam w konsoli pfennig RPC Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1554,7 +1554,7 @@ Adres: %4 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 Pfennig network. + 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 pfennig network. @@ -1867,8 +1867,8 @@ Adres: %4 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 Pfennig address - Ostrzeżenie: nieprawidłowy adres Pfennig + Warning: Invalid pfennig address + Ostrzeżenie: nieprawidłowy adres pfennig (no label) @@ -1954,7 +1954,7 @@ Adres: %4 Wprowadź etykietę dla tego adresu by dodać go do listy użytych adresów - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1973,8 +1973,8 @@ Adres: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig Core się zamyka... + pfennig Core is shutting down... + pfennig Core się zamyka... Do not shut down the computer until this window disappears. @@ -1997,7 +1997,7 @@ Adres: %4 The address to sign the message with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Wprowadź adres Pfennig (np. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Wprowadź adres pfennig (np. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Choose previously used address @@ -2028,7 +2028,7 @@ Adres: %4 Kopiuje aktualny podpis do schowka systemowego - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address Podpisz wiadomość aby dowieść, że ten adres jest twój @@ -2053,11 +2053,11 @@ Adres: %4 The address the message was signed with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Wprowadź adres Pfennig (np. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Wprowadź adres pfennig (np. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Zweryfikuj wiadomość, aby upewnić się, że została podpisana odpowiednim adresem Pfennig. + Verify the message to ensure it was signed with the specified pfennig address + Zweryfikuj wiadomość, aby upewnić się, że została podpisana odpowiednim adresem pfennig. Verify &Message @@ -2068,8 +2068,8 @@ Adres: %4 Resetuje wszystkie pola weryfikacji wiadomości - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Wprowadź adres Pfennig (np. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Wprowadź adres pfennig (np. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2127,12 +2127,12 @@ Adres: %4 SplashScreen - Pfennig Core - Rdzeń Pfennig + pfennig Core + Rdzeń pfennig The Bitcoin Core Developers - Deweloperzy Pfennig Core + Deweloperzy pfennig Core [testnet] @@ -2622,8 +2622,8 @@ Adres: %4 Wskaż folder danych - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Nasłuchuj połączeń na <port> (domyślnie: P2PPORT lub testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Nasłuchuj połączeń na <port> (domyślnie: 40002 lub testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2650,15 +2650,15 @@ Adres: %4 Wystąpił błąd podczas ustawiania portu RPC %u w tryb nasłuchu: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Nasłuchuj połączeń JSON-RPC na <port> (domyślnie: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Nasłuchuj połączeń JSON-RPC na <port> (domyślnie: 40001 or testnet: 50000) Accept command line and JSON-RPC commands Akceptuj linię poleceń oraz polecenia JSON-RPC - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2683,7 +2683,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, musisz ustawić rpcpassword w pliku konfiguracyjnym:⏎ %s⏎ @@ -2694,7 +2694,7 @@ 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 Pfennig" admin@foo.com⏎ +na przykład: alertnotify=echo %%s | mail -s "Alarm pfennig" admin@foo.com⏎ Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -2730,7 +2730,7 @@ na przykład: alertnotify=echo %%s | mail -s "Alarm Pfennig" admin@foo 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ć Pfennig. Czy chcesz zapłacić prowizję? + 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ć pfennig. Czy chcesz zapłacić prowizję? Execute command when a wallet transaction changes (%s in cmd is replaced by TxID) @@ -2765,7 +2765,7 @@ na przykład: alertnotify=echo %%s | mail -s "Alarm Pfennig" admin@foo 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. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2777,8 +2777,8 @@ na przykład: alertnotify=echo %%s | mail -s "Alarm Pfennig" admin@foo Ostrzeżenie: -paytxfee jest bardzo duży. To jest prowizja za transakcje, którą płacisz, gdy wysyłasz monety. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Uwaga: Sprawdź czy data i czas na Twoim komputerze są prawidłowe! Jeśli nie to Pfennig nie będzie działał prawidłowo. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Uwaga: Sprawdź czy data i czas na Twoim komputerze są prawidłowe! Jeśli nie to pfennig nie będzie działał prawidłowo. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2813,7 +2813,7 @@ na przykład: alertnotify=echo %%s | mail -s "Alarm Pfennig" admin@foo Próbuj odzyskać klucze prywatne z uszkodzonego wallet.dat - Pfennig Core Daemon + pfennig Core Daemon @@ -2833,8 +2833,8 @@ na przykład: alertnotify=echo %%s | mail -s "Alarm Pfennig" admin@foo Połącz przez SOCKS proxy - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - podłącz do JSON-RPC na <port> (domyślnie: RPCPORT lub sieć testowa: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + podłącz do JSON-RPC na <port> (domyślnie: 40001 lub sieć testowa: 50000) Connection options: @@ -3057,7 +3057,7 @@ na przykład: alertnotify=echo %%s | mail -s "Alarm Pfennig" admin@foo Importuj bloki z zewnętrznego pliku blk000??.dat - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3121,7 +3121,7 @@ na przykład: alertnotify=echo %%s | mail -s "Alarm Pfennig" admin@foo - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3141,12 +3141,12 @@ na przykład: alertnotify=echo %%s | mail -s "Alarm Pfennig" admin@foo Uruchom wątek do okresowego zapisywania portfela (domyślnie: 1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Opcje SSL: (odwiedź Pfennig Wiki w celu uzyskania instrukcji) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Opcje SSL: (odwiedź pfennig Wiki w celu uzyskania instrukcji) - Send command to Pfennig Core - Wyślij komendę do Pfennig Core + Send command to pfennig Core + Wyślij komendę do pfennig Core Send trace/debug info to console instead of debug.log file @@ -3181,8 +3181,8 @@ na przykład: alertnotify=echo %%s | mail -s "Alarm Pfennig" admin@foo Wskaż czas oczekiwania bezczynności połączenia w milisekundach (domyślnie: 5000) - Start Pfennig Core Daemon - Uruchom serwer Pfennig Core + Start pfennig Core Daemon + Uruchom serwer pfennig Core System error: @@ -3297,12 +3297,12 @@ na przykład: alertnotify=echo %%s | mail -s "Alarm Pfennig" admin@foo Błąd ładowania wallet.dat: Uszkodzony portfel - Error loading wallet.dat: Wallet requires newer version of Pfennig - Błąd ładowania wallet.dat: Portfel wymaga nowszej wersji Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Błąd ładowania wallet.dat: Portfel wymaga nowszej wersji pfennig - Wallet needed to be rewritten: restart Pfennig to complete - Portfel wymaga przepisania: zrestartuj Pfenniga żeby ukończyć + Wallet needed to be rewritten: restart pfennig to complete + Portfel wymaga przepisania: zrestartuj pfenniga żeby ukończyć Error loading wallet.dat diff --git a/src/qt/locale/bitmark_pl.ts~ b/src/qt/locale/bitmark_pl.ts~ new file mode 100644 index 0000000..1f35630 --- /dev/null +++ b/src/qt/locale/bitmark_pl.ts~ @@ -0,0 +1,3388 @@ + + + AboutDialog + + About GameCredits Core + O GameCredits Core + + + <b>GameCredits Core</b> version + Wersja <b>GameCredits 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. + +Oprogramowanie eksperymentalne. + +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 + Prawo autorskie + + + The Bitcoin Core Developers + Deweloperzy GameCredits Core + + + (%1-bit) + + + + + AddressBookPage + + 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 + + + &Copy + &Kopiuj + + + C&lose + Z&amknij + + + &Copy Address + &Kopiuj adres + + + 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 + + + &Delete + &Usuń + + + Choose the address to send coins to + Wybierz adres żeby wysłać gamecreditss + + + 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Tutaj znajdują się Twoje adresy GameCredits do wysyłania płatności. Zawsze sprawdzaj ilość i adres odbiorcy przed wysyłką monet. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + To twoje adresy gamecredits do odbierania płatności. Zaleca się używanie nowych adresów odbiorczych dla każdej tranzakcji. + + + Copy &Label + Kopiuj &Etykietę + + + &Edit + &Modyfikuj + + + Export Address List + Eksportuj listę adresową + + + Comma separated file (*.csv) + Plik *.CSV (rozdzielany przecinkami) + + + Exporting Failed + Błąd przy próbie eksportu + + + There was an error trying to save the address list to %1. + + + + + AddressTableModel + + Label + Etykieta + + + Address + Adres + + + (no label) + (bez etykiety) + + + + 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 GameCreditsS</b>! + Uwaga: Jeśli zaszyfrujesz swój portfel i zgubisz hasło to <b>STRACISZ WSZYSTKIE SWOJE GameCredits'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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + Program GameCredits zamknie się aby dokończyć proces szyfrowania. Pamiętaj, że szyfrowanie portfela nie zabezpiecza w pełni Twoich gamecreditsó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 + Odszyfrowanie portfela nie powiodło się + + + Wallet passphrase was successfully changed. + Hasło portfela zostało pomyślnie zmienione. + + + + GameCreditsGUI + + 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 + + + E&xit + &Zakończ + + + Quit application + Zamknij program + + + Show information about GameCredits + Pokaż informację o GameCredits + + + 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 GameCredits address + Wyślij monety na adres GameCredits + + + Modify configuration options for GameCredits + Zmienia opcje konfiguracji gamecreditsa + + + 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 debugowania + + + Open debugging and diagnostic console + Otwórz konsolę debugowania i diagnostyki + + + &Verify message... + &Zweryfikuj wiadomość... + + + GameCredits + GameCredits + + + Wallet + Portfel + + + &Send + Wyślij + + + &Receive + Odbie&rz + + + &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 GameCredits addresses to prove you own them + Podpisz wiadomości swoim adresem aby udowodnić jego posiadanie + + + Verify messages to ensure they were signed with specified GameCredits addresses + Zweryfikuj wiadomość, aby upewnić się, że została podpisana odpowiednim adresem GameCredits. + + + &File + &Plik + + + &Settings + P&referencje + + + &Help + Pomo&c + + + Tabs toolbar + Pasek zakładek + + + [testnet] + [testnet] + + + GameCredits Core + Rdzeń GameCredits + + + Request payments (generates QR codes and gamecredits: URIs) + Żądaj płatności (generuje kod QR oraz gamecredits URI) + + + &About GameCredits Core + &O GameCredits 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 gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + GameCredits klient + + + %n active connection(s) to GameCredits network + %n aktywne połączenie do sieci GameCredits%n aktywne połączenia do sieci GameCredits%n aktywnych połączeń do sieci GameCredits + + + 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 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 + + + Up to date + Aktualny + + + Catching up... + Łapanie bloków... + + + Sent transaction + Transakcja wysłana + + + Incoming transaction + Transakcja przychodząca + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Data: %1 +Kwota: %2 +Typ: %3 +Adres: %4 + + + + 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. GameCredits can no longer continue safely and will quit. + Błąd krytyczny. GameCredits nie może kontynuować bezpiecznie więc zostanie zamknięty. + + + + ClientModel + + Network Alert + Sieć Alert + + + + CoinControlDialog + + 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 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 + + + New receiving address + Nowy adres odbiorczy + + + New sending address + Nowy adres wysyłania + + + Edit receiving address + Zmień adres odbioru + + + Edit sending address + 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 GameCredits address. + Wprowadzony adres "%1" nie jest poprawnym adresem GameCredits. + + + Could not unlock wallet. + Nie można było odblokować portfela. + + + New key generation failed. + Tworzenie nowego klucza nie powiodło się. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + Opcje konsoli + + + GameCredits Core + Rdzeń GameCredits + + + 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 GameCredits Core. + Witam w GameCredits Core + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Ponieważ jest to pierwsze uruchomienie programu, możesz wybrać gdzie będą przechowywane informacje. + + + GameCredits Core will download and store a copy of the GameCredits 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 GameCredits. 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 + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Automatycznie uruchamia GameCredits po zalogowaniu do systemu. + + + &Start GameCredits on system login + Uruchamiaj GameCredits wraz z zalogowaniem do &systemu + + + Size of &database cache + + + + MB + MB + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Automatycznie otwiera port klienta GameCredits 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 + + + Proxy &IP: + Proxy &IP: + + + &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 GameCredits. + Można tu ustawić język interfejsu uzytkownika. Żeby ustawienie przyniosło skutek trzeba uruchomić ponownie GameCredits. + + + &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 GameCredits addresses in the transaction list or not. + Pokazuj adresy GameCredits 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 + + + default + domyślny + + + none + żaden + + + Confirm options reset + Potwierdź reset ustawień + + + Client restart required to activate changes. + Wymagany restart programu, aby uaktywnić zmiany. + + + Client will be shutdown, do you want to proceed? + Program zostanie wyłączony. Czy chcesz kontynuować? + + + This change would require a client restart. + Ta zmiana może wymagać ponownego uruchomienia klienta. + + + The supplied proxy address is invalid. + Adres podanego proxy jest nieprawidłowy + + + + OverviewPage + + Form + Formularz + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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ą gamecredits, zaraz po tym jak uzyskano połączenie, ale proces ten nie został jeszcze ukończony. + + + 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> + + + out of sync + desynchronizacja + + + + PaymentServer + + URI handling + Obsługa URI + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + URI nie może zostać przetworzony! Prawdopodobnie błędny adres GameCredits 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 gamecredits: click-to-pay handler + Nie można rozpocząć gamecredits: 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 + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Błąd: Określony folder danych "%1" nie istnieje. + + + 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ść. + + + Error: Invalid combination of -regtest and -testnet. + Błąd: Niepoprawna kombinacja -regtest i -testnet. + + + GameCredits Core didn't yet exit safely... + GameCredits Core jeszcze się nie wyłączył bezpiecznie… + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Wprowadź adres GameCredits (np. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + &Zapisz obraz... + + + &Copy Image + &Kopiuj obraz + + + Save QR Code + Zapisz Kod QR + + + 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ń + + + 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 + + + &Console + &Konsola + + + &Network Traffic + $Ruch sieci + + + &Clear + &Wyczyść + + + Totals + Kwota ogólna + + + In: + Wejście: + + + Out: + Wyjście: + + + Build date + Data kompilacji + + + Debug log file + Plik logowania debugowania + + + Open the GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Otwórz plik logowania debugowania GameCredits z obecnego katalogu z danymi. Może to potrwać kilka sekund przy większych plikach. + + + Clear console + Wyczyść konsolę + + + Welcome to the GameCredits RPC console. + Witam w konsoli GameCredits 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 GameCredits 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 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 + + + Clear all fields of the form. + Wyczyść wszystkie pola formularza + + + Clear &All + Wyczyść &wszystko + + + Balance: + Saldo: + + + Confirm the send action + Potwierdź akcję wysyłania + + + S&end + Wy&syłka + + + Confirm send coins + Potwierdź wysyłanie monet + + + %1 to %2 + %1 do %2 + + + 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. + + + Transaction creation failed! + Utworzenie transakcji nie powiodło się! + + + 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 GameCredits address + Ostrzeżenie: nieprawidłowy adres GameCredits + + + (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 + + A&mount: + Su&ma: + + + Pay &To: + Zapłać &dla: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adres, na który wysłasz płatności (np. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + Usuń ten wpis + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + To żądanie zapłaty nie zostało zweryfikowane. + + + Pay To: + Wpłać do: + + + Memo: + Notatka: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Wprowadź adres GameCredits (np. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Wprowadź adres GameCredits (np. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Zweryfikuj wiadomość, aby upewnić się, że została podpisana odpowiednim adresem GameCredits. + + + Verify &Message + Zweryfikuj Wiado&mość + + + Reset all verify message fields + Resetuje wszystkie pola weryfikacji wiadomości + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Wprowadź adres GameCredits (np. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Kliknij "Podpisz Wiadomość" żeby uzyskać podpis + + + 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. + + + + SplashScreen + + GameCredits Core + Rdzeń GameCredits + + + The Bitcoin Core Developers + Deweloperzy GameCredits 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 + + + 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 + + + + TransactionDescDialog + + Transaction details + Szczegóły transakcji + + + This pane shows a detailed description of the transaction + Ten panel pokazuje szczegółowy opis transakcji + + + + 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 + + + Confirmed (%1 confirmations) + Zatwierdzony (%1 potwierdzeń) + + + 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. + + + + 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 + Zmień etykietę + + + Show transaction details + Pokaż szczegóły transakcji + + + 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 + + + Range: + Zakres: + + + to + do + + + + WalletFrame + + No wallet has been loaded. + Nie załadowano żadnego portfela. + + + + WalletModel + + Send Coins + Wyślij płatność + + + + 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 %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ą + + + + gamecredits-core + + Usage: + Użycie: + + + List commands + Lista poleceń + + + Get help for a command + Uzyskaj pomoc do polecenia + + + Options: + Opcje: + + + Specify configuration file (default: gamecredits.conf) + Wskaż plik konfiguracyjny (domyślnie: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Wskaż plik pid (domyślnie: gamecredits.pid) + + + Specify data directory + Wskaż folder danych + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Nasłuchuj połączeń na <port> (domyślnie: 40002 lub testnet: 50001) + + + 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: 40001 or testnet: 50000) + Nasłuchuj połączeń JSON-RPC na <port> (domyślnie: 40001 or testnet: 50000) + + + Accept command line and JSON-RPC commands + Akceptuj linię poleceń oraz polecenia JSON-RPC + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, musisz ustawić rpcpassword w pliku konfiguracyjnym:⏎ +%s⏎ +Zalecane jest użycie losowego hasła:⏎ +rpcuser=gamecreditsrpc⏎ +rpcpassword=%s⏎ +(nie musisz pamiętać tego hasła)⏎ +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 GameCredits" 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 + + + 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 gamecreditsy 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ć GameCredits. Czy chcesz zapłacić prowizję? + + + 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) + + + 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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Uwaga: Sprawdź czy data i czas na Twoim komputerze są prawidłowe! Jeśli nie to GameCredits 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 + + + GameCredits 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: 40001 or testnet: 50000) + podłącz do JSON-RPC na <port> (domyślnie: 40001 lub sieć testowa: 50000) + + + 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) + + + 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 gamecredits-cli): + Użycie (przestarzałe, użyj gamecredits-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 + + + Cannot obtain a lock on data directory %s. GameCredits 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 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) + + + 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) + + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + + + + 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 GameCredits Wiki for SSL setup instructions) + Opcje SSL: (odwiedź GameCredits Wiki w celu uzyskania instrukcji) + + + Send command to GameCredits Core + Wyślij komendę do GameCredits Core + + + Send trace/debug info to console instead of debug.log file + Wyślij informację/raport do konsoli zamiast do pliku debug.log. + + + 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 GameCredits Core Daemon + Uruchom serwer GameCredits 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) + + + 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! + + + 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) + + + 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) + + + 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 GameCredits + Błąd ładowania wallet.dat: Portfel wymaga nowszej wersji GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + Portfel wymaga przepisania: zrestartuj GameCreditsa ż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 + + + 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. + Musisz ustawić rpcpassword=<hasło> w pliku configuracyjnym: +%s +Jeżeli plik nie istnieje, utwórz go z uprawnieniami właściciela-tylko-do-odczytu. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_pt_BR.ts b/src/qt/locale/bitmark_pt_BR.ts index 0207738..29c9074 100644 --- a/src/qt/locale/bitmark_pt_BR.ts +++ b/src/qt/locale/bitmark_pt_BR.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Sobre o Pfennig Core + About pfennig Core + Sobre o pfennig Core - <b>Pfennig Core</b> version - versão do <b>Pfennig Core</b> + <b>pfennig Core</b> version + versão do <b>pfennig Core</b> @@ -29,7 +29,7 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS The Bitcoin Core Developers - Programadores do Pfennig Core + Programadores do pfennig Core (%1-bit) @@ -103,12 +103,12 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS Recebendo endereços - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Estes são os seus endereços Pfennig para receber pagamentos. Você pode querer enviar um endereço diferente para cada remetente, para acompanhar quem está pagando. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Estes são os seus endereços pfennig para receber pagamentos. Você pode querer enviar um endereço diferente para cada remetente, para acompanhar quem está pagando. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Estes são os seus endereços Pfennig para receber pagamentos. Recomenda-se a utilização de um novo endereço de recebimento para cada transação. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Estes são os seus endereços pfennig para receber pagamentos. Recomenda-se a utilização de um novo endereço de recebimento para cada transação. Copy &Label @@ -205,8 +205,8 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS Confirmar criptografia da carteira - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Atenção: Se você criptografar sua carteira e perder sua senha, você vai <b>perder todos os seus PfennigS!</b> + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Atenção: Se você criptografar sua carteira e perder sua senha, você vai <b>perder todos os seus pfennigS!</b> Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS Carteira criptografada - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - O Pfennig irá fechar agora para finalizar o processo de encriptação. Lembre-se de que encriptar sua carteira não protege totalmente suas pfennigs de serem roubadas por malwares que tenham infectado o seu computador. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + O pfennig irá fechar agora para finalizar o processo de encriptação. Lembre-se de que encriptar sua carteira não protege totalmente suas pfennigs de serem roubadas por malwares que tenham infectado o seu computador. Wallet encryption failed @@ -258,7 +258,7 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS - PfennigGUI + pfennigGUI Sign &message... &Assinar Mensagem... @@ -296,8 +296,8 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS Sair da aplicação - Show information about Pfennig - Mostrar informação sobre Pfennig + Show information about pfennig + Mostrar informação sobre pfennig About &Qt @@ -344,11 +344,11 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS Reindexando blocos no disco... - Send coins to a Pfennig address + Send coins to a pfennig address Enviar moedas para um endereço pfennig - Modify configuration options for Pfennig + Modify configuration options for pfennig Modificar opções de configuração para pfennig @@ -372,8 +372,8 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS &Verificar mensagem... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS Criptografar as chaves privadas que pertencem à sua carteira - Sign messages with your Pfennig addresses to prove you own them - Assine mensagems com seus endereços Pfennig para provar que você é dono deles + Sign messages with your pfennig addresses to prove you own them + Assine mensagems com seus endereços pfennig para provar que você é dono deles - Verify messages to ensure they were signed with specified Pfennig addresses - Verificar mensagens para se assegurar que elas foram assinadas pelo dono de Endereços Pfennig específicos + Verify messages to ensure they were signed with specified pfennig addresses + Verificar mensagens para se assegurar que elas foram assinadas pelo dono de Endereços pfennig específicos &File @@ -428,16 +428,16 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS [testnet] - Pfennig Core - Núcleo Pfennig + pfennig Core + Núcleo pfennig Request payments (generates QR codes and pfennig: URIs) Solicitações de pagamentos (gera códigos QR e pfennig: URIs) - &About Pfennig Core - &A respeito do Pfennig Core + &About pfennig Core + &A respeito do pfennig Core Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ Este produto inclui software desenvolvido pelo Projeto OpenSSL para uso no OpenS Opções de linha de &comando - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Mostra a mensagem de ajuda do Pfennig Core para pegar a lista com os comandos possíveis + Show the pfennig Core help message to get a list with possible pfennig command-line options + Mostra a mensagem de ajuda do pfennig Core para pegar a lista com os comandos possíveis - Pfennig client - Cliente Pfennig + pfennig client + Cliente pfennig - %n active connection(s) to Pfennig network - %n conexão ativa na rede Pfennig%n conexões ativas na rede Pfennig + %n active connection(s) to pfennig network + %n conexão ativa na rede pfennig%n conexões ativas na rede pfennig No block source available... @@ -559,8 +559,8 @@ Endereço: %4 Carteira está <b>criptografada</b> e atualmente <b>bloqueada</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Um erro fatal ocorreu. Pfennig não pode continuar em segurança e irá fechar. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Um erro fatal ocorreu. pfennig não pode continuar em segurança e irá fechar. @@ -844,8 +844,8 @@ Endereço: %4 O endereço digitado "%1" já se encontra no catálogo de endereços. - The entered address "%1" is not a valid Pfennig address. - O endereço digitado "%1" não é um endereço Pfennig válido. + The entered address "%1" is not a valid pfennig address. + O endereço digitado "%1" não é um endereço pfennig válido. Could not unlock wallet. @@ -882,12 +882,12 @@ Endereço: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core - Opções de linha de comando + pfennig Core - Command-line options + pfennig Core - Opções de linha de comando - Pfennig Core - Núcleo Pfennig + pfennig Core + Núcleo pfennig version @@ -933,16 +933,16 @@ Endereço: %4 Bem-vindo - Welcome to Pfennig Core. - Bem vindo ao Pfennig Core. + Welcome to pfennig Core. + Bem vindo ao pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - A primeira vez que o programa é aberto você pode escolher onde o Pfennig Core vai guardar os dados. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + A primeira vez que o programa é aberto você pode escolher onde o pfennig Core vai guardar os dados. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig Core vai fazer download e guardar uma cópia da longa e única cadeia de blocos do Pfennig: 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. + pfennig Core will download and store a copy of the pfennig 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. + pfennig Core vai fazer download e guardar uma cópia da longa e única cadeia de blocos do pfennig: 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 @@ -953,8 +953,8 @@ Endereço: %4 Use um diretório de dados personalizado: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1015,12 +1015,12 @@ Endereço: %4 Pagar taxa de &transação - Automatically start Pfennig after logging in to the system. - Iniciar Pfennig automaticamente após se logar no sistema. + Automatically start pfennig after logging in to the system. + Iniciar pfennig automaticamente após se logar no sistema. - &Start Pfennig on system login - Iniciar Pfennig no login do sistema + &Start pfennig on system login + Iniciar pfennig no login do sistema Size of &database cache @@ -1035,8 +1035,8 @@ Endereço: %4 Número de threads do script de &verificação - Connect to the Pfennig network through a SOCKS proxy. - Conectado na rede do Pfennig através de proxy SOCKS. + Connect to the pfennig network through a SOCKS proxy. + Conectado na rede do pfennig através de proxy SOCKS. &Connect through SOCKS proxy (default proxy): @@ -1095,8 +1095,8 @@ Endereço: %4 Ga&star mudança não confirmada - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Abrir as portas do cliente Pfennig automaticamente no roteador. Isto só funcionará se seu roteador suportar UPnP e esta função estiver habilitada. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Abrir as portas do cliente pfennig automaticamente no roteador. Isto só funcionará se seu roteador suportar UPnP e esta função estiver habilitada. Map port using &UPnP @@ -1151,8 +1151,8 @@ Endereço: %4 &Língua da interface com usuário: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - A língua da interface com usuário pode ser escolhida aqui. Esta configuração só surtirá efeito após reiniciar o Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + A língua da interface com usuário pode ser escolhida aqui. Esta configuração só surtirá efeito após reiniciar o pfennig. &Unit to show amounts in: @@ -1163,8 +1163,8 @@ Endereço: %4 Escolha a unidade padrão de subdivisão para interface mostrar quando enviar pfennigs. - Whether to show Pfennig addresses in the transaction list or not. - Mostrar ou não endereços Pfennig na lista de transações. + Whether to show pfennig addresses in the transaction list or not. + Mostrar ou não endereços pfennig na lista de transações. &Display addresses in transaction list @@ -1218,8 +1218,8 @@ Endereço: %4 Formulário - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig depois que a conexão é estabelecida, mas este processo pode não estar completo ainda. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig depois que a conexão é estabelecida, mas este processo pode não estar completo ainda. Wallet @@ -1273,8 +1273,8 @@ Endereço: %4 Manipulação de URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI não pode ser decodificado! Isso pode ter sido causado por um endereço Pfennig inválido ou por parâmetros URI malformados. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI não pode ser decodificado! Isso pode ter sido causado por um endereço pfennig inválido ou por parâmetros URI malformados. Requested payment amount of %1 is too small (considered dust). @@ -1340,8 +1340,8 @@ Endereço: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1356,12 +1356,12 @@ Endereço: %4 Erro: Combinação inválida de-regtest e testnet. - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Digite um endereço Pfennig (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Digite um endereço pfennig (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1482,16 +1482,16 @@ Endereço: %4 Arquivo de log de Depuração - Open the Pfennig 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 Pfennig do diretório atual de dados. Isso pode levar alguns segundos para arquivos de log grandes. + Open the pfennig 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 pfennig do diretório atual de dados. Isso pode levar alguns segundos para arquivos de log grandes. Clear console Limpar console - Welcome to the Pfennig RPC console. - Bem-vindo ao console Pfennig RPC. + Welcome to the pfennig RPC console. + Bem-vindo ao console pfennig RPC. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1553,8 +1553,8 @@ Endereço: %4 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 Pfennig 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 Pfennig. + 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 pfennig 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 pfennig. An optional label to associate with the new receiving address. @@ -1866,8 +1866,8 @@ Endereço: %4 A transação foi rejeitada! Isso pode acontecer se alguns pfennigs na sua carteira já foram gastos em outro local, por exemplo se você tiver uma cópia do wallet.dat e os pfennigs tiverem sido gastos na cópia mas não marcados como gastos aqui ainda. - Warning: Invalid Pfennig address - Atenção: endereço de Pfennig inválido + Warning: Invalid pfennig address + Atenção: endereço de pfennig inválido (no label) @@ -1953,8 +1953,8 @@ Endereço: %4 Digite um rótulo para este endereço para adicioná-lo no catálogo - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. - A mensagem que foi anexada ao pfennig: URI na qual será gravada na transação para sua referência. Nota: Essa mensagem não será gravada publicamente na rede Pfennig. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. + A mensagem que foi anexada ao pfennig: URI na qual será gravada na transação para sua referência. Nota: Essa mensagem não será gravada publicamente na rede pfennig. This is an unverified payment request. @@ -1972,8 +1972,8 @@ Endereço: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig Core está desligando... + pfennig Core is shutting down... + pfennig Core está desligando... Do not shut down the computer until this window disappears. @@ -2027,8 +2027,8 @@ Endereço: %4 Copiar a assinatura para a área de transferência do sistema - Sign the message to prove you own this Pfennig address - Assinar mensagem para provar que você é dono deste endereço Pfennig + Sign the message to prove you own this pfennig address + Assinar mensagem para provar que você é dono deste endereço pfennig Sign &Message @@ -2055,8 +2055,8 @@ Endereço: %4 O endereço usado para assinar a mensagem (ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Verificar mensagem para se assegurar que ela foi assinada pelo dono de um endereço Pfennig específico. + Verify the message to ensure it was signed with the specified pfennig address + Verificar mensagem para se assegurar que ela foi assinada pelo dono de um endereço pfennig específico. Verify &Message @@ -2067,8 +2067,8 @@ Endereço: %4 Limpar todos os campos de assinatura da mensagem - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Digite um endereço Pfennig (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Digite um endereço pfennig (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2126,12 +2126,12 @@ Endereço: %4 SplashScreen - Pfennig Core - Núcleo Pfennig + pfennig Core + Núcleo pfennig The Bitcoin Core Developers - Programadores do Pfennig Core + Programadores do pfennig Core [testnet] @@ -2245,7 +2245,7 @@ Endereço: %4 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. - Pfennigs 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. + pfennigs 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 @@ -2621,8 +2621,8 @@ Endereço: %4 Especificar diretório de dados - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Procurar por conexões em <port> (padrão: P2PPORT ou testnet:1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Procurar por conexões em <port> (padrão: 40002 ou testnet:50001) Maintain at most <n> connections to peers (default: 125) @@ -2649,16 +2649,16 @@ Endereço: %4 Um erro ocorreu ao configurar a porta RPC %u para escuta em IPv4: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Escutar conexões JSON-RPC na porta <porta> (padrão: RPCPORT ou testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Escutar conexões JSON-RPC na porta <porta> (padrão: 40001 ou testnet: 50000) Accept command line and JSON-RPC commands Aceitar linha de comando e comandos JSON-RPC - Pfennig Core RPC client version - Versão do cliente Pfennig Core RPC + pfennig Core RPC client version + Versão do cliente pfennig Core RPC Run in the background as a daemon and accept commands @@ -2682,7 +2682,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, você deve especificar uma senha rpcpassword no arquivo de configuração:⏎ %s⏎ @@ -2693,7 +2693,7 @@ rpcpassword=%s⏎ O nome de usuário e a senha NÃO PODEM ser os mesmos.⏎ Se o arquivo não existir, crie um com permissão de leitura apenas para o dono.⏎ É recomendado também definir um alertnotify para que você seja notificado de problemas;⏎ -por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com⏎ +por exemplo: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com⏎ @@ -2765,8 +2765,8 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 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. Pfennig Core is probably already running. - Impossível ouvir em %s neste computador. Pfennig Core já está sendo executado provavelmente. + Unable to bind to %s on this computer. pfennig Core is probably already running. + Impossível ouvir em %s neste computador. pfennig Core já está sendo executado provavelmente. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2777,8 +2777,8 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 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: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Atenção: Por favor, verifique que a data e hora do seu computador estão corretas! Se o seu relógio estiver errado, o Pfennig não irá funcionar corretamente. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Atenção: Por favor, verifique que a data e hora do seu computador estão corretas! Se o seu relógio estiver errado, o pfennig não irá funcionar corretamente. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2813,8 +2813,8 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Tentar recuperar chaves privadas de um arquivo wallet.dat corrompido - Pfennig Core Daemon - Pfennig Core Daemon + pfennig Core Daemon + pfennig Core Daemon Block creation options: @@ -2833,8 +2833,8 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Conecta através de proxy SOCKS - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Conectar-se ao JSON-RPC em <port> (padrão: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Conectar-se ao JSON-RPC em <port> (padrão: 40001 or testnet: 50000) Connection options: @@ -3057,8 +3057,8 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Importar blocos de um arquivo externo blk000??.dat - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - Não foi possível obter proteção exclusiva ao diretório de dados %s. Pfennig Core já está sendo executado provavelmente. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + Não foi possível obter proteção exclusiva ao diretório de dados %s. pfennig 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) @@ -3121,8 +3121,8 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Imprime árvore de blocos ao iniciar (padrão: 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) - Opções RPC SSL: (veja o Pfennig Wiki para instruções de configuração SSL) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) + Opções RPC SSL: (veja o pfennig Wiki para instruções de configuração SSL) RPC server options: @@ -3141,12 +3141,12 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Executa uma thread para limpar a carteira periodicamente (padrão: 1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Opções SSL: (veja a Wiki do Pfennig para instruções de configuração SSL) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Opções SSL: (veja a Wiki do pfennig para instruções de configuração SSL) - Send command to Pfennig Core - Enviar comando ao Pfennig Core + Send command to pfennig Core + Enviar comando ao pfennig Core Send trace/debug info to console instead of debug.log file @@ -3181,8 +3181,8 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Especifique o tempo limite (timeout) da conexão em milissegundos (padrão: 5000) - Start Pfennig Core Daemon - Inicializar serviço Pfennig Core + Start pfennig Core Daemon + Inicializar serviço pfennig Core System error: @@ -3297,12 +3297,12 @@ por exemplo: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Erro ao carregar wallet.dat: Carteira corrompida - Error loading wallet.dat: Wallet requires newer version of Pfennig - Erro ao carregar wallet.dat: Carteira requer uma versão mais nova do Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Erro ao carregar wallet.dat: Carteira requer uma versão mais nova do pfennig - Wallet needed to be rewritten: restart Pfennig to complete - A Carteira precisou ser reescrita: reinicie o Pfennig para completar + Wallet needed to be rewritten: restart pfennig to complete + A Carteira precisou ser reescrita: reinicie o pfennig para completar Error loading wallet.dat diff --git a/src/qt/locale/bitmark_pt_BR.ts~ b/src/qt/locale/bitmark_pt_BR.ts~ new file mode 100644 index 0000000..45a4abb --- /dev/null +++ b/src/qt/locale/bitmark_pt_BR.ts~ @@ -0,0 +1,3388 @@ + + + AboutDialog + + About GameCredits Core + Sobre o GameCredits Core + + + <b>GameCredits Core</b> version + versão do <b>GameCredits 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. + ⏎ +Este é um software experimental.⏎ +⏎ +Distribuido sob a licença de software MIT/X11, veja o arquivo anexo COPYING ou http://www.opensource.org/licenses/mit-license.php.⏎ +⏎ +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 Bitcoin Core Developers + Programadores do GameCredits Core + + + (%1-bit) + (%1-bit) + + + + AddressBookPage + + Double-click to edit address or label + 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 + + + &Copy + &Copiar + + + C&lose + &Fechar + + + &Copy Address + &Copiar Endereço + + + 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 + + + &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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Estes são os seus endereços GameCredits para receber pagamentos. Você pode querer enviar um endereço diferente para cada remetente, para acompanhar quem está pagando. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Estes são os seus endereços GameCredits 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 + + + Export Address List + Exportar lista de endereços + + + Comma separated file (*.csv) + Arquivo separado por vírgulas (*. csv) + + + Exporting Failed + Exportação Falhou + + + 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) + + + + 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 GameCreditsS</b>! + Atenção: Se você criptografar sua carteira e perder sua senha, você vai <b>perder todos os seus GameCreditsS!</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! + Atenção: A tecla Caps Lock está ligada! + + + Wallet encrypted + Carteira criptografada + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + O GameCredits irá fechar agora para finalizar o processo de encriptação. Lembre-se de que encriptar sua carteira não protege totalmente suas gamecreditss 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 + 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. + + + + GameCreditsGUI + + Sign &message... + &Assinar Mensagem... + + + Synchronizing with network... + Sincronizando com a rede... + + + &Overview + &Visão geral + + + Node + + + + Show general overview of wallet + Mostrar visão geral da carteira + + + &Transactions + &Transações + + + Browse transaction history + Navegar pelo histórico de transações + + + E&xit + S&air + + + Quit application + Sair da aplicação + + + Show information about GameCredits + Mostrar informação sobre GameCredits + + + 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 GameCredits address + Enviar moedas para um endereço gamecredits + + + Modify configuration options for GameCredits + Modificar opções de configuração para gamecredits + + + 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... + + + GameCredits + GameCredits + + + Wallet + Carteira + + + &Send + &Enviar + + + &Receive + &Receber + + + &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 GameCredits addresses to prove you own them + Assine mensagems com seus endereços GameCredits para provar que você é dono deles + + + Verify messages to ensure they were signed with specified GameCredits addresses + Verificar mensagens para se assegurar que elas foram assinadas pelo dono de Endereços GameCredits específicos + + + &File + &Arquivo + + + &Settings + &Configurações + + + &Help + &Ajuda + + + Tabs toolbar + Barra de ferramentas + + + [testnet] + [testnet] + + + GameCredits Core + Núcleo GameCredits + + + Request payments (generates QR codes and gamecredits: URIs) + Solicitações de pagamentos (gera códigos QR e gamecredits: URIs) + + + &About GameCredits Core + &A respeito do GameCredits 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 gamecredits: URI or payment request + Abrir um gamecredits: URI ou cobrança + + + &Command-line options + Opções de linha de &comando + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Mostra a mensagem de ajuda do GameCredits Core para pegar a lista com os comandos possíveis + + + GameCredits client + Cliente GameCredits + + + %n active connection(s) to GameCredits network + %n conexão ativa na rede GameCredits%n conexões ativas na rede GameCredits + + + 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 + Atenção + + + Information + Informação + + + Up to date + Atualizado + + + Catching up... + Recuperando o atraso ... + + + Sent transaction + Transação enviada + + + Incoming transaction + Transação recebida + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Data: %1 +Quantidade: %2 +Tipo: %3 +Endereço: %4 + + + 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. GameCredits can no longer continue safely and will quit. + Um erro fatal ocorreu. GameCredits não pode continuar em segurança e irá fechar. + + + + 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 + &Rótulo + + + 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 + + + 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 GameCredits address. + O endereço digitado "%1" não é um endereço GameCredits válido. + + + Could not unlock wallet. + Não foi possível desbloquear a carteira. + + + New key generation failed. + A geração de nova chave falhou. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + GameCredits Core - Opções de linha de comando + + + GameCredits Core + Núcleo GameCredits + + + 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 GameCredits Core. + Bem vindo ao GameCredits Core. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + A primeira vez que o programa é aberto você pode escolher onde o GameCredits Core vai guardar os dados. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits Core vai fazer download e guardar uma cópia da longa e única cadeia de blocos do GameCredits: 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: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Iniciar GameCredits automaticamente após se logar no sistema. + + + &Start GameCredits on system login + Iniciar GameCredits 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 GameCredits network through a SOCKS proxy. + Conectado na rede do GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Abrir as portas do cliente GameCredits 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 + + + Proxy &IP: + &IP do proxy: + + + &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 GameCredits. + A língua da interface com usuário pode ser escolhida aqui. Esta configuração só surtirá efeito após reiniciar o GameCredits. + + + &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 gamecreditss. + + + Whether to show GameCredits addresses in the transaction list or not. + Mostrar ou não endereços GameCredits 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 + + + default + padrão + + + none + nenhum + + + Confirm options reset + Confirmar redefinição de opções + + + Client restart required to activate changes. + Reinicialização do aplicativo necessária para efetivar alterações. + + + Client will be shutdown, do you want to proceed? + O aplicativo vai desligar, deseja continuar? + + + This change would require a client restart. + Essa mudança requer uma reinicialização do aplicativo. + + + The supplied proxy address is invalid. + O endereço proxy fornecido é inválido. + + + + OverviewPage + + Form + Formulário + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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 GameCredits depois que a conexão é estabelecida, mas este processo pode não estar completo ainda. + + + 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> + + + out of sync + fora de sincronia + + + + PaymentServer + + URI handling + Manipulação de URI + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + URI não pode ser decodificado! Isso pode ter sido causado por um endereço GameCredits 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 gamecredits: click-to-pay handler + Não foi possível iniciar gamecredits: 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 + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Erro: diretório de dados especificado "% 1" não existe. + + + 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. + + + Error: Invalid combination of -regtest and -testnet. + Erro: Combinação inválida de-regtest e testnet. + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Digite um endereço GameCredits (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + &Salvar imagem + + + &Copy Image + &Copiar Imagem + + + Save QR Code + Salvar código QR + + + 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 + + + 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 + + + &Console + &Console + + + &Network Traffic + Tráfico de Rede + + + &Clear + &Limpar + + + Totals + Totais + + + In: + Entrada: + + + Out: + Saída: + + + Build date + Data do 'build' + + + Debug log file + Arquivo de log de Depuração + + + Open the GameCredits 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 GameCredits do diretório atual de dados. Isso pode levar alguns segundos para arquivos de log grandes. + + + Clear console + Limpar console + + + Welcome to the GameCredits RPC console. + Bem-vindo ao console GameCredits 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 GameCredits 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 GameCredits. + + + 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 + + + Clear all fields of the form. + Limpar todos os campos do formulário. + + + Clear &All + Limpar Tudo + + + Balance: + Saldo: + + + Confirm the send action + Confirmar o envio + + + S&end + Enviar + + + Confirm send coins + Confirmar envio de dinheiro + + + %1 to %2 + %1 para %2 + + + 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. + + + Transaction creation failed! + A criação de transação falhou! + + + 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 gamecreditss na sua carteira já foram gastos em outro local, por exemplo se você tiver uma cópia do wallet.dat e os gamecreditss tiverem sido gastos na cópia mas não marcados como gastos aqui ainda. + + + Warning: Invalid GameCredits address + Atenção: endereço de GameCredits 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 + + A&mount: + Q&uantidade: + + + Pay &To: + Pagar &Para: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + O endereço para onde enviar o pagamento (ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Enter a label for this address to add it to your address book + Digite um rótulo para este endereço para adicioná-lo ao catálogo de endereços + + + &Label: + &Rótulo: + + + 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 entry + Remover esta entrada + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + A mensagem que foi anexada ao gamecredits: URI na qual será gravada na transação para sua referência. Nota: Essa mensagem não será gravada publicamente na rede GameCredits. + + + This is an unverified payment request. + Essa é uma cobrança não verificada. + + + Pay To: + Pague Para: + + + Memo: + Memorizar: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Endereço a ser usado para assinar a mensagem (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Assinar mensagem para provar que você é dono deste endereço GameCredits + + + 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + O endereço usado para assinar a mensagem (ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Verificar mensagem para se assegurar que ela foi assinada pelo dono de um endereço GameCredits específico. + + + Verify &Message + Verificar %Mensagem + + + Reset all verify message fields + Limpar todos os campos de assinatura da mensagem + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Digite um endereço GameCredits (exemplo: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Clique em "Assinar Mensagem" para gerar a assinatura + + + 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. + 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. + + + + SplashScreen + + GameCredits Core + Núcleo GameCredits + + + The Bitcoin Core Developers + Programadores do GameCredits 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 + 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 + + + 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. + GameCreditss 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 + + + + 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 + + + + 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 + + + Confirmed (%1 confirmations) + Confirmado (%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 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. + + + + 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 rótulo + + + Min amount + Quantidade 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 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 + Rótulo + + + Address + Endereço + + + Amount + Quantidade + + + ID + ID + + + Range: + Intervalo: + + + to + para + + + + WalletFrame + + No wallet has been loaded. + Nenhuma carteira foi carregada. + + + + WalletModel + + Send Coins + Send Coins + + + + 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 %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 + + + + gamecredits-core + + Usage: + Uso: + + + List commands + Lista de comandos + + + Get help for a command + Obtenha ajuda sobre um comando + + + Options: + Opções: + + + Specify configuration file (default: gamecredits.conf) + Especifique um arquivo de configurações (padrão: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Especifique um arquivo de pid (padrão: gamecreditsd.pid) + + + Specify data directory + Especificar diretório de dados + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Procurar por conexões em <port> (padrão: 40002 ou testnet:50001) + + + 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: 40001 or testnet: 50000) + Escutar conexões JSON-RPC na porta <porta> (padrão: 40001 ou testnet: 50000) + + + Accept command line and JSON-RPC commands + Aceitar linha de comando e comandos JSON-RPC + + + GameCredits Core RPC client version + Versão do cliente GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, você deve especificar uma senha rpcpassword no arquivo de configuração:⏎ +%s⏎ +É recomendado que você use a seguinte senha aleatória:⏎ +rpcuser=gamecreditsrpc⏎ +rpcpassword=%s⏎ +(você não precisa lembrar esta senha)⏎ +O nome de usuário e a senha NÃO PODEM ser os mesmos.⏎ +Se o arquivo não existir, crie um com permissão de leitura apenas para o dono.⏎ +É recomendado também definir um alertnotify para que você seja notificado de problemas;⏎ +por exemplo: alertnotify=echo %%s | mail -s "GameCredits Alert" admin@foo.com⏎ + + + + 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 + + + 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 gamecreditss de sua carteira já haviam sido gastos, por exemplo se você usou uma cópia do arquivo wallet.dat e alguns gamecreditss 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 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) + + + 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. GameCredits Core is probably already running. + Impossível ouvir em %s neste computador. GameCredits 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. + 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Atenção: Por favor, verifique que a data e hora do seu computador estão corretas! Se o seu relógio estiver errado, o GameCredits 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. + 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. + 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 + + + GameCredits Core Daemon + GameCredits 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: 40001 or testnet: 50000) + Conectar-se ao JSON-RPC em <port> (padrão: 40001 or testnet: 50000) + + + 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 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) + + + 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) + + + 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 + + + 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 gamecredits-cli): + Exemplo de uso (obsoleto, use gamecredits-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 + + + Cannot obtain a lock on data directory %s. GameCredits Core is probably already running. + Não foi possível obter proteção exclusiva ao diretório de dados %s. GameCredits 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 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) + + + Print block on startup, if found in block index + Imprime bloco ao iniciar, se encontrado no índice de blocos + + + Print block tree on startup (default: 0) + Imprime árvore de blocos ao iniciar (padrão: 0) + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + Opções RPC SSL: (veja o GameCredits 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 GameCredits Wiki for SSL setup instructions) + Opções SSL: (veja a Wiki do GameCredits para instruções de configuração SSL) + + + Send command to GameCredits Core + Enviar comando ao GameCredits 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 + + + 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 GameCredits Core Daemon + Inicializar serviço GameCredits 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) + + + Username for JSON-RPC connections + Nome de usuário para conexões JSON-RPC + + + Warning + Atenção + + + Warning: This version is obsolete, upgrade required! + Atenção: Esta versão está obsoleta, atualização exigida! + + + 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> (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) + + + 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) + + + 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 GameCredits + Erro ao carregar wallet.dat: Carteira requer uma versão mais nova do GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + A Carteira precisou ser reescrita: reinicie o GameCredits 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 + + + 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. + Você precisa especificar rpcpassword=<senha> no arquivo de configurações:⏎ +%s⏎ +Se o arquivo não existir, crie um com permissão de leitura apenas pelo dono + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_pt_PT.ts b/src/qt/locale/bitmark_pt_PT.ts index 47a6982..9294bbb 100644 --- a/src/qt/locale/bitmark_pt_PT.ts +++ b/src/qt/locale/bitmark_pt_PT.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Sobre o Pfennig Core + About pfennig Core + Sobre o pfennig Core - <b>Pfennig Core</b> version - versão do <b>Pfennig Core</b> + <b>pfennig Core</b> version + versão do <b>pfennig Core</b> @@ -29,7 +29,7 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open The Bitcoin Core Developers - Os programadores Pfennig Core + Os programadores pfennig Core (%1-bit) @@ -103,12 +103,12 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open Endereços de depósito - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Estes são os seus endereços Pfennig para enviar pagamentos. Verifique sempre o valor e o endereço de envio antes de enviar moedas. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Estes são os seus endereços pfennig para enviar pagamentos. Verifique sempre o valor e o endereço de envio antes de enviar moedas. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Estes são os seus endereços Pfennig para receber pagamentos. É recomendado que utilize um endereço novo para cada transacção. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Estes são os seus endereços pfennig para receber pagamentos. É recomendado que utilize um endereço novo para cada transacção. Copy &Label @@ -205,8 +205,8 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open Confirmar encriptação da carteira - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Atenção: Se encriptar a carteira e perder a sua senha irá <b>PERDER TODOS OS SEUS PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Atenção: Se encriptar a carteira e perder a sua senha irá <b>PERDER TODOS OS SEUS pfennigS</b>! Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open Carteira encriptada - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - O cliente Pfennig 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 pfennigs de serem roubados por programas maliciosos que infectem o seu computador. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + O cliente pfennig 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 pfennigs de serem roubados por programas maliciosos que infectem o seu computador. Wallet encryption failed @@ -258,7 +258,7 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open - PfennigGUI + pfennigGUI Sign &message... Assinar &mensagem... @@ -296,8 +296,8 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open Sair da aplicação - Show information about Pfennig - Mostrar informação sobre o Pfennig + Show information about pfennig + Mostrar informação sobre o pfennig About &Qt @@ -344,11 +344,11 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open A reindexar blocos no disco... - Send coins to a Pfennig address + Send coins to a pfennig address Enviar moedas para um endereço pfennig - Modify configuration options for Pfennig + Modify configuration options for pfennig Modificar opções de configuração para pfennig @@ -372,8 +372,8 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open &Verificar mensagem... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open Encriptar as chaves privadas que pertencem à sua carteira - Sign messages with your Pfennig addresses to prove you own them - Assine mensagens com os seus endereços Pfennig para provar que os controla + Sign messages with your pfennig addresses to prove you own them + Assine mensagens com os seus endereços pfennig para provar que os controla - Verify messages to ensure they were signed with specified Pfennig addresses - Verifique mensagens para assegurar que foram assinadas com o endereço Pfennig especificado + Verify messages to ensure they were signed with specified pfennig addresses + Verifique mensagens para assegurar que foram assinadas com o endereço pfennig especificado &File @@ -428,16 +428,16 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open [rede de testes] - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core Request payments (generates QR codes and pfennig: URIs) Solicitar pagamentos (gera códigos QR e URIs pfennig:) - &About Pfennig Core - &Sobre o Pfennig Core + &About pfennig Core + &Sobre o pfennig Core Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ Este produto inclui software desenvolvido pelo Projecto OpenSSL para uso no Open Opções da linha de &comandos - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Mostrar a mensagem de ajuda do Pfennig Core para obter uma lista com possíveis opções de linha de comandos + Show the pfennig Core help message to get a list with possible pfennig command-line options + Mostrar a mensagem de ajuda do pfennig Core para obter uma lista com possíveis opções de linha de comandos - Pfennig client - Cliente Pfennig + pfennig client + Cliente pfennig - %n active connection(s) to Pfennig network - %n ligação ativa à rede Pfennig%n ligações ativas à rede Pfennig + %n active connection(s) to pfennig network + %n ligação ativa à rede pfennig%n ligações ativas à rede pfennig No block source available... @@ -559,8 +559,8 @@ Endereço: %4 A carteira está <b>encriptada</b> e atualmente <b>bloqueada</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Ocorreu um erro fatal. O Pfennig não pode continuar com segurança e irá fechar. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Ocorreu um erro fatal. O pfennig não pode continuar com segurança e irá fechar. @@ -844,7 +844,7 @@ Endereço: %4 O endereço introduzido "%1" já se encontra no livro de endereços. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. O endereço introduzido "%1" não é um endereço pfennig válido. @@ -882,12 +882,12 @@ Endereço: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core - Opções de linha de comandos + pfennig Core - Command-line options + pfennig Core - Opções de linha de comandos - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core version @@ -933,16 +933,16 @@ Endereço: %4 Bem-vindo - Welcome to Pfennig Core. - Bem-vindo ao Pfennig Core. + Welcome to pfennig Core. + Bem-vindo ao pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Sendo esta a primeira vez que o programa é iniciado, poderá escolher onde o Pfennig Core irá guardar os seus dados. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Sendo esta a primeira vez que o programa é iniciado, poderá escolher onde o pfennig Core irá guardar os seus dados. - Pfennig Core will download and store a copy of the Pfennig 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 Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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 pfennig 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 @@ -953,8 +953,8 @@ Endereço: %4 Utilizar uma pasta de dados personalizada: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1015,12 +1015,12 @@ Endereço: %4 Pagar &taxa de transação - Automatically start Pfennig after logging in to the system. - Começar o Pfennig automaticamente ao iniciar sessão no sistema. + Automatically start pfennig after logging in to the system. + Começar o pfennig automaticamente ao iniciar sessão no sistema. - &Start Pfennig on system login - &Começar o Pfennig ao iniciar o sistema + &Start pfennig on system login + &Começar o pfennig ao iniciar o sistema Size of &database cache @@ -1035,8 +1035,8 @@ Endereço: %4 Número de processos de &verificação de scripts - Connect to the Pfennig network through a SOCKS proxy. - Ligar à rede Pfennig através de um proxy SOCKS. + Connect to the pfennig network through a SOCKS proxy. + Ligar à rede pfennig através de um proxy SOCKS. &Connect through SOCKS proxy (default proxy): @@ -1095,7 +1095,7 @@ Endereço: %4 &Gastar troco não confirmado - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. Abrir a porta do cliente pfennig automaticamente no seu router. Isto apenas funciona se o seu router suportar UPnP e este se encontrar ligado. @@ -1151,8 +1151,8 @@ Endereço: %4 &Linguagem da interface de utilizador: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - A linguagem da interface do utilizador pode ser definida aqui. Esta definição entrará em efeito após reiniciar o Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + A linguagem da interface do utilizador pode ser definida aqui. Esta definição entrará em efeito após reiniciar o pfennig. &Unit to show amounts in: @@ -1163,8 +1163,8 @@ Endereço: %4 Escolha a subdivisão unitária a ser mostrada por defeito na aplicação e ao enviar moedas. - Whether to show Pfennig addresses in the transaction list or not. - Se mostrar, ou não, os endereços Pfennig na lista de transações. + Whether to show pfennig addresses in the transaction list or not. + Se mostrar, ou não, os endereços pfennig na lista de transações. &Display addresses in transaction list @@ -1218,8 +1218,8 @@ Endereço: %4 Formulário - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig depois de estabelecer ligação, mas este processo ainda não está completo. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig depois de estabelecer ligação, mas este processo ainda não está completo. Wallet @@ -1273,8 +1273,8 @@ Endereço: %4 Manuseamento de URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - O URI não foi lido correctamente! Isto pode ser causado por um endereço Pfennig inválido ou por parâmetros URI malformados. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + O URI não foi lido correctamente! Isto pode ser causado por um endereço pfennig inválido ou por parâmetros URI malformados. Requested payment amount of %1 is too small (considered dust). @@ -1340,8 +1340,8 @@ Endereço: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1356,12 +1356,12 @@ Endereço: %4 Erro: Combinação inválida de -regtest e -testnet. - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introduza um endereço Pfennig (p.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduza um endereço pfennig (p.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1482,7 +1482,7 @@ Endereço: %4 Ficheiro de registo de depuração - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig 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. @@ -1490,8 +1490,8 @@ Endereço: %4 Limpar consola - Welcome to the Pfennig RPC console. - Bem-vindo à consola RPC Pfennig. + Welcome to the pfennig RPC console. + Bem-vindo à consola RPC pfennig. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1553,8 +1553,8 @@ Endereço: %4 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 Pfennig 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 Pfennig. + 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 pfennig 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 pfennig. An optional label to associate with the new receiving address. @@ -1866,8 +1866,8 @@ Endereço: %4 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 Pfennig address - Aviso: Endereço Pfennig inválido + Warning: Invalid pfennig address + Aviso: Endereço pfennig inválido (no label) @@ -1953,8 +1953,8 @@ Endereço: %4 Introduza um rótulo para este endereço para o adicionar à sua lista de endereços usados - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. - Uma mensagem que estava anexada ao URI pfennig: que será armazenada com a transação para sua referência. Nota: Esta mensagem não será enviada através da rede Pfennig. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. + Uma mensagem que estava anexada ao URI pfennig: que será armazenada com a transação para sua referência. Nota: Esta mensagem não será enviada através da rede pfennig. This is an unverified payment request. @@ -1972,8 +1972,8 @@ Endereço: %4 ShutdownWindow - Pfennig Core is shutting down... - O Pfennig Core está a encerrar... + pfennig Core is shutting down... + O pfennig Core está a encerrar... Do not shut down the computer until this window disappears. @@ -2027,8 +2027,8 @@ Endereço: %4 Copiar a assinatura actual para a área de transferência - Sign the message to prove you own this Pfennig address - Assine uma mensagem para provar que é dono deste endereço Pfennig + Sign the message to prove you own this pfennig address + Assine uma mensagem para provar que é dono deste endereço pfennig Sign &Message @@ -2055,8 +2055,8 @@ Endereço: %4 O endereço utilizado para assinar a mensagem (p.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Verifique a mensagem para assegurar que foi assinada com o endereço Pfennig especificado + Verify the message to ensure it was signed with the specified pfennig address + Verifique a mensagem para assegurar que foi assinada com o endereço pfennig especificado Verify &Message @@ -2067,8 +2067,8 @@ Endereço: %4 Repor todos os campos de verificação de mensagem - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introduza um endereço Pfennig (p.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduza um endereço pfennig (p.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2126,12 +2126,12 @@ Endereço: %4 SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core The Bitcoin Core Developers - Os programadores do Pfennig Core + Os programadores do pfennig Core [testnet] @@ -2621,8 +2621,8 @@ Endereço: %4 Especificar pasta de dados - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Escute ligações na porta <n> (por defeito: P2PPORT ou testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Escute ligações na porta <n> (por defeito: 40002 ou testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2649,15 +2649,15 @@ Endereço: %4 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: RPCPORT or testnet: 1RPCPORT) - Escutar por ligações JSON-RPC na porta <n> (por defeito: RPCPORT ou rede de testes: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Escutar por ligações JSON-RPC na porta <n> (por defeito: 40001 ou rede de testes: 50000) Accept command line and JSON-RPC commands Aceitar comandos de linha de comandos e JSON-RPC - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2682,7 +2682,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, deverá definir uma rpcpassword no ficheiro de configuração: %s @@ -2693,7 +2693,7 @@ rpcpassword=%s 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 um alertnotify para que seja alertado sobre problemas; -por exemplo: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@foo.com +por exemplo: alertnotify=echo %%s | mail -s "Alerta pfennig" admin@foo.com Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -2764,8 +2764,8 @@ por exemplo: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@foo 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. Pfennig Core is probably already running. - Incapaz de vincular à porta %s neste computador. O Pfennig Core provavelmente já está a correr. + Unable to bind to %s on this computer. pfennig Core is probably already running. + Incapaz de vincular à porta %s neste computador. O pfennig Core provavelmente já está a correr. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2776,8 +2776,8 @@ por exemplo: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@foo Atenção: -paytxfee está definida com um valor muito alto! Esta é a taxa que irá pagar se enviar uma transação. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig 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 Pfennig não irá funcionar correctamente. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig 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 pfennig não irá funcionar correctamente. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2812,8 +2812,8 @@ por exemplo: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@foo Tentar recuperar chaves privadas de um wallet.dat corrupto - Pfennig Core Daemon - Servidor Pfennig Core + pfennig Core Daemon + Servidor pfennig Core Block creation options: @@ -2832,8 +2832,8 @@ por exemplo: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@foo Ligar através de proxy SOCKS: - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Ligar ao JSON-RPC na porta <n> (por defeito: RPCPORT ou rede de testes: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Ligar ao JSON-RPC na porta <n> (por defeito: 40001 ou rede de testes: 50000) Connection options: @@ -3056,8 +3056,8 @@ por exemplo: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@foo Importar blocos de um ficheiro blk000??.dat externo - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - Impossível trancar a pasta de dados %s. Provavelmente o Pfennig Core já está a ser executado. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + Impossível trancar a pasta de dados %s. Provavelmente o pfennig 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) @@ -3120,7 +3120,7 @@ por exemplo: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@foo - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3140,11 +3140,11 @@ por exemplo: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@foo - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Opções SSL: (ver a Pfennig Wiki para instruções de configuração SSL) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Opções SSL: (ver a pfennig Wiki para instruções de configuração SSL) - Send command to Pfennig Core + Send command to pfennig Core @@ -3180,7 +3180,7 @@ por exemplo: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@foo Especificar tempo de espera da ligação em millisegundos (por defeito: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3296,12 +3296,12 @@ por exemplo: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@foo Erro ao carregar wallet.dat: Carteira danificada - Error loading wallet.dat: Wallet requires newer version of Pfennig - Erro ao carregar wallet.dat: A Carteira requer uma versão mais recente do Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Erro ao carregar wallet.dat: A Carteira requer uma versão mais recente do pfennig - Wallet needed to be rewritten: restart Pfennig to complete - A Carteira precisou de ser reescrita: reinicie o Pfennig para completar o processo + Wallet needed to be rewritten: restart pfennig to complete + A Carteira precisou de ser reescrita: reinicie o pfennig para completar o processo Error loading wallet.dat diff --git a/src/qt/locale/bitmark_pt_PT.ts~ b/src/qt/locale/bitmark_pt_PT.ts~ new file mode 100644 index 0000000..da47f44 --- /dev/null +++ b/src/qt/locale/bitmark_pt_PT.ts~ @@ -0,0 +1,3387 @@ + + + AboutDialog + + About GameCredits Core + Sobre o GameCredits Core + + + <b>GameCredits Core</b> version + versão do <b>GameCredits 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. + +Este é um programa experimental. + +Distribuído sob uma licença de software MIT/X11, por favor verifique o ficheiro anexo license.txt ou http://www.opensource.org/licenses/mit-license.php. + +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 Bitcoin Core Developers + Os programadores GameCredits Core + + + (%1-bit) + + + + + AddressBookPage + + 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 + Copiar o endereço selecionado para a área de transferência + + + &Copy + &Copiar + + + C&lose + F&echar + + + &Copy Address + &Copiar Endereço + + + 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 + + + &Delete + 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Estes são os seus endereços GameCredits para enviar pagamentos. Verifique sempre o valor e o endereço de envio antes de enviar moedas. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Estes são os seus endereços GameCredits para receber pagamentos. É recomendado que utilize um endereço novo para cada transacção. + + + Copy &Label + Copiar &Rótulo + + + &Edit + &Editar + + + Export Address List + Exportar Lista de Endereços + + + Comma separated file (*.csv) + Ficheiro separado por vírgulas (*.csv) + + + Exporting Failed + A Exportação Falhou + + + 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) + + + + AskPassphraseDialog + + Passphrase Dialog + Diálogo de frase de segurança + + + Enter passphrase + 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>. + 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 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 GameCreditsS</b>! + Atenção: Se encriptar a carteira e perder a sua senha irá <b>PERDER TODOS OS SEUS GameCreditsS</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 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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + O cliente GameCredits 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 gamecreditss 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. + + + + GameCreditsGUI + + Sign &message... + Assinar &mensagem... + + + Synchronizing with network... + A sincronizar com a rede... + + + &Overview + Visã&o geral + + + Node + + + + Show general overview of wallet + Mostrar visão geral da carteira + + + &Transactions + &Transações + + + Browse transaction history + Navegar pelo histórico de transações + + + E&xit + Fec&har + + + Quit application + Sair da aplicação + + + Show information about GameCredits + Mostrar informação sobre o GameCredits + + + 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... + A importar blocos do disco... + + + Reindexing blocks on disk... + A reindexar blocos no disco... + + + Send coins to a GameCredits address + Enviar moedas para um endereço gamecredits + + + Modify configuration options for GameCredits + Modificar opções de configuração para gamecredits + + + 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... + + + GameCredits + GameCredits + + + Wallet + Carteira + + + &Send + &Enviar + + + &Receive + &Receber + + + &Show / Hide + Mo&strar / Ocultar + + + Show or hide the main Window + 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 GameCredits addresses to prove you own them + Assine mensagens com os seus endereços GameCredits para provar que os controla + + + Verify messages to ensure they were signed with specified GameCredits addresses + Verifique mensagens para assegurar que foram assinadas com o endereço GameCredits especificado + + + &File + &Ficheiro + + + &Settings + Con&figurações + + + &Help + A&juda + + + Tabs toolbar + Barra de separadores + + + [testnet] + [rede de testes] + + + GameCredits Core + GameCredits Core + + + Request payments (generates QR codes and gamecredits: URIs) + Solicitar pagamentos (gera códigos QR e URIs gamecredits:) + + + &About GameCredits Core + &Sobre o GameCredits 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 gamecredits: URI or payment request + Abrir URI gamecredits: ou pedido de pagamento + + + &Command-line options + Opções da linha de &comandos + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Mostrar a mensagem de ajuda do GameCredits Core para obter uma lista com possíveis opções de linha de comandos + + + GameCredits client + Cliente GameCredits + + + %n active connection(s) to GameCredits network + %n ligação ativa à rede GameCredits%n ligações ativas à rede GameCredits + + + No block source available... + Nenhuma fonte de blocos disponível... + + + Processed %1 of %2 (estimated) blocks of transaction history. + 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. + O último bloco recebido foi gerado %1 atrás. + + + Transactions after this will not yet be visible. + Transações posteriores não serão visíveis por enquanto. + + + Error + Erro + + + Warning + Aviso + + + Information + Informação + + + Up to date + Atualizado + + + Catching up... + Recuperando o atraso... + + + Sent transaction + Transação enviada + + + Incoming transaction + Transação recebida + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Data: %1 +Quantia: %2 +Tipo: %3 +Endereço: %4 + + + 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. GameCredits can no longer continue safely and will quit. + Ocorreu um erro fatal. O GameCredits não pode continuar com segurança e irá fechar. + + + + 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 + + + + 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 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 + + + 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 GameCredits address. + O endereço introduzido "%1" não é um endereço gamecredits válido. + + + Could not unlock wallet. + Impossível desbloquear carteira. + + + New key generation failed. + Falha ao gerar nova chave. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + GameCredits Core - Opções de linha de comandos + + + GameCredits Core + GameCredits Core + + + version + versão + + + Usage: + Utilização: + + + command-line options + opções da linha de comandos + + + UI options + 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 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 GameCredits Core. + Bem-vindo ao GameCredits Core. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Sendo esta a primeira vez que o programa é iniciado, poderá escolher onde o GameCredits Core irá guardar os seus dados. + + + GameCredits Core will download and store a copy of the GameCredits 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 GameCredits 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: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Começar o GameCredits automaticamente ao iniciar sessão no sistema. + + + &Start GameCredits on system login + &Começar o GameCredits 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 GameCredits network through a SOCKS proxy. + Ligar à rede GameCredits 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. + Repor todas as opções do cliente. + + + &Reset Options + &Repor Opções + + + &Network + &Rede + + + (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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Abrir a porta do cliente gamecredits 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 + + + Proxy &IP: + &IP do proxy: + + + &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 de sistema após minimizar a janela. + + + &Minimize to the tray instead of the taskbar + &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 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 GameCredits. + A linguagem da interface do utilizador pode ser definida aqui. Esta definição entrará em efeito após reiniciar o GameCredits. + + + &Unit to show amounts in: + &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 GameCredits addresses in the transaction list or not. + Se mostrar, ou não, os endereços GameCredits 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 + + + default + padrão + + + none + nenhum + + + Confirm options reset + Confirme a reposição de opções + + + Client restart required to activate changes. + É necessário reiniciar o cliente para ativar as alterações. + + + Client will be shutdown, do you want to proceed? + O cliente será desligado, deseja continuar? + + + This change would require a client restart. + Esta alteração requer um reinício do cliente. + + + The supplied proxy address is invalid. + O endereço de proxy introduzido é inválido. + + + + OverviewPage + + Form + Formulário + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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 GameCredits depois de estabelecer ligação, mas este processo ainda não está completo. + + + 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 amadureceu + + + Total: + Total: + + + Your current total balance + O seu saldo total actual + + + <b>Recent transactions</b> + <b>Transações recentes</b> + + + out of sync + fora de sincronia + + + + PaymentServer + + URI handling + Manuseamento de URI + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + O URI não foi lido correctamente! Isto pode ser causado por um endereço GameCredits 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 gamecredits: click-to-pay handler + Impossível iniciar o controlador de gamecredits: 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 + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Erro: Pasta de dados especificada "%1" não existe. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + Erro: Combinação inválida de -regtest e -testnet. + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduza um endereço GameCredits (p.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + &Salvar Imagem... + + + &Copy Image + &Copiar Imagem + + + Save QR Code + Guardar Código QR + + + 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 + Hora de inicialização + + + Network + Rede + + + Name + Nome + + + Number of connections + Número de ligações + + + Block chain + Cadeia de blocos + + + Current number of blocks + Número actual de blocos + + + Estimated total blocks + Total estimado de blocos + + + Last block time + Data do último bloco + + + &Open + &Abrir + + + &Console + &Consola + + + &Network Traffic + &Tráfego de Rede + + + &Clear + &Limpar + + + Totals + Totais + + + In: + Entrada: + + + Out: + Saída: + + + Build date + Data de compilação + + + Debug log file + Ficheiro de registo de depuração + + + Open the GameCredits 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 GameCredits RPC console. + Bem-vindo à consola RPC GameCredits. + + + 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. + 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 GameCredits 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 GameCredits. + + + 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 + + + Clear all fields of the form. + Limpar todos os campos do formulário. + + + Clear &All + &Limpar Tudo + + + Balance: + Saldo: + + + Confirm the send action + Confirme ação de envio + + + S&end + &Enviar + + + Confirm send coins + Confirme envio de moedas + + + %1 to %2 + %1 para %2 + + + 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. + + + Transaction creation failed! + Erro: A criação da transação falhou! + + + 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 GameCredits address + Aviso: Endereço GameCredits 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 + + A&mount: + Qu&antia: + + + Pay &To: + &Pagar A: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + O endereço para onde enviar o pagamento (p.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + Remover esta entrada + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + Uma mensagem que estava anexada ao URI gamecredits: que será armazenada com a transação para sua referência. Nota: Esta mensagem não será enviada através da rede GameCredits. + + + This is an unverified payment request. + Este é um pedido de pagamento não-verificado. + + + Pay To: + Pagar A: + + + Memo: + Memorando: + + + + ShutdownWindow + + GameCredits Core is shutting down... + O GameCredits 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 detalhadas com as quais concorde. + + + The address to sign the message with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + O endereço a utilizar para assinar a mensagem (p.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Choose previously used address + Escolher endereço usado previamente + + + Alt+A + Alt+A + + + Paste address from clipboard + 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 GameCredits address + Assine uma mensagem para provar que é dono deste endereço GameCredits + + + Sign &Message + Assinar &Mensagem + + + Reset all sign message fields + 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 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + O endereço utilizado para assinar a mensagem (p.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Verifique a mensagem para assegurar que foi assinada com o endereço GameCredits especificado + + + Verify &Message + Verificar &Mensagem + + + Reset all verify message fields + Repor todos os campos de verificação de mensagem + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduza um endereço GameCredits (p.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Clique "Assinar mensagem" para gerar a assinatura + + + The entered address is invalid. + 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 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. + + + + SplashScreen + + GameCredits Core + GameCredits Core + + + The Bitcoin Core Developers + Os programadores do GameCredits 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 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 + + + 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 + + + + 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 + + + + 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 + + + Confirmed (%1 confirmations) + 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 a si mesmo + + + Mined + Minadas + + + (n/a) + (n/d) + + + Transaction status. Hover over this field to show number of confirmations. + 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 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. + + + + 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 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 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írgulas (*.csv) + + + Confirmed + Confirmada + + + Date + Data + + + Type + Tipo + + + Label + Rótulo + + + Address + Endereço + + + Amount + Quantia + + + ID + ID + + + Range: + Período: + + + to + até + + + + WalletFrame + + No wallet has been loaded. + Nenhuma carteira foi carregada. + + + + WalletModel + + Send Coins + Enviar Moedas + + + + 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 %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 + + + + gamecredits-core + + Usage: + Utilização: + + + List commands + Listar comandos + + + Get help for a command + Obter ajuda para um comando + + + Options: + Opções: + + + Specify configuration file (default: gamecredits.conf) + Especificar ficheiro de configuração (por defeito: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Especificar ficheiro pid (por defeito: gamecreditsd.pid) + + + Specify data directory + Especificar pasta de dados + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Escute ligações na porta <n> (por defeito: 40002 ou testnet: 50001) + + + 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 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 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: 40001 or testnet: 50000) + Escutar por ligações JSON-RPC na porta <n> (por defeito: 40001 ou rede de testes: 50000) + + + Accept command line and JSON-RPC commands + Aceitar comandos de linha de comandos e JSON-RPC + + + GameCredits Core RPC client version + + + + Run in the background as a daemon and accept commands + Correr o processo em segundo plano e aceitar comandos + + + Use the test network + 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, deverá definir uma rpcpassword no ficheiro de configuração: +%s +É recomendado que use a seguinte palavra-passe aleatória: +rpcuser=gamecreditsrpc +rpcpassword=%s +(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 um alertnotify para que seja alertado sobre problemas; +por exemplo: alertnotify=echo %%s | mail -s "Alerta GameCredits" 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 + Associar a endereço específico e escutar sempre nele. Use a notação [anfitrião]:porta 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. + 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 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! + + + 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) + + + 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 testes pré-lançamento - use à sua responsabilidade - não usar para minar ou aplicações comerciais + + + Unable to bind to %s on this computer. GameCredits Core is probably already running. + Incapaz de vincular à porta %s neste computador. O GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits 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 GameCredits 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 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 + + + GameCredits Core Daemon + Servidor GameCredits 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: 40001 or testnet: 50000) + Ligar ao JSON-RPC na porta <n> (por defeito: 40001 ou rede de testes: 50000) + + + 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 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 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 %s da base de dados da carteira + + + Error loading block database + Erro ao carregar base de dados de blocos + + + Error opening block database + 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 quiser isto. + + + Failed to read block info + Falha ao ler informação do 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ção do bloco + + + Failed to write block + Falha ao escrever bloco + + + Failed to write file info + 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 inicializar (por defeito: 288, 0 = todos) + + + 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. + 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 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 gamecredits-cli): + Utilização (obsoleto, usar gamecredits-cli): + + + Verifying blocks... + A verificar blocos... + + + Verifying wallet... + 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 + + + Cannot obtain a lock on data directory %s. GameCredits Core is probably already running. + Impossível trancar a pasta de dados %s. Provavelmente o GameCredits 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 amount for -minrelaytxfee=<amount>: '%s' + Quantia inválida para -minrelaytxfee=<quantidade>: '%s' + + + Invalid amount for -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) + 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) + 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 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) + + + Print block on startup, if found in block index + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the GameCredits 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 GameCredits Wiki for SSL setup instructions) + Opções SSL: (ver a GameCredits Wiki para instruções de configuração SSL) + + + Send command to GameCredits 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 + + + 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 GameCredits 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) + + + 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! + + + 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 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 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 + 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) + + + This help message + Esta mensagem de ajuda + + + Unable to bind to %s on this computer (bind returned error %d, %s) + Incapaz de vincular à porta %s neste computador (vínculo retornou erro %d, %s) + + + Allow DNS lookups for -addnode, -seednode and -connect + Permitir procuras DNS para -addnode, -seednode e -connect + + + Loading addresses... + 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 GameCredits + Erro ao carregar wallet.dat: A Carteira requer uma versão mais recente do GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + A Carteira precisou de ser reescrita: reinicie o GameCredits 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 de proxy -socks requisitada desconhecida: %i + + + Cannot resolve -bind address: '%s' + Não foi possível resolver o endereço -bind: '%s' + + + Cannot resolve -externalip address: '%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... + A carregar índice de blocos... + + + Add a node to connect to and attempt to keep the connection open + Adicionar um nó para se ligar e tentar manter a ligação aberta + + + Loading wallet... + 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. + Deverá definir rpcpassword=<password> no ficheiro de configuração: +%s +Se o ficheiro não existir, crie-o com permissões de leitura apenas para o dono. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_ro_RO.ts b/src/qt/locale/bitmark_ro_RO.ts index 5e44f2e..0f441f8 100644 --- a/src/qt/locale/bitmark_ro_RO.ts +++ b/src/qt/locale/bitmark_ro_RO.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Despre Nucleul Pfennig + About pfennig Core + Despre Nucleul pfennig - <b>Pfennig Core</b> version - <b>Nucleul Pfennig </b> versiune + <b>pfennig Core</b> version + <b>Nucleul pfennig </b> versiune @@ -29,7 +29,7 @@ Acest produs include programe dezvoltate de către OpenSSL Project pentru a fi f The Bitcoin Core Developers - Dezvoltatorii Pfennig Core + Dezvoltatorii pfennig Core (%1-bit) @@ -103,12 +103,12 @@ Acest produs include programe dezvoltate de către OpenSSL Project pentru a fi f Adresa pe care primiti - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Acestea sunt adresele dumneavoastra Pfennig care pot fi folosite la trimiterea platilor. Verificati totdeauna cantitatea si adresa de primire inainte de a trimite monezi. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Acestea sunt adresele dumneavoastra pfennig care pot fi folosite la trimiterea platilor. Verificati totdeauna cantitatea si adresa de primire inainte de a trimite monezi. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Acestea sunt adresele dumneavoastra Pfennig folosite pentru a primi plati. Este recomandat sa folositi cate o adresa noua de primire pentru fiecare tranzactie in parte. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Acestea sunt adresele dumneavoastra pfennig folosite pentru a primi plati. Este recomandat sa folositi cate o adresa noua de primire pentru fiecare tranzactie in parte. Copy &Label @@ -205,8 +205,8 @@ Acest produs include programe dezvoltate de către OpenSSL Project pentru a fi f Confirmă criptarea portofelului - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Atenție: Dacă pierdeţi parola portofelului electronic dupa criptare, <b>VEŢI PIERDE ÎNTREAGA SUMĂ DE Pfennig ACUMULATĂ</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Atenție: Dacă pierdeţi parola portofelului electronic dupa criptare, <b>VEŢI PIERDE ÎNTREAGA SUMĂ DE pfennig ACUMULATĂ</b>! Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ Acest produs include programe dezvoltate de către OpenSSL Project pentru a fi f Portofel criptat - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig 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. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig 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 @@ -258,7 +258,7 @@ Acest produs include programe dezvoltate de către OpenSSL Project pentru a fi f - PfennigGUI + pfennigGUI Sign &message... Semnează &mesaj... @@ -296,8 +296,8 @@ Acest produs include programe dezvoltate de către OpenSSL Project pentru a fi f Închide aplicația - Show information about Pfennig - Arată informații despre Pfennig + Show information about pfennig + Arată informații despre pfennig About &Qt @@ -344,12 +344,12 @@ Acest produs include programe dezvoltate de către OpenSSL Project pentru a fi f Se reindexează blocurile pe disc... - Send coins to a Pfennig address - Trimite monede către o adresă Pfennig + Send coins to a pfennig address + Trimite monede către o adresă pfennig - Modify configuration options for Pfennig - Modifică opțiunile de configurare pentru Pfennig + Modify configuration options for pfennig + Modifică opțiunile de configurare pentru pfennig Backup wallet to another location @@ -372,8 +372,8 @@ Acest produs include programe dezvoltate de către OpenSSL Project pentru a fi f &Verifică mesajul... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ Acest produs include programe dezvoltate de către OpenSSL Project pentru a fi f Criptează cheile private ale portofelului tău - Sign messages with your Pfennig addresses to prove you own them - Semnează mesaje cu adresa ta Pfennig pentru a dovedi că îți aparțin + Sign messages with your pfennig addresses to prove you own them + Semnează mesaje cu adresa ta pfennig pentru a dovedi că îți aparțin - Verify messages to ensure they were signed with specified Pfennig addresses - Verifică mesaje pentru a te asigura că au fost semnate cu adresa Pfennig specificată + Verify messages to ensure they were signed with specified pfennig addresses + Verifică mesaje pentru a te asigura că au fost semnate cu adresa pfennig specificată &File @@ -428,16 +428,16 @@ Acest produs include programe dezvoltate de către OpenSSL Project pentru a fi f [testnet] - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core Request payments (generates QR codes and pfennig: URIs) Cereti plati (genereaza coduri QR si pfennig-uri: URls) - &About Pfennig Core - &Despre Nucleul Pfennig + &About pfennig Core + &Despre Nucleul pfennig Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ Acest produs include programe dezvoltate de către OpenSSL Project pentru a fi f Command-line setări - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Client Pfennig + pfennig client + Client pfennig - %n active connection(s) to Pfennig network - %n conexiune activă către rețeaua Pfennig%n conexiuni active către rețeaua Pfennig%n de conexiuni active către rețeaua Pfennig + %n active connection(s) to pfennig network + %n conexiune activă către rețeaua pfennig%n conexiuni active către rețeaua pfennig%n de conexiuni active către rețeaua pfennig No block source available... @@ -560,8 +560,8 @@ Adresa: %4 Portofelul este <b>criptat</b> iar în momentul de față este <b>blocat</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - A survenit o eroare fatala. Pfennig nu mai poate continua in siguranta si se va opri. + A fatal error occurred. pfennig can no longer continue safely and will quit. + A survenit o eroare fatala. pfennig nu mai poate continua in siguranta si se va opri. @@ -845,7 +845,7 @@ Adresa: %4 Adresa introdusă "%1" se află deja în lista de adrese. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. Adresa introdusă "%1" nu este o adresă pfennig validă. @@ -883,12 +883,12 @@ Adresa: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core - Opţiuni Linie de comandă + pfennig Core - Command-line options + pfennig Core - Opţiuni Linie de comandă - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core version @@ -934,16 +934,16 @@ Adresa: %4 Bun venit - Welcome to Pfennig Core. - Bine Aţi Venit la Nucleul Pfennig. + Welcome to pfennig Core. + Bine Aţi Venit la Nucleul pfennig. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Dacă aceasta este prima dată când programul este lansat, puteţi alege unde Nucleul Pfennig va stoca datele. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Dacă aceasta este prima dată când programul este lansat, puteţi alege unde Nucleul pfennig va stoca datele. - Pfennig Core will download and store a copy of the Pfennig 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 Pfennig Core se va descărca şi va stoca o copie a lanţului blocului Pfennig. 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. + pfennig Core will download and store a copy of the pfennig 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 pfennig Core se va descărca şi va stoca o copie a lanţului blocului pfennig. 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 @@ -954,8 +954,8 @@ Adresa: %4 Folosește un dosar de date personalizat: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,12 +1016,12 @@ Adresa: %4 Plăteşte comision pentru tranzacţie &f - Automatically start Pfennig after logging in to the system. - Porneşte automat programul Pfennig la pornirea computerului. + Automatically start pfennig after logging in to the system. + Porneşte automat programul pfennig la pornirea computerului. - &Start Pfennig on system login - &S Porneşte Pfennig la pornirea sistemului + &Start pfennig on system login + &S Porneşte pfennig la pornirea sistemului Size of &database cache @@ -1036,8 +1036,8 @@ Adresa: %4 - Connect to the Pfennig network through a SOCKS proxy. - Conecteaza-te la reteaua Pfennig printr-un proxy SOCKS + Connect to the pfennig network through a SOCKS proxy. + Conecteaza-te la reteaua pfennig printr-un proxy SOCKS &Connect through SOCKS proxy (default proxy): @@ -1096,8 +1096,8 @@ Adresa: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Deschide automat în router portul aferent clientului Pfennig. Funcţionează doar în cazul în care routerul e compatibil UPnP şi opţiunea e activată. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Deschide automat în router portul aferent clientului pfennig. Funcţionează doar în cazul în care routerul e compatibil UPnP şi opţiunea e activată. Map port using &UPnP @@ -1152,8 +1152,8 @@ Adresa: %4 Interfata & limba userului - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Limba interfeței utilizatorului poate fi setat aici. Această setare va avea efect după repornirea Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Limba interfeței utilizatorului poate fi setat aici. Această setare va avea efect după repornirea pfennig. &Unit to show amounts in: @@ -1164,8 +1164,8 @@ Adresa: %4 Alege subdiviziunea folosită la afişarea interfeţei şi la trimiterea de pfennig. - Whether to show Pfennig addresses in the transaction list or not. - Vezi dacă adresele Pfennig sunt în lista de tranzacție sau nu + Whether to show pfennig addresses in the transaction list or not. + Vezi dacă adresele pfennig sunt în lista de tranzacție sau nu &Display addresses in transaction list @@ -1219,8 +1219,8 @@ Adresa: %4 Form - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig network after a connection is established, but this process has not completed yet. - Informațiile afișate pot neactualizate. Portofelul tău se sincronizează automat cu rețeaua Pfennig după ce o conexiune este stabilită, dar acest proces nu a fost finalizat încă. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig network after a connection is established, but this process has not completed yet. + Informațiile afișate pot neactualizate. Portofelul tău se sincronizează automat cu rețeaua pfennig după ce o conexiune este stabilită, dar acest proces nu a fost finalizat încă. Wallet @@ -1274,8 +1274,8 @@ Adresa: %4 Gestionare URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI nu poate fi analizat! Acest lucru poate fi cauzat de o adresa Pfennig invalida sau parametri deformati URI. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI nu poate fi analizat! Acest lucru poate fi cauzat de o adresa pfennig invalida sau parametri deformati URI. Requested payment amount of %1 is too small (considered dust). @@ -1341,8 +1341,8 @@ Adresa: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,12 +1357,12 @@ Adresa: %4 Eroare: combinație nevalidă de -regtest și -testnet. - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introdu o adresă Pfennig (de exemplu: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introdu o adresă pfennig (de exemplu: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,7 +1483,7 @@ Adresa: %4 Loguri debug - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig 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 @@ -1491,7 +1491,7 @@ Adresa: %4 Curăță consola - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. Bun venit la consola pfennig RPC @@ -1554,7 +1554,7 @@ Adresa: %4 &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 Pfennig network. + 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 pfennig network. @@ -1867,8 +1867,8 @@ Adresa: %4 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 Pfennig address - Atentie: Adresa Pfennig invalida! + Warning: Invalid pfennig address + Atentie: Adresa pfennig invalida! (no label) @@ -1954,7 +1954,7 @@ Adresa: %4 Introduceti eticheta pentru ca aceasta adresa sa fie introdusa in lista de adrese folosite - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1973,8 +1973,8 @@ Adresa: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig Core se închide... + pfennig Core is shutting down... + pfennig Core se închide... Do not shut down the computer until this window disappears. @@ -1997,7 +1997,7 @@ Adresa: %4 The address to sign the message with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introduceţi o adresă Pfennig (de exemplu: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduceţi o adresă pfennig (de exemplu: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Choose previously used address @@ -2028,8 +2028,8 @@ Adresa: %4 Copiaza semnatura curenta in clipboard-ul sistemului - Sign the message to prove you own this Pfennig address - Semneaza mesajul pentru a dovedi ca detii acesta adresa Pfennig + Sign the message to prove you own this pfennig address + Semneaza mesajul pentru a dovedi ca detii acesta adresa pfennig Sign &Message @@ -2053,11 +2053,11 @@ Adresa: %4 The address the message was signed with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introduceţi o adresă Pfennig (de exemplu: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduceţi o adresă pfennig (de exemplu: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Verifica mesajul pentru a fi sigur ca a fost semnat cu adresa Pfennig specifica + Verify the message to ensure it was signed with the specified pfennig address + Verifica mesajul pentru a fi sigur ca a fost semnat cu adresa pfennig specifica Verify &Message @@ -2068,8 +2068,8 @@ Adresa: %4 Reseteaza toate spatiile mesajelor semnate. - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Introduceţi o adresă Pfennig (de exemplu: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduceţi o adresă pfennig (de exemplu: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2127,12 +2127,12 @@ Adresa: %4 SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core The Bitcoin Core Developers - Dezvoltatorii Pfennig Core + Dezvoltatorii pfennig Core [testnet] @@ -2553,7 +2553,7 @@ Adresa: %4 WalletModel Send Coins - Trimite Pfennig + Trimite pfennig @@ -2622,8 +2622,8 @@ Adresa: %4 Specifică dosarul de date - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Ascultă pentru conectări pe <port> (implicit: P2PPORT sau testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Ascultă pentru conectări pe <port> (implicit: 40002 sau testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2650,15 +2650,15 @@ Adresa: %4 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: RPCPORT or testnet: 1RPCPORT) - Ascultă pentru conexiuni JSON-RPC pe <port> (implicit:RPCPORT sau testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Ascultă pentru conexiuni JSON-RPC pe <port> (implicit:40001 sau testnet: 50000) Accept command line and JSON-RPC commands Se acceptă comenzi din linia de comandă și comenzi JSON-RPC - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2683,7 +2683,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s trebuie sa setezi o parola rpc in fisierul de configurare %s @@ -2694,7 +2694,7 @@ parola rpc=%s 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 Pfennig" admin@foo.com +spre exemplu: alertnotify=echo %%s | mail -s "Alerta pfennig" admin@foo.com @@ -2767,7 +2767,7 @@ spre exemplu: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@fo 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. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2779,8 +2779,8 @@ spre exemplu: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@fo 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 Pfennig will not work properly. - Atentie: Va rugam verificati daca data/timpul computerului dumneavoastra sunt corecte! Daca ceasul computerului este decalat, Pfennig nu va functiona corect. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Atentie: Va rugam verificati daca data/timpul computerului dumneavoastra sunt corecte! Daca ceasul computerului este decalat, pfennig nu va functiona corect. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2815,8 +2815,8 @@ spre exemplu: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@fo Încearcă recuperarea cheilor private dintr-un wallet.dat corupt - Pfennig Core Daemon - Daemon-ul Pfennig Core + pfennig Core Daemon + Daemon-ul pfennig Core Block creation options: @@ -2835,8 +2835,8 @@ spre exemplu: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@fo Conectare prin proxy SOCKS - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Conectat la JSON-RPC pe <portul> (implicit: RPCPORT sau testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Conectat la JSON-RPC pe <portul> (implicit: 40001 sau testnet: 50000) Connection options: @@ -3059,7 +3059,7 @@ spre exemplu: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@fo Importă blocuri dintr-un fișier extern blk000??.dat - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3123,7 +3123,7 @@ spre exemplu: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@fo Publicare arbore blocuri la pornire (prestabilit: 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3143,12 +3143,12 @@ spre exemplu: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@fo - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Optiuni SSl (vezi Pfennig wiki pentru intructiunile de instalare) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Optiuni SSl (vezi pfennig wiki pentru intructiunile de instalare) - Send command to Pfennig Core - Trimitere comenzi catre Pfennig Core + Send command to pfennig Core + Trimitere comenzi catre pfennig Core Send trace/debug info to console instead of debug.log file @@ -3183,7 +3183,7 @@ spre exemplu: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@fo Specifică intervalul maxim de conectare în milisecunde (implicit: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3299,12 +3299,12 @@ spre exemplu: alertnotify=echo %%s | mail -s "Alerta Pfennig" admin@fo Eroare la încărcarea wallet.dat: Portofel corupt - Error loading wallet.dat: Wallet requires newer version of Pfennig - Eroare la încărcarea wallet.dat: Portofelul are nevoie de o versiune Pfennig mai nouă + Error loading wallet.dat: Wallet requires newer version of pfennig + Eroare la încărcarea wallet.dat: Portofelul are nevoie de o versiune pfennig mai nouă - Wallet needed to be rewritten: restart Pfennig to complete - Portofelul trebuie rescris: repornește Pfennig pentru finalizare + Wallet needed to be rewritten: restart pfennig to complete + Portofelul trebuie rescris: repornește pfennig pentru finalizare Error loading wallet.dat diff --git a/src/qt/locale/bitmark_ro_RO.ts~ b/src/qt/locale/bitmark_ro_RO.ts~ new file mode 100644 index 0000000..0f4a35f --- /dev/null +++ b/src/qt/locale/bitmark_ro_RO.ts~ @@ -0,0 +1,3390 @@ + + + AboutDialog + + About GameCredits Core + Despre Nucleul GameCredits + + + <b>GameCredits Core</b> version + <b>Nucleul GameCredits </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 Bitcoin Core Developers + Dezvoltatorii GameCredits Core + + + (%1-bit) + + + + + AddressBookPage + + Double-click to edit address or label + Dublu-click pentru a edita adresa sau eticheta + + + Create a new address + Creează o adresă nouă + + + &New + &Nou + + + Copy the currently selected address to the system clipboard + Copiază adresa selectată în clipboard + + + &Copy + &Copiere + + + C&lose + &Inchidere + + + &Copy Address + &Copiază adresa + + + 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ă + + + &Delete + Ș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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Acestea sunt adresele dumneavoastra GameCredits care pot fi folosite la trimiterea platilor. Verificati totdeauna cantitatea si adresa de primire inainte de a trimite monezi. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Acestea sunt adresele dumneavoastra GameCredits 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ă + + + Export Address List + Exportati Agenda + + + Comma separated file (*.csv) + Valori separate prin virgulă (*.csv) + + + Exporting Failed + Exportare esuata + + + 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ă) + + + + AskPassphraseDialog + + Passphrase Dialog + Dialogul pentru fraza de acces + + + Enter passphrase + Introdu fraza de acces + + + New passphrase + Frază de acces nouă + + + Repeat new passphrase + 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>. + 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. + 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ă 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. + Introdu vechea și noua parolă pentru portofel. + + + Confirm wallet encryption + Confirmă criptarea portofelului + + + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR GameCreditsS</b>! + Atenție: Dacă pierdeţi parola portofelului electronic dupa criptare, <b>VEŢI PIERDE ÎNTREAGA SUMĂ DE GameCredits 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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits 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 + + + 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. + Frazele de acces introduse nu se potrivesc. + + + Wallet unlock failed + Deblocarea portofelului a eșuat + + + The passphrase entered for the wallet decryption was incorrect. + Fraza de acces introdusă pentru decriptarea portofelului a fost incorectă. + + + Wallet decryption failed + Decriptarea portofelului a eșuat + + + Wallet passphrase was successfully changed. + Parola portofelului electronic a fost schimbată. + + + + GameCreditsGUI + + Sign &message... + Semnează &mesaj... + + + Synchronizing with network... + Se sincronizează cu rețeaua... + + + &Overview + &Imagine de ansamblu + + + Node + Nod + + + Show general overview of wallet + Arată o stare generală de ansamblu a portofelului + + + &Transactions + &Tranzacții + + + Browse transaction history + Răsfoiește istoricul tranzacțiilor + + + E&xit + &Ieșire + + + Quit application + Închide aplicația + + + Show information about GameCredits + Arată informații despre GameCredits + + + About &Qt + Despre &Qt + + + Show information about Qt + Arată informații despre Qt + + + &Options... + &Setări... + + + &Encrypt Wallet... + Criptează portofelul electronic... + + + &Backup Wallet... + &Fă o copie de siguranță a portofelului... + + + &Change Passphrase... + 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 GameCredits address + Trimite monede către o adresă GameCredits + + + Modify configuration options for GameCredits + Modifică opțiunile de configurare pentru GameCredits + + + Backup wallet to another location + Creează o copie de rezervă a portofelului într-o locație diferită + + + Change the passphrase used for wallet encryption + Schimbă fraza de acces folosită pentru criptarea portofelului + + + &Debug window + Fereastră &debug + + + Open debugging and diagnostic console + Deschide consola de debug și diagnosticare + + + &Verify message... + &Verifică mesajul... + + + GameCredits + GameCredits + + + Wallet + Portofelul + + + &Send + &Trimite + + + &Receive + &Primește + + + &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 GameCredits addresses to prove you own them + Semnează mesaje cu adresa ta GameCredits pentru a dovedi că îți aparțin + + + Verify messages to ensure they were signed with specified GameCredits addresses + Verifică mesaje pentru a te asigura că au fost semnate cu adresa GameCredits specificată + + + &File + &Fișier + + + &Settings + &Setări + + + &Help + A&jutor + + + Tabs toolbar + Bara de file + + + [testnet] + [testnet] + + + GameCredits Core + GameCredits Core + + + Request payments (generates QR codes and gamecredits: URIs) + Cereti plati (genereaza coduri QR si gamecredits-uri: URls) + + + &About GameCredits Core + &Despre Nucleul GameCredits + + + 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 gamecredits: URI or payment request + Deschideti un gamecredits: o adresa URI sau o cerere de plata + + + &Command-line options + Command-line setări + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + Client GameCredits + + + %n active connection(s) to GameCredits network + %n conexiune activă către rețeaua GameCredits%n conexiuni active către rețeaua GameCredits%n de conexiuni active către rețeaua GameCredits + + + 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 + + + Up to date + Actualizat + + + Catching up... + Se actualizează... + + + Sent transaction + Tranzacție expediată + + + Incoming transaction + Tranzacție recepționată + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Data: %1 +Suma: %2 +Tipul: %3 +Adresa: %4 + + + + Wallet is <b>encrypted</b> and currently <b>unlocked</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 este <b>criptat</b> iar în momentul de față este <b>blocat</b> + + + A fatal error occurred. GameCredits can no longer continue safely and will quit. + A survenit o eroare fatala. GameCredits nu mai poate continua in siguranta si se va opri. + + + + ClientModel + + Network Alert + 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 + &Etichetă + + + 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ă + + + 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. + + + The entered address "%1" is not a valid GameCredits address. + Adresa introdusă "%1" nu este o adresă gamecredits validă. + + + Could not unlock wallet. + Portofelul nu a putut fi deblocat. + + + New key generation failed. + Generarea noii chei a eșuat. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + GameCredits Core - Opţiuni Linie de comandă + + + GameCredits Core + GameCredits 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 GameCredits Core. + Bine Aţi Venit la Nucleul GameCredits. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Dacă aceasta este prima dată când programul este lansat, puteţi alege unde Nucleul GameCredits va stoca datele. + + + GameCredits Core will download and store a copy of the GameCredits 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 GameCredits Core se va descărca şi va stoca o copie a lanţului blocului GameCredits. 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: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Porneşte automat programul GameCredits la pornirea computerului. + + + &Start GameCredits on system login + &S Porneşte GameCredits la pornirea sistemului + + + Size of &database cache + + + + MB + MB + + + Number of script &verification threads + + + + Connect to the GameCredits network through a SOCKS proxy. + Conecteaza-te la reteaua GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Deschide automat în router portul aferent clientului GameCredits. Funcţionează doar în cazul în care routerul e compatibil UPnP şi opţiunea e activată. + + + Map port using &UPnP + Mapeaza portul folosind &UPnP + + + Proxy &IP: + Proxy &IP: + + + &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 GameCredits. + Limba interfeței utilizatorului poate fi setat aici. Această setare va avea efect după repornirea GameCredits. + + + &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 gamecredits. + + + Whether to show GameCredits addresses in the transaction list or not. + Vezi dacă adresele GameCredits 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 + + + default + Initial + + + none + nimic + + + Confirm options reset + Confirmă resetarea opțiunilor + + + Client restart required to activate changes. + Este necesar un restart al clientului pentru a activa schimbările. + + + Client will be shutdown, do you want to proceed? + Clientul va fi închis, doriţi să continuaţi? + + + This change would require a client restart. + Această schimbare va necesita un restart al clientului. + + + The supplied proxy address is invalid. + Adresa gamecredits pe care a-ti specificat-o este invalida + + + + OverviewPage + + Form + Form + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits network after a connection is established, but this process has not completed yet. + Informațiile afișate pot neactualizate. Portofelul tău se sincronizează automat cu rețeaua GameCredits după ce o conexiune este stabilită, dar acest proces nu a fost finalizat încă. + + + Wallet + 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>Tranzacții recente</b> + + + out of sync + Nu este sincronizat + + + + PaymentServer + + URI handling + Gestionare URI + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + URI nu poate fi analizat! Acest lucru poate fi cauzat de o adresa GameCredits 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 gamecredits: click-to-pay handler + Nu poate porni gamecredits: 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 + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Eroare: Directorul datelor specificate "%1" nu exista. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + + + + Error: Invalid combination of -regtest and -testnet. + Eroare: combinație nevalidă de -regtest și -testnet. + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introdu o adresă GameCredits (de exemplu: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + Nume client + + + N/A + N/A + + + Client version + Versiune client + + + &Information + &Informație + + + Debug window + Fereastra de depanare + + + General + General + + + Using OpenSSL version + Foloseste versiunea OpenSSL + + + Startup time + Durata pornirii + + + Network + Rețea + + + Name + Numele + + + Number of connections + Numărul de conexiuni + + + Block chain + Lanț de blocuri + + + Current number of blocks + Numărul curent de blocuri + + + Estimated total blocks + Blocurile totale estimate + + + Last block time + Data ultimului bloc + + + &Open + &Deschide + + + &Console + &Consolă + + + &Network Traffic + Traficul in rețea + + + &Clear + &Ştergeţi + + + Totals + Totaluri + + + In: + în: + + + Out: + Ieșire. + + + Build date + Construit la data + + + Debug log file + Loguri debug + + + Open the GameCredits 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 + Curăță consola + + + Welcome to the GameCredits RPC console. + Bun venit la consola gamecredits 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 GameCredits 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 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 + + + Add &Recipient + &Adaugă destinatar + + + Clear all fields of the form. + Stergeti toate campurile formularului + + + Clear &All + Șterge &tot + + + Balance: + Balanță: + + + Confirm the send action + Confirmă operațiunea de trimitere + + + S&end + &S Trimite + + + Confirm send coins + Confirmă trimiterea de monede + + + %1 to %2 + %1 la %2 + + + 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. + + + The total exceeds your balance when the %1 transaction fee is included. + 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. + + + Transaction creation failed! + Creare de tranzactie nereusita! + + + 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 GameCredits address + Atentie: Adresa GameCredits 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 + + A&mount: + Su&mă: + + + Pay &To: + Plătește că&tre: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adresa către care se va face plata (de exemplu: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Enter a label for this address to add it to your address book + Introdu o etichetă pentru această adresă pentru a fi adăugată în lista ta de adrese + + + &Label: + &Etichetă: + + + 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 + Lipește adresa din clipboard + + + Alt+P + Alt+P + + + Remove this entry + Scoate aceasta introducere + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + Aceasta este o cerere de plata neverificata + + + Pay To: + Plateste catre: + + + Memo: + Memo: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduceţi o adresă GameCredits (de exemplu: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Semneaza mesajul pentru a dovedi ca detii acesta adresa GameCredits + + + 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduceţi o adresă GameCredits (de exemplu: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Verifica mesajul pentru a fi sigur ca a fost semnat cu adresa GameCredits specifica + + + Verify &Message + Verifică &Message + + + Reset all verify message fields + Reseteaza toate spatiile mesajelor semnate. + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Introduceţi o adresă GameCredits (de exemplu: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Click "Semneaza msajul" pentru a genera semnatura + + + 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 + + + + SplashScreen + + GameCredits Core + GameCredits Core + + + The Bitcoin Core Developers + Dezvoltatorii GameCredits Core + + + [testnet] + [testnet] + + + + TrafficGraphWidget + + KB/s + KB/s + + + + TransactionDesc + + Open until %1 + Deschis până la %1 + + + 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 + + + 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 + + + + TransactionDescDialog + + Transaction details + Detaliile tranzacției + + + This pane shows a detailed description of the transaction + 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 + + + Confirmed (%1 confirmations) + Confirmat (%1 confirmări) + + + This block was not received by any other nodes and will probably not be accepted! + Acest bloc nu a fost recepționat de niciun alt nod și probabil nu va fi acceptat! + + + Generated but not accepted + 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 + + + Received from + Primit de la + + + Sent to + Trimis către + + + Payment to yourself + Plată către tine + + + Mined + Produs + + + (n/a) + (n/a) + + + Transaction status. Hover over this field to show number of confirmations. + 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. + + + Type of transaction. + Tipul tranzacției. + + + Destination address of transaction. + Adresa de destinație a tranzacției. + + + Amount removed from or added to balance. + Suma extrasă sau adăugată la sold. + + + + 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 + + + Sent to + Trimis către + + + To yourself + Către tine + + + Mined + Produs + + + Other + Altele + + + Enter address or label to search + Introdu adresa sau eticheta pentru căutare + + + Min amount + Cantitatea minimă + + + Copy address + Copiază adresa + + + Copy label + Copiază eticheta + + + Copy amount + Copiază suma + + + Copy transaction ID + Copiază ID tranzacție + + + Edit label + Editează eticheta + + + Show transaction details + Arată detaliile tranzacției + + + 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) + + + Confirmed + Confirmat + + + Date + Data + + + Type + Tipul + + + Label + Etichetă + + + Address + Adresă + + + Amount + Sumă + + + ID + ID + + + Range: + Interval: + + + to + către + + + + WalletFrame + + No wallet has been loaded. + Nu a fost încărcat niciun portofel. + + + + WalletModel + + Send Coins + Trimite GameCredits + + + + 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 %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 + Copia de siguranță efectuată cu succes + + + + gamecredits-core + + Usage: + Uz: + + + List commands + Listă de comenzi + + + Get help for a command + Ajutor pentru o comandă + + + Options: + Setări: + + + Specify configuration file (default: gamecredits.conf) + Specifică fișierul de configurare (implicit: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Specifică fișierul pid (implicit gamecreditsd.pid) + + + Specify data directory + Specifică dosarul de date + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Ascultă pentru conectări pe <port> (implicit: 40002 sau testnet: 50001) + + + Maintain at most <n> connections to peers (default: 125) + Menține cel mult <n> conexiuni cu partenerii (implicit: 125) + + + Connect to a node to retrieve peer addresses, and disconnect + Conectează-te la nod pentru a obține adresele partenerilor, și apoi deconectează-te + + + Specify your own public address + Specifică adresa ta publică + + + Threshold for disconnecting misbehaving peers (default: 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 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: 40001 or testnet: 50000) + Ascultă pentru conexiuni JSON-RPC pe <port> (implicit:40001 sau testnet: 50000) + + + Accept command line and JSON-RPC commands + Se acceptă comenzi din linia de comandă și comenzi JSON-RPC + + + GameCredits Core RPC client version + + + + Run in the background as a daemon and accept commands + Rulează în fundal ca un demon și acceptă comenzi + + + Use the test network + Utilizează rețeaua de test + + + Accept connections from outside (default: 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s trebuie sa setezi o parola rpc in fisierul de configurare +%s +Este recomandat sa folosesti aceasta parola aleatorie: +rpcuser=gamecreditsrpc +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 GameCredits" admin@foo.com + + + + + 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. GameCredits 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 GameCredits will not work properly. + Atentie: Va rugam verificati daca data/timpul computerului dumneavoastra sunt corecte! Daca ceasul computerului este decalat, GameCredits 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 + + + GameCredits Core Daemon + Daemon-ul GameCredits 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: 40001 or testnet: 50000) + Conectat la JSON-RPC pe <portul> (implicit: 40001 sau testnet: 50000) + + + 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 gamecredits-cli): + Utilizare (învechită, folositi gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + Optiuni SSl (vezi GameCredits wiki pentru intructiunile de instalare) + + + Send command to GameCredits Core + Trimitere comenzi catre GameCredits 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 GameCredits 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 căutări DNS pentru -addnode, -seednode și -connect + + + Loading addresses... + Încarc adrese... + + + Error loading wallet.dat: Wallet corrupted + Eroare la încărcarea wallet.dat: Portofel corupt + + + Error loading wallet.dat: Wallet requires newer version of GameCredits + Eroare la încărcarea wallet.dat: Portofelul are nevoie de o versiune GameCredits mai nouă + + + Wallet needed to be rewritten: restart GameCredits to complete + Portofelul trebuie rescris: repornește GameCredits pentru finalizare + + + Error loading wallet.dat + Eroare la încărcarea wallet.dat + + + Invalid -proxy address: '%s' + Adresa -proxy nevalidă: '%s' + + + Unknown network specified in -onlynet: '%s' + Rețeaua specificată în -onlynet este necunoscută: '%s' + + + Unknown -socks proxy version requested: %i + S-a cerut o versiune necunoscută de proxy -socks: %i + + + Cannot resolve -bind address: '%s' + Nu se poate rezolva adresa -bind: '%s' + + + Cannot resolve -externalip address: '%s' + Nu se poate rezolva adresa -externalip: '%s' + + + Invalid amount for -paytxfee=<amount>: '%s' + Suma nevalidă pentru -paytxfee=<amount>: '%s' + + + Invalid amount + 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 + Adaugă un nod la care te poți conecta pentru a menține conexiunea deschisă + + + Loading wallet... + Încarc portofel... + + + Cannot downgrade wallet + Nu se poate retrograda portofelul + + + Cannot write default address + Nu se poate scrie adresa implicită + + + Rescanning... + Rescanez... + + + Done loading + Încărcare terminată + + + To use the %s option + 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/bitmark_ru.ts b/src/qt/locale/bitmark_ru.ts index 0b421af..a829a7b 100644 --- a/src/qt/locale/bitmark_ru.ts +++ b/src/qt/locale/bitmark_ru.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - О Pfennig Core + About pfennig Core + О pfennig Core - <b>Pfennig Core</b> version - версия <b>Pfennig Core</b> + <b>pfennig Core</b> version + версия <b>pfennig Core</b> @@ -29,7 +29,7 @@ This product includes software developed by the OpenSSL Project for use in the O The Bitcoin Core Developers - Разработчики Pfennig Core + Разработчики pfennig Core (%1-bit) @@ -103,12 +103,12 @@ This product includes software developed by the OpenSSL Project for use in the O Адреса получения - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Это ваши адреса Pfennig для отправки платежей. Всегда проверяйте количество и адрес получателя перед отправкой перевода. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Это ваши адреса pfennig для отправки платежей. Всегда проверяйте количество и адрес получателя перед отправкой перевода. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Это ваши адреса Pfennig для приёма платежей. Рекомендуется использовать новый адрес получения для каждой транзакции. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Это ваши адреса pfennig для приёма платежей. Рекомендуется использовать новый адрес получения для каждой транзакции. Copy &Label @@ -205,7 +205,7 @@ This product includes software developed by the OpenSSL Project for use in the O Подтвердите шифрование бумажника - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! Внимание: если вы зашифруете бумажник и потеряете пароль, вы <b>ПОТЕРЯЕТЕ ВСЕ ВАШИ БИТКОЙНЫ</b>! @@ -225,7 +225,7 @@ This product includes software developed by the OpenSSL Project for use in the O Бумажник зашифрован - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. Сейчас программа закроется для завершения процесса шифрования. Помните, что шифрование вашего бумажника не может полностью защитить ваши биткойны от кражи с помощью инфицирования вашего компьютера вредоносным ПО. @@ -258,7 +258,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... &Подписать сообщение... @@ -296,8 +296,8 @@ This product includes software developed by the OpenSSL Project for use in the O Закрыть приложение - Show information about Pfennig - Показать информацию о Pfennig + Show information about pfennig + Показать информацию о pfennig About &Qt @@ -344,12 +344,12 @@ This product includes software developed by the OpenSSL Project for use in the O Идёт переиндексация блоков на диске... - Send coins to a Pfennig address - Отправить монеты на указанный адрес Pfennig + Send coins to a pfennig address + Отправить монеты на указанный адрес pfennig - Modify configuration options for Pfennig - Изменить параметры конфигурации Pfennig + Modify configuration options for pfennig + Изменить параметры конфигурации pfennig Backup wallet to another location @@ -372,8 +372,8 @@ This product includes software developed by the OpenSSL Project for use in the O &Проверить сообщение... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ This product includes software developed by the OpenSSL Project for use in the O Зашифровать приватные ключи, принадлежащие вашему бумажнику - Sign messages with your Pfennig addresses to prove you own them - Подписать сообщения вашим адресом Pfennig, чтобы доказать, что вы им владеете + Sign messages with your pfennig addresses to prove you own them + Подписать сообщения вашим адресом pfennig, чтобы доказать, что вы им владеете - Verify messages to ensure they were signed with specified Pfennig addresses - Проверить сообщения, чтобы удостовериться, что они были подписаны определённым адресом Pfennig + Verify messages to ensure they were signed with specified pfennig addresses + Проверить сообщения, чтобы удостовериться, что они были подписаны определённым адресом pfennig &File @@ -428,16 +428,16 @@ This product includes software developed by the OpenSSL Project for use in the O [тестовая сеть] - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core Request payments (generates QR codes and pfennig: URIs) Запросить платежи (создаёт QR-коды и pfennig: ссылки) - &About Pfennig Core - &О Pfennig Core + &About pfennig Core + &О pfennig Core Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ This product includes software developed by the OpenSSL Project for use in the O &Опции командной строки - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Показать помощь по Pfennig Core и получить список доступных опций командной строки. + Show the pfennig Core help message to get a list with possible pfennig command-line options + Показать помощь по pfennig Core и получить список доступных опций командной строки. - Pfennig client - Pfennig клиент + pfennig client + pfennig клиент - %n active connection(s) to Pfennig network - %n активное соединение с сетью%n активных соединений с сетью%n активных соединений с сетью Pfennig + %n active connection(s) to pfennig network + %n активное соединение с сетью%n активных соединений с сетью%n активных соединений с сетью pfennig No block source available... @@ -560,8 +560,8 @@ Address: %4 Бумажник <b>зашифрован</b> и в настоящее время <b>заблокирован</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Произошла неисправимая ошибка. Pfennig не может безопасно продолжать работу и будет закрыт. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Произошла неисправимая ошибка. pfennig не может безопасно продолжать работу и будет закрыт. @@ -845,8 +845,8 @@ Address: %4 Введённый адрес «%1» уже находится в адресной книге. - The entered address "%1" is not a valid Pfennig address. - Введённый адрес "%1" не является правильным Pfennig-адресом. + The entered address "%1" is not a valid pfennig address. + Введённый адрес "%1" не является правильным pfennig-адресом. Could not unlock wallet. @@ -883,12 +883,12 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core - опции командной строки + pfennig Core - Command-line options + pfennig Core - опции командной строки - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core version @@ -934,16 +934,16 @@ Address: %4 Добро пожаловать - Welcome to Pfennig Core. - Добро пожаловать в Pfennig Core. + Welcome to pfennig Core. + Добро пожаловать в pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Так как вы впервые запустили программу, вы можете выбрать, где Pfennig Core будет хранить данные. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Так как вы впервые запустили программу, вы можете выбрать, где pfennig Core будет хранить данные. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig Core скачает и сохранит копию цепи блоков. Как минимум, %1ГБ данных будет храниться в этом каталоге, и со временем он будет расти. Бумажник будет также сохранён в этом каталоге. + pfennig Core will download and store a copy of the pfennig 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. + pfennig Core скачает и сохранит копию цепи блоков. Как минимум, %1ГБ данных будет храниться в этом каталоге, и со временем он будет расти. Бумажник будет также сохранён в этом каталоге. Use the default data directory @@ -954,8 +954,8 @@ Address: %4 Использовать другой каталог данных: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,12 +1016,12 @@ Address: %4 Заплатить ко&миссию - Automatically start Pfennig after logging in to the system. - Автоматически запускать Pfennig после входа в систему + Automatically start pfennig after logging in to the system. + Автоматически запускать pfennig после входа в систему - &Start Pfennig on system login - &Запускать Pfennig при входе в систему + &Start pfennig on system login + &Запускать pfennig при входе в систему Size of &database cache @@ -1036,8 +1036,8 @@ Address: %4 Число потоков проверки &сценария - Connect to the Pfennig network through a SOCKS proxy. - Подключаться к сети Pfennig через прокси SOCKS. + Connect to the pfennig network through a SOCKS proxy. + Подключаться к сети pfennig через прокси SOCKS. &Connect through SOCKS proxy (default proxy): @@ -1096,8 +1096,8 @@ Address: %4 &Тратить неподтверждённую сдачу - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Автоматически открыть порт для Pfennig-клиента на роутере. Работает только если Ваш роутер поддерживает UPnP, и данная функция включена. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Автоматически открыть порт для pfennig-клиента на роутере. Работает только если Ваш роутер поддерживает UPnP, и данная функция включена. Map port using &UPnP @@ -1152,8 +1152,8 @@ Address: %4 &Язык интерфейса: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Здесь можно выбрать язык интерфейса. Настройки вступят в силу после перезапуска Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Здесь можно выбрать язык интерфейса. Настройки вступят в силу после перезапуска pfennig. &Unit to show amounts in: @@ -1164,8 +1164,8 @@ Address: %4 Выберите единицу измерения монет при отображении и отправке. - Whether to show Pfennig addresses in the transaction list or not. - Показывать ли адреса Pfennig в списке транзакций. + Whether to show pfennig addresses in the transaction list or not. + Показывать ли адреса pfennig в списке транзакций. &Display addresses in transaction list @@ -1219,8 +1219,8 @@ Address: %4 Форма - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig network after a connection is established, but this process has not completed yet. - Отображаемая информация может быть устаревшей. Ваш бумажник автоматически синхронизируется с сетью Pfennig после подключения, но этот процесс пока не завершён. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig network after a connection is established, but this process has not completed yet. + Отображаемая информация может быть устаревшей. Ваш бумажник автоматически синхронизируется с сетью pfennig после подключения, но этот процесс пока не завершён. Wallet @@ -1274,8 +1274,8 @@ Address: %4 Обработка URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - Не удалось разобрать URI! Это может быть связано с неверным адресом Pfennig или неправильными параметрами URI. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + Не удалось разобрать URI! Это может быть связано с неверным адресом pfennig или неправильными параметрами URI. Requested payment amount of %1 is too small (considered dust). @@ -1341,8 +1341,8 @@ Address: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,12 +1357,12 @@ Address: %4 Ошибка: неверная комбинация -regtest и -testnet. - Pfennig Core didn't yet exit safely... - Pfennig Core ещё не завершился безопасно... + pfennig Core didn't yet exit safely... + pfennig Core ещё не завершился безопасно... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Введите Pfennig-адрес (например bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Введите pfennig-адрес (например bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,16 +1483,16 @@ Address: %4 Отладочный лог-файл - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Открыть отладочный лог-файл Pfennig из текущего каталога данных. Это может занять несколько секунд для больших лог-файлов. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Открыть отладочный лог-файл pfennig из текущего каталога данных. Это может занять несколько секунд для больших лог-файлов. Clear console Очистить консоль - Welcome to the Pfennig RPC console. - Добро пожаловать в RPC-консоль Pfennig. + Welcome to the pfennig RPC console. + Добро пожаловать в RPC-консоль pfennig. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1554,8 +1554,8 @@ Address: %4 &Повторно использовать существующий адрес получения (не рекомендуется) - 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 Pfennig network. - Необязательное сообщение для запроса платежа, которое будет показано при открытии запроса. Заметьте: сообщение не будет отправлено вместе с платежом через сеть Pfennig. + 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 pfennig network. + Необязательное сообщение для запроса платежа, которое будет показано при открытии запроса. Заметьте: сообщение не будет отправлено вместе с платежом через сеть pfennig. An optional label to associate with the new receiving address. @@ -1867,8 +1867,8 @@ Address: %4 Транзакция была отклонена! Такое может произойти, если некоторые монеты уже были потрачены, например, если Вы используете одну копию бумажника (wallet.dat), а монеты были потрачены из другой копии, но не были отмечены как потраченные в этой. - Warning: Invalid Pfennig address - Внимание: неверный адрес Pfennig + Warning: Invalid pfennig address + Внимание: неверный адрес pfennig (no label) @@ -1954,8 +1954,8 @@ Address: %4 Введите метку для этого адреса, чтобы добавить его в список использованных - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. - К pfennig: URI было прикреплено сообщение, которое будет сохранено вместе с транзакцией для вашего сведения. Заметьте: сообщение не будет отправлено через сеть Pfennig. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. + К pfennig: URI было прикреплено сообщение, которое будет сохранено вместе с транзакцией для вашего сведения. Заметьте: сообщение не будет отправлено через сеть pfennig. This is an unverified payment request. @@ -1973,8 +1973,8 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig Core выключается... + pfennig Core is shutting down... + pfennig Core выключается... Do not shut down the computer until this window disappears. @@ -2028,8 +2028,8 @@ Address: %4 Скопировать текущую подпись в системный буфер обмена - Sign the message to prove you own this Pfennig address - Подписать сообщение, чтобы доказать владение адресом Pfennig + Sign the message to prove you own this pfennig address + Подписать сообщение, чтобы доказать владение адресом pfennig Sign &Message @@ -2056,8 +2056,8 @@ Address: %4 Адрес, которым было подписано сообщение (напр. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Проверить сообщение, чтобы убедиться, что оно было подписано указанным адресом Pfennig + Verify the message to ensure it was signed with the specified pfennig address + Проверить сообщение, чтобы убедиться, что оно было подписано указанным адресом pfennig Verify &Message @@ -2068,8 +2068,8 @@ Address: %4 Сбросить все поля проверки сообщения - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Введите адрес Pfennig (напр. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Введите адрес pfennig (напр. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2127,12 +2127,12 @@ Address: %4 SplashScreen - Pfennig Core - Pfennig Core + pfennig Core + pfennig Core The Bitcoin Core Developers - Разработчики Pfennig Core + Разработчики pfennig Core [testnet] @@ -2623,8 +2623,8 @@ Address: %4 Задать каталог данных - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Принимать входящие подключения на <port> (по умолчанию: P2PPORT или 1P2PPORT в тестовой сети) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Принимать входящие подключения на <port> (по умолчанию: 40002 или 50001 в тестовой сети) Maintain at most <n> connections to peers (default: 125) @@ -2651,16 +2651,16 @@ Address: %4 Произошла ошибка при открытии RPC-порта %u для прослушивания на IPv4: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Прослушивать подключения JSON-RPC на <порту> (по умолчанию: RPCPORT или для testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Прослушивать подключения JSON-RPC на <порту> (по умолчанию: 40001 или для testnet: 50000) Accept command line and JSON-RPC commands Принимать командную строку и команды JSON-RPC - Pfennig Core RPC client version - Версия RPC-клиента Pfennig Core + pfennig Core RPC client version + Версия RPC-клиента pfennig Core Run in the background as a daemon and accept commands @@ -2684,7 +2684,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, вы должны установить опцию rpcpassword в конфигурационном файле: %s @@ -2695,7 +2695,7 @@ rpcpassword=%s Имя и пароль ДОЛЖНЫ различаться. Если файл не существует, создайте его и установите права доступа только для владельца, только для чтения. Также рекомендуется включить alertnotify для оповещения о проблемах; -Например: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com +Например: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2767,8 +2767,8 @@ rpcpassword=%s Это пре-релизная тестовая сборка - используйте на свой страх и риск - не используйте для добычи или торговых приложений - Unable to bind to %s on this computer. Pfennig Core is probably already running. - Не удалось забиндиться на %s на этом компьютере. Возможно, Pfennig Core уже запущен. + Unable to bind to %s on this computer. pfennig Core is probably already running. + Не удалось забиндиться на %s на этом компьютере. Возможно, pfennig Core уже запущен. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2779,8 +2779,8 @@ rpcpassword=%s Внимание: установлено очень большое значение -paytxfee. Это комиссия, которую вы заплатите при проведении транзакции. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Внимание: убедитесь, что дата и время на Вашем компьютере выставлены верно. Если Ваши часы идут неправильно, Pfennig будет работать некорректно. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Внимание: убедитесь, что дата и время на Вашем компьютере выставлены верно. Если Ваши часы идут неправильно, pfennig будет работать некорректно. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2815,8 +2815,8 @@ rpcpassword=%s Попытаться восстановить приватные ключи из повреждённого wallet.dat - Pfennig Core Daemon - Демон Pfennig Core + pfennig Core Daemon + Демон pfennig Core Block creation options: @@ -2835,8 +2835,8 @@ rpcpassword=%s Подключаться через SOCKS прокси - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Подключаться к JSON-RPC на <порт> (по умолчанию: RPCPORT или testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Подключаться к JSON-RPC на <порт> (по умолчанию: 40001 или testnet: 50000) Connection options: @@ -3059,8 +3059,8 @@ rpcpassword=%s Импортировать блоки из внешнего файла blk000??.dat - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - Не удалось установить блокировку на каталог данных %s. Возможно, Pfennig Core уже запущен. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + Не удалось установить блокировку на каталог данных %s. Возможно, pfennig Core уже запущен. Execute command when a relevant alert is received or we see a really long fork (%s in cmd is replaced by message) @@ -3123,8 +3123,8 @@ rpcpassword=%s Печатать дерево блоков при запуске (по умолчанию: 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) - Параметры RPC SSL: (см. Pfennig вики для инструкций по настройке SSL) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) + Параметры RPC SSL: (см. pfennig вики для инструкций по настройке SSL) RPC server options: @@ -3143,13 +3143,13 @@ rpcpassword=%s Запустить поток для периодического сохранения бумажника (по умолчанию: 1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) -Параметры SSL: (см. Pfennig Wiki для инструкций по настройке SSL) +Параметры SSL: (см. pfennig Wiki для инструкций по настройке SSL) - Send command to Pfennig Core - Отправить команду Pfennig Core + Send command to pfennig Core + Отправить команду pfennig Core Send trace/debug info to console instead of debug.log file @@ -3184,8 +3184,8 @@ rpcpassword=%s Тайм-аут соединения в миллисекундах (по умолчанию: 5000) - Start Pfennig Core Daemon - Запустить Pfennig Core демон + Start pfennig Core Daemon + Запустить pfennig Core демон System error: @@ -3300,12 +3300,12 @@ rpcpassword=%s Ошибка загрузки wallet.dat: Бумажник поврежден - Error loading wallet.dat: Wallet requires newer version of Pfennig - Ошибка загрузки wallet.dat: бумажник требует более новую версию Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Ошибка загрузки wallet.dat: бумажник требует более новую версию pfennig - Wallet needed to be rewritten: restart Pfennig to complete - Необходимо перезаписать бумажник, перезапустите Pfennig для завершения операции. + Wallet needed to be rewritten: restart pfennig to complete + Необходимо перезаписать бумажник, перезапустите pfennig для завершения операции. Error loading wallet.dat diff --git a/src/qt/locale/bitmark_ru.ts~ b/src/qt/locale/bitmark_ru.ts~ new file mode 100644 index 0000000..bd7e533 --- /dev/null +++ b/src/qt/locale/bitmark_ru.ts~ @@ -0,0 +1,3391 @@ + + + AboutDialog + + About GameCredits Core + О GameCredits Core + + + <b>GameCredits Core</b> version + версия <b>GameCredits 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, см. файл license.txt или http://www.opensource.org/licenses/mit-license.php. + +Этот продукт включает ПО, разработанное OpenSSL Project для использования в OpenSSL Toolkit (http://www.openssl.org/) и криптографическое ПО, написанное Eric Young (eay@cryptsoft.com) и ПО для работы с UPnP, написанное Thomas Bernard. + + + Copyright + Все права защищены + + + The Bitcoin Core Developers + Разработчики GameCredits Core + + + (%1-bit) + (%1-бит) + + + + 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Это ваши адреса GameCredits для отправки платежей. Всегда проверяйте количество и адрес получателя перед отправкой перевода. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Это ваши адреса GameCredits для приёма платежей. Рекомендуется использовать новый адрес получения для каждой транзакции. + + + 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. + Произошла ошибка при сохранении списка адресов в %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 GameCreditsS</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 + Бумажник зашифрован + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + Пароль бумажника успешно изменён. + + + + GameCreditsGUI + + Sign &message... + &Подписать сообщение... + + + Synchronizing with network... + Синхронизация с сетью... + + + &Overview + &Обзор + + + Node + Узел + + + Show general overview of wallet + Показать общий обзор действий с бумажником + + + &Transactions + &Транзакции + + + Browse transaction history + Показать историю транзакций + + + E&xit + В&ыход + + + Quit application + Закрыть приложение + + + Show information about GameCredits + Показать информацию о GameCredits + + + 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 GameCredits address + Отправить монеты на указанный адрес GameCredits + + + Modify configuration options for GameCredits + Изменить параметры конфигурации GameCredits + + + Backup wallet to another location + Сделать резервную копию бумажника в другом месте + + + Change the passphrase used for wallet encryption + Изменить пароль шифрования бумажника + + + &Debug window + &Окно отладки + + + Open debugging and diagnostic console + Открыть консоль отладки и диагностики + + + &Verify message... + &Проверить сообщение... + + + GameCredits + GameCredits + + + Wallet + Бумажник + + + &Send + &Отправить + + + &Receive + &Получить + + + &Show / Hide + &Показать / Скрыть + + + Show or hide the main Window + Показать или скрыть главное окно + + + Encrypt the private keys that belong to your wallet + Зашифровать приватные ключи, принадлежащие вашему бумажнику + + + Sign messages with your GameCredits addresses to prove you own them + Подписать сообщения вашим адресом GameCredits, чтобы доказать, что вы им владеете + + + Verify messages to ensure they were signed with specified GameCredits addresses + Проверить сообщения, чтобы удостовериться, что они были подписаны определённым адресом GameCredits + + + &File + &Файл + + + &Settings + &Настройки + + + &Help + &Помощь + + + Tabs toolbar + Панель вкладок + + + [testnet] + [тестовая сеть] + + + GameCredits Core + GameCredits Core + + + Request payments (generates QR codes and gamecredits: URIs) + Запросить платежи (создаёт QR-коды и gamecredits: ссылки) + + + &About GameCredits Core + &О GameCredits Core + + + Show the list of used sending addresses and labels + Показать список использованных адресов и меток отправки + + + Show the list of used receiving addresses and labels + Показать список использованных адресов и меток получения + + + Open a gamecredits: URI or payment request + Открыть gamecredits: URI или запрос платежа + + + &Command-line options + &Опции командной строки + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Показать помощь по GameCredits Core и получить список доступных опций командной строки. + + + GameCredits client + GameCredits клиент + + + %n active connection(s) to GameCredits network + %n активное соединение с сетью%n активных соединений с сетью%n активных соединений с сетью GameCredits + + + 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 + Информация + + + 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. GameCredits can no longer continue safely and will quit. + Произошла неисправимая ошибка. GameCredits не может безопасно продолжать работу и будет закрыт. + + + + 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 GameCredits address. + Введённый адрес "%1" не является правильным GameCredits-адресом. + + + 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 + + GameCredits Core - Command-line options + GameCredits Core - опции командной строки + + + GameCredits Core + GameCredits 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 GameCredits Core. + Добро пожаловать в GameCredits Core. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Так как вы впервые запустили программу, вы можете выбрать, где GameCredits Core будет хранить данные. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits Core скачает и сохранит копию цепи блоков. Как минимум, %1ГБ данных будет храниться в этом каталоге, и со временем он будет расти. Бумажник будет также сохранён в этом каталоге. + + + Use the default data directory + Использовать каталог данных по умолчанию + + + Use a custom data directory: + Использовать другой каталог данных: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Автоматически запускать GameCredits после входа в систему + + + &Start GameCredits on system login + &Запускать GameCredits при входе в систему + + + Size of &database cache + Размер кэша &БД + + + MB + МБ + + + Number of script &verification threads + Число потоков проверки &сценария + + + Connect to the GameCredits network through a SOCKS proxy. + Подключаться к сети GameCredits через прокси 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 + &Сеть + + + (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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Автоматически открыть порт для GameCredits-клиента на роутере. Работает только если Ваш роутер поддерживает 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 + &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 GameCredits. + Здесь можно выбрать язык интерфейса. Настройки вступят в силу после перезапуска GameCredits. + + + &Unit to show amounts in: + &Отображать суммы в единицах: + + + Choose the default subdivision unit to show in the interface and when sending coins. + Выберите единицу измерения монет при отображении и отправке. + + + Whether to show GameCredits addresses in the transaction list or not. + Показывать ли адреса GameCredits в списке транзакций. + + + &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 GameCredits network after a connection is established, but this process has not completed yet. + Отображаемая информация может быть устаревшей. Ваш бумажник автоматически синхронизируется с сетью GameCredits после подключения, но этот процесс пока не завершён. + + + 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 GameCredits address or malformed URI parameters. + Не удалось разобрать URI! Это может быть связано с неверным адресом GameCredits или неправильными параметрами URI. + + + Requested payment amount of %1 is too small (considered dust). + Запрошенная сумма платежа %1 слишком мала (считается пылью). + + + Payment request error + Ошибка запроса платежа + + + Cannot start gamecredits: click-to-pay handler + Не удаётся запустить gamecredits: обработчик 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 + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Ошибка: указанный каталог "%1" не существует. + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + Ошибка: не удалось разобрать конфигурационный файл: %1. Используйте синтаксис вида ключ=значение. + + + Error: Invalid combination of -regtest and -testnet. + Ошибка: неверная комбинация -regtest и -testnet. + + + GameCredits Core didn't yet exit safely... + GameCredits Core ещё не завершился безопасно... + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Введите GameCredits-адрес (например bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Открыть отладочный лог-файл GameCredits из текущего каталога данных. Это может занять несколько секунд для больших лог-файлов. + + + Clear console + Очистить консоль + + + Welcome to the GameCredits RPC console. + Добро пожаловать в RPC-консоль GameCredits. + + + 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 GameCredits network. + Необязательное сообщение для запроса платежа, которое будет показано при открытии запроса. Заметьте: сообщение не будет отправлено вместе с платежом через сеть GameCredits. + + + 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 + &Добавить получателя + + + 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 GameCredits address + Внимание: неверный адрес GameCredits + + + (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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Адрес, на который будет выслан платёж (например bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + К gamecredits: URI было прикреплено сообщение, которое будет сохранено вместе с транзакцией для вашего сведения. Заметьте: сообщение не будет отправлено через сеть GameCredits. + + + This is an unverified payment request. + Это непроверенный запрос платежа. + + + Pay To: + Получатель: + + + Memo: + Примечание: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Адрес, которым вы хотите подписать сообщение (напр. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Подписать сообщение, чтобы доказать владение адресом GameCredits + + + 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Адрес, которым было подписано сообщение (напр. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Проверить сообщение, чтобы убедиться, что оно было подписано указанным адресом GameCredits + + + Verify &Message + Проверить &Сообщение + + + Reset all verify message fields + Сбросить все поля проверки сообщения + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Введите адрес GameCredits (напр. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + GameCredits Core + + + The Bitcoin Core Developers + Разработчики GameCredits 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 транзакции + + + 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 + неизвестно + + + + 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 + + + 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) + + + 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 + Резервное копирование успешно завершено + + + + gamecredits-core + + Usage: + Использование: + + + List commands + Список команд + + + + Get help for a command + Получить помощь по команде + + + Options: + Опции: + + + Specify configuration file (default: gamecredits.conf) + Указать конфигурационный файл (по умолчанию: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Задать pid-файл (по умолчанию: gamecredits.pid) + + + Specify data directory + Задать каталог данных + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Принимать входящие подключения на <port> (по умолчанию: 40002 или 50001 в тестовой сети) + + + 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: 40001 or testnet: 50000) + Прослушивать подключения JSON-RPC на <порту> (по умолчанию: 40001 или для testnet: 50000) + + + Accept command line and JSON-RPC commands + Принимать командную строку и команды JSON-RPC + + + GameCredits Core RPC client version + Версия RPC-клиента GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, вы должны установить опцию rpcpassword в конфигурационном файле: + %s +Рекомендуется использовать следующий случайный пароль: +rpcuser=gamecreditsrpc +rpcpassword=%s +(вам не нужно запоминать этот пароль) +Имя и пароль ДОЛЖНЫ различаться. +Если файл не существует, создайте его и установите права доступа только для владельца, только для чтения. +Также рекомендуется включить alertnotify для оповещения о проблемах; +Например: alertnotify=echo %%s | mail -s "GameCredits 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 RCP-порта %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) + Ограничить скорость передачи бесплатных транзакций до <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 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) + Сбрасывать активность базы данных из памяти на диск каждые <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. GameCredits Core is probably already running. + Не удалось забиндиться на %s на этом компьютере. Возможно, GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Внимание: убедитесь, что дата и время на Вашем компьютере выставлены верно. Если Ваши часы идут неправильно, GameCredits будет работать некорректно. + + + 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 + + + GameCredits Core Daemon + Демон GameCredits 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: 40001 or testnet: 50000) + Подключаться к JSON-RPC на <порт> (по умолчанию: 40001 или testnet: 50000) + + + 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 = все) + + + 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 gamecredits-cli): + Использование (устарело, используйте gamecredits-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. GameCredits Core is probably already running. + Не удалось установить блокировку на каталог данных %s. Возможно, GameCredits 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 amount for -minrelaytxfee=<amount>: '%s' + Неверная сумма в параметре -minrelaytxfee=<кол-во>: '%s' + + + Invalid amount for -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) + Записывать в лог приоритет транзакции и комиссию на килобайт во время добычи блоков (по умолчанию: 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 + Печатать блок при запуске, если он найден в индексе блоков + + + Print block tree on startup (default: 0) + Печатать дерево блоков при запуске (по умолчанию: 0) + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + Параметры RPC SSL: (см. GameCredits вики для инструкций по настройке 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 GameCredits Wiki for SSL setup instructions) + +Параметры SSL: (см. GameCredits Wiki для инструкций по настройке SSL) + + + Send command to GameCredits Core + Отправить команду GameCredits 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) + Установить флаг 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) + + + Start GameCredits Core Daemon + Запустить GameCredits 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, если используется прослушивание) + + + 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 на этом компьютере (bind вернул ошибку %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 GameCredits + Ошибка загрузки wallet.dat: бумажник требует более новую версию GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + Необходимо перезаписать бумажник, перезапустите GameCredits для завершения операции. + + + 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' + + + 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 +Если файл не существует, создайте его и установите права доступа только для владельца. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_sah.ts b/src/qt/locale/bitmark_sah.ts index 97345a1..e6604d4 100644 --- a/src/qt/locale/bitmark_sah.ts +++ b/src/qt/locale/bitmark_sah.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Pfennig + Show information about pfennig @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_sah.ts~ b/src/qt/locale/bitmark_sah.ts~ new file mode 100644 index 0000000..642297a --- /dev/null +++ b/src/qt/locale/bitmark_sah.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about GameCredits + + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_sk.ts b/src/qt/locale/bitmark_sk.ts index bd51ef3..82caa87 100644 --- a/src/qt/locale/bitmark_sk.ts +++ b/src/qt/locale/bitmark_sk.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - O jadre Pfennig + About pfennig Core + O jadre pfennig - <b>Pfennig Core</b> version - Verzia <b>Pfennig jadra</b> + <b>pfennig Core</b> version + Verzia <b>pfennig jadra</b> @@ -29,7 +29,7 @@ Tento výrobok obsahuje sofvér, ktorý vyvynul OpenSSL Project pre použitie v The Bitcoin Core Developers - Vývojári jadra Pfennig + Vývojári jadra pfennig (%1-bit) @@ -103,12 +103,12 @@ Tento výrobok obsahuje sofvér, ktorý vyvynul OpenSSL Project pre použitie v Adresa prijatia - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Toto sú Vaše Pfennig adresy pre posielanie platieb. Vždy skontrolujte množstvo a prijímaciu adresu pred poslaním coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Toto sú Vaše pfennig adresy pre posielanie platieb. Vždy skontrolujte množstvo a prijímaciu adresu pred poslaním coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Toto sú vaše Pfennig adresy pre prijímanie platieb. Odporúča sa použiť novú prijímaciu adresu pre každú transakciu. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Toto sú vaše pfennig adresy pre prijímanie platieb. Odporúča sa použiť novú prijímaciu adresu pre každú transakciu. Copy &Label @@ -205,8 +205,8 @@ Tento výrobok obsahuje sofvér, ktorý vyvynul OpenSSL Project pre použitie v Potvrďte šifrovanie peňaženky - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Varovanie: Ak zašifrujete peňaženku a stratíte heslo, <b>STRATÍTE VŠETKY VAŠE PfennigY</b>!⏎ + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Varovanie: Ak zašifrujete peňaženku a stratíte heslo, <b>STRATÍTE VŠETKY VAŠE pfennigY</b>!⏎ Are you sure you wish to encrypt your wallet? @@ -225,8 +225,8 @@ Tento výrobok obsahuje sofvér, ktorý vyvynul OpenSSL Project pre použitie v Peňaženka zašifrovaná - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig 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 pfennigov pomocou škodlivého software. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig 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 pfennigov pomocou škodlivého software. Wallet encryption failed @@ -258,7 +258,7 @@ Tento výrobok obsahuje sofvér, ktorý vyvynul OpenSSL Project pre použitie v - PfennigGUI + pfennigGUI Sign &message... Podpísať &správu... @@ -296,8 +296,8 @@ Tento výrobok obsahuje sofvér, ktorý vyvynul OpenSSL Project pre použitie v Ukončiť program - Show information about Pfennig - Zobraziť informácie o Pfennig + Show information about pfennig + Zobraziť informácie o pfennig About &Qt @@ -344,11 +344,11 @@ Tento výrobok obsahuje sofvér, ktorý vyvynul OpenSSL Project pre použitie v Preindexúvam bloky na disku... - Send coins to a Pfennig address + Send coins to a pfennig address Poslať pfennigs na adresu - Modify configuration options for Pfennig + Modify configuration options for pfennig Upraviť možnosti nastavenia pre pfennig @@ -372,8 +372,8 @@ Tento výrobok obsahuje sofvér, ktorý vyvynul OpenSSL Project pre použitie v Overiť správu - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ Tento výrobok obsahuje sofvér, ktorý vyvynul OpenSSL Project pre použitie v Zašifruj súkromné kľúče ktoré patria do vašej peňaženky - Sign messages with your Pfennig addresses to prove you own them - Podpísať správu s vašou adresou Pfennig aby ste preukázali že ju vlastníte + Sign messages with your pfennig addresses to prove you own them + Podpísať správu s vašou adresou pfennig aby ste preukázali že ju vlastníte - Verify messages to ensure they were signed with specified Pfennig addresses - Overiť či správa bola podpísaná uvedenou Pfennig adresou + Verify messages to ensure they were signed with specified pfennig addresses + Overiť či správa bola podpísaná uvedenou pfennig adresou &File @@ -428,16 +428,16 @@ Tento výrobok obsahuje sofvér, ktorý vyvynul OpenSSL Project pre použitie v [testovacia sieť] - Pfennig Core - Jadro Pfennig + pfennig Core + Jadro pfennig Request payments (generates QR codes and pfennig: URIs) Vyžiadať platbu (vygeneruje QR kód a pfennig: URI) - &About Pfennig Core - O jadre Pfennig + &About pfennig Core + O jadre pfennig Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ Tento výrobok obsahuje sofvér, ktorý vyvynul OpenSSL Project pre použitie v Možnosti príkazového riadku - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Zobraziť pomocnú správu od Pfennig Jadra pre získanie zoznamu dostupných možností príkazového riadku + Show the pfennig Core help message to get a list with possible pfennig command-line options + Zobraziť pomocnú správu od pfennig Jadra pre získanie zoznamu dostupných možností príkazového riadku - Pfennig client - Pfennig klient + pfennig client + pfennig klient - %n active connection(s) to Pfennig network - %n aktívne spojenie v Pfennig sieti%n aktívne spojenia v Pfennig sieti%n aktívnych spojení v Bitconi sieti + %n active connection(s) to pfennig network + %n aktívne spojenie v pfennig sieti%n aktívne spojenia v pfennig sieti%n aktívnych spojení v Bitconi sieti No block source available... @@ -559,8 +559,8 @@ Adresa: %4 Peňaženka je <b>zašifrovaná</b> a momentálne <b>zamknutá</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Vyskytla sa neblahá chyba. Pfennig nemôže daľej bezpečne pokračovať a vypne sa. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Vyskytla sa neblahá chyba. pfennig nemôže daľej bezpečne pokračovať a vypne sa. @@ -844,7 +844,7 @@ Adresa: %4 Vložená adresa "%1" sa už nachádza v adresári. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. Vložená adresa "%1" nieje platnou adresou pfennig. @@ -882,12 +882,12 @@ Adresa: %4 HelpMessageDialog - Pfennig Core - Command-line options - Jadro Pfennig - možnosti príkazového riadku + pfennig Core - Command-line options + Jadro pfennig - možnosti príkazového riadku - Pfennig Core - Jadro Pfennig + pfennig Core + Jadro pfennig version @@ -933,16 +933,16 @@ Adresa: %4 Vitajte - Welcome to Pfennig Core. - Vitajte v jadre Pfennig. + Welcome to pfennig Core. + Vitajte v jadre pfennig. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Keďže spúštate program prvý krát, môžte si vybrať kde bude Pfennig Jadro ukladať svoje dáta. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Keďže spúštate program prvý krát, môžte si vybrať kde bude pfennig Jadro ukladať svoje dáta. - Pfennig Core will download and store a copy of the Pfennig 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 Pfennig stiahne zo siete a uloží kópiu Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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 pfennig stiahne zo siete a uloží kópiu pfennig 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 @@ -953,8 +953,8 @@ Adresa: %4 Použiť vlastný dátový adresár: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1015,12 +1015,12 @@ Adresa: %4 Zaplatiť transakčné &poplatky - Automatically start Pfennig after logging in to the system. - Automaticky spustiť Pfennig po zapnutí počítača + Automatically start pfennig after logging in to the system. + Automaticky spustiť pfennig po zapnutí počítača - &Start Pfennig on system login - &Spustiť Pfennig pri spustení systému správy okien + &Start pfennig on system login + &Spustiť pfennig pri spustení systému správy okien Size of &database cache @@ -1035,8 +1035,8 @@ Adresa: %4 Počet skript overujucich vlákien - Connect to the Pfennig network through a SOCKS proxy. - Pripojiť k Pfennig sieti cez SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. + Pripojiť k pfennig sieti cez SOCKS proxy. &Connect through SOCKS proxy (default proxy): @@ -1095,8 +1095,8 @@ Adresa: %4 Minúť nepotvrdený výdavok - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Automaticky otvorit port pre Pfennig na routeri. Toto funguje len ak router podporuje UPnP a je táto podpora aktivovaná. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automaticky otvorit port pre pfennig na routeri. Toto funguje len ak router podporuje UPnP a je táto podpora aktivovaná. Map port using &UPnP @@ -1151,8 +1151,8 @@ Adresa: %4 Jazyk užívateľského rozhrania: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Tu sa dá nastaviť jazyk užívateľského rozhrania. Toto nastavenie bude účinné po reštartovaní Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Tu sa dá nastaviť jazyk užívateľského rozhrania. Toto nastavenie bude účinné po reštartovaní pfennig. &Unit to show amounts in: @@ -1163,8 +1163,8 @@ Adresa: %4 Zvoľte ako deliť pfennig pri zobrazovaní pri platbách a užívateľskom rozhraní. - Whether to show Pfennig addresses in the transaction list or not. - Či ukazovať Pfennig adresy v zozname transakcií alebo nie. + Whether to show pfennig addresses in the transaction list or not. + Či ukazovať pfennig adresy v zozname transakcií alebo nie. &Display addresses in transaction list @@ -1218,8 +1218,8 @@ Adresa: %4 Forma - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig po nadviazaní spojenia ale tento proces ešte nieje ukončený. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig po nadviazaní spojenia ale tento proces ešte nieje ukončený. Wallet @@ -1273,8 +1273,8 @@ Adresa: %4 Spracovanie URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI sa nedá rozložiť! To môže byť spôsobené neplatou Pfennig adresou alebo zle upravenými vlastnosťami URI. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI sa nedá rozložiť! To môže byť spôsobené neplatou pfennig adresou alebo zle upravenými vlastnosťami URI. Requested payment amount of %1 is too small (considered dust). @@ -1340,8 +1340,8 @@ Adresa: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1356,12 +1356,12 @@ Adresa: %4 Chyba: Nesprávna kombinácia -regtest a -testnet. - Pfennig Core didn't yet exit safely... - Jadro Pfennig sa ešte úspešne nevyplo ... + pfennig Core didn't yet exit safely... + Jadro pfennig sa ešte úspešne nevyplo ... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Zadajte Pfennig adresu (napr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Zadajte pfennig adresu (napr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1482,16 +1482,16 @@ Adresa: %4 Súbor záznamu ladenia - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Otvoriť Pfennig 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. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Otvoriť pfennig 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 Pfennig RPC console. - Vitajte v Pfennig RPC konzole. Baník, pyčo! + Welcome to the pfennig RPC console. + Vitajte v pfennig RPC konzole. Baník, pyčo! Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1553,8 +1553,8 @@ Adresa: %4 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 Pfennig 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ť Pfennig. + 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 pfennig 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ť pfennig. An optional label to associate with the new receiving address. @@ -1703,7 +1703,7 @@ Adresa: %4 SendCoinsDialog Send Coins - Poslať Pfennigs + Poslať pfennigs Coin Control Features @@ -1866,8 +1866,8 @@ Adresa: %4 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 Pfennig address - Varovanie: Nesprávna Pfennig adresa + Warning: Invalid pfennig address + Varovanie: Nesprávna pfennig adresa (no label) @@ -1953,8 +1953,8 @@ Adresa: %4 Vložte popis pre túto adresu aby sa uložila do zoznamu použitých adries - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. - Správa ktorá bola pripojená k pfennig: URI a ktorá bude uložená s transakcou pre Vaše potreby. Poznámka: Táto správa nebude poslaná cez sieť Pfennig. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. + Správa ktorá bola pripojená k pfennig: URI a ktorá bude uložená s transakcou pre Vaše potreby. Poznámka: Táto správa nebude poslaná cez sieť pfennig. This is an unverified payment request. @@ -1972,8 +1972,8 @@ Adresa: %4 ShutdownWindow - Pfennig Core is shutting down... - Jadro Pfennig sa ukončuje... + pfennig Core is shutting down... + Jadro pfennig sa ukončuje... Do not shut down the computer until this window disappears. @@ -1996,7 +1996,7 @@ Adresa: %4 The address to sign the message with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Zadajte Pfennig adresu (napr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Zadajte pfennig adresu (napr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Choose previously used address @@ -2027,7 +2027,7 @@ Adresa: %4 Kopírovať práve zvolenú adresu do systémového klipbordu - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address Podpíšte správu aby ste dokázali že vlastníte túto adresu @@ -2052,11 +2052,11 @@ Adresa: %4 The address the message was signed with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Zadajte Pfennig adresu (napr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Zadajte pfennig adresu (napr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Overím správy sa uistiť že bola podpísaná označenou Pfennig adresou + Verify the message to ensure it was signed with the specified pfennig address + Overím správy sa uistiť že bola podpísaná označenou pfennig adresou Verify &Message @@ -2067,8 +2067,8 @@ Adresa: %4 Obnoviť všetky polia v overiť správu - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Zadajte Pfennig adresu (napr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Zadajte pfennig adresu (napr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2126,12 +2126,12 @@ Adresa: %4 SplashScreen - Pfennig Core - Jadro Pfennig + pfennig Core + Jadro pfennig The Bitcoin Core Developers - Vývojári jadra Pfennig + Vývojári jadra pfennig [testnet] @@ -2552,7 +2552,7 @@ Adresa: %4 WalletModel Send Coins - Poslať Pfennigs + Poslať pfennigs @@ -2621,8 +2621,8 @@ Adresa: %4 Určiť priečinok s dátami - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Načúvať spojeniam na <port> (prednastavené: P2PPORT alebo testovacia sieť: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Načúvať spojeniam na <port> (prednastavené: 40002 alebo testovacia sieť: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2649,16 +2649,16 @@ Adresa: %4 Vyskytla sa chyba pri nastavovaní RPC portu %u pre počúvanie na IPv4: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Počúvať JSON-RPC spojeniam na <port> (predvolené: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Počúvať JSON-RPC spojeniam na <port> (predvolené: 40001 or testnet: 50000) Accept command line and JSON-RPC commands Prijímať príkazy z príkazového riadku a JSON-RPC - Pfennig Core RPC client version - Verzia RPC klienta Jadra Pfennig + pfennig Core RPC client version + Verzia RPC klienta Jadra pfennig Run in the background as a daemon and accept commands @@ -2682,7 +2682,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, musíte nastaviť rpcpassword heslo v súbore nastavení: %s @@ -2693,7 +2693,7 @@ rpcpassword=%s 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 "Pfennig Výstraha" admin@foo.com +napríklad: alertnotify=echo %%s | mail -s "pfennig Výstraha" admin@foo.com @@ -2765,8 +2765,8 @@ napríklad: alertnotify=echo %%s | mail -s "Pfennig Výstraha" admin@f Toto je pred-testovacia verzia - použitie je na vlastné riziko - nepoužívajte na tvorbu pfennig ani obchodovanie. - Unable to bind to %s on this computer. Pfennig Core is probably already running. - Nepodarilo sa pripojiť na %s na tomto počítači. Pfennig Jadro je už pravdepodobne spustené. + Unable to bind to %s on this computer. pfennig Core is probably already running. + Nepodarilo sa pripojiť na %s na tomto počítači. pfennig Jadro je už pravdepodobne spustené. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2777,8 +2777,8 @@ napríklad: alertnotify=echo %%s | mail -s "Pfennig Výstraha" admin@f Varovanie: -paytxfee je nastavené veľmi vysoko. Toto sú transakčné poplatky ktoré zaplatíte ak odošlete transakciu. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig 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, Pfennig nebude správne pracovať. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig 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, pfennig nebude správne pracovať. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2815,8 +2815,8 @@ The network does not appear to fully agree! Some miners appear to be experiencin Pokus zachrániť súkromné kľúče z poškodeného wallet.dat - Pfennig Core Daemon - Démon Jadro Pfennig + pfennig Core Daemon + Démon Jadro pfennig Block creation options: @@ -2835,8 +2835,8 @@ The network does not appear to fully agree! Some miners appear to be experiencin Pripojiť cez SOCKS proxy - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Pripojiť ku JSON-RPC na <port> (prednastavené: RPCPORT alebo testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Pripojiť ku JSON-RPC na <port> (prednastavené: 40001 alebo testnet: 50000) Connection options: @@ -3059,8 +3059,8 @@ The network does not appear to fully agree! Some miners appear to be experiencin Importuje bloky z externého súboru blk000??.dat - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - Neviem uzamknúť data adresár %s. Jadro Pfennig je pravdepodobne už spustené. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + Neviem uzamknúť data adresár %s. Jadro pfennig 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) @@ -3123,8 +3123,8 @@ The network does not appear to fully agree! Some miners appear to be experiencin Vytlačiť strom blokov pri spustení (prednastavené: 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) - Možnosti RPC SSL: (Pozri v Pfennig Wiki pokyny pre SSL nastavenie) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) + Možnosti RPC SSL: (Pozri v pfennig Wiki pokyny pre SSL nastavenie) RPC server options: @@ -3143,12 +3143,12 @@ The network does not appear to fully agree! Some miners appear to be experiencin Mať spustené vlákno pravidelného čístenia peňaženky (predvolené: 1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL možnosť: (pozrite Pfennig Wiki pre návod na nastavenie SSL) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL možnosť: (pozrite pfennig Wiki pre návod na nastavenie SSL) - Send command to Pfennig Core - Poslať príkaz Jadru Pfennig + Send command to pfennig Core + Poslať príkaz Jadru pfennig Send trace/debug info to console instead of debug.log file @@ -3183,8 +3183,8 @@ The network does not appear to fully agree! Some miners appear to be experiencin Určiť aut spojenia v milisekundách (predvolené: 5000) - Start Pfennig Core Daemon - Štart služby Jadro Pfennig + Start pfennig Core Daemon + Štart služby Jadro pfennig System error: @@ -3299,12 +3299,12 @@ The network does not appear to fully agree! Some miners appear to be experiencin Chyba načítania wallet.dat: Peňaženka je poškodená - Error loading wallet.dat: Wallet requires newer version of Pfennig - Chyba načítania wallet.dat: Peňaženka vyžaduje novšiu verziu Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Chyba načítania wallet.dat: Peňaženka vyžaduje novšiu verziu pfennig - Wallet needed to be rewritten: restart Pfennig to complete - Bolo potrebné prepísať peňaženku: dokončite reštartovaním Pfennig + Wallet needed to be rewritten: restart pfennig to complete + Bolo potrebné prepísať peňaženku: dokončite reštartovaním pfennig Error loading wallet.dat diff --git a/src/qt/locale/bitmark_sk.ts~ b/src/qt/locale/bitmark_sk.ts~ new file mode 100644 index 0000000..e8eb32c --- /dev/null +++ b/src/qt/locale/bitmark_sk.ts~ @@ -0,0 +1,3390 @@ + + + AboutDialog + + About GameCredits Core + O jadre GameCredits + + + <b>GameCredits Core</b> version + Verzia <b>GameCredits 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 Bitcoin Core Developers + Vývojári jadra GameCredits + + + (%1-bit) + (%1-bit) + + + + AddressBookPage + + 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 + + + &Copy + &Kopírovať + + + C&lose + Zatvoriť + + + &Copy Address + &Kopírovať adresu + + + 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ť... + + + &Delete + &Zmazať + + + 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Toto sú Vaše GameCredits adresy pre posielanie platieb. Vždy skontrolujte množstvo a prijímaciu adresu pred poslaním coins. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Toto sú vaše GameCredits 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ť + + + Export Address List + Exportovať zoznam adries + + + Comma separated file (*.csv) + Čiarkou oddelený súbor (*.csv) + + + Exporting Failed + Export zlyhal + + + 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) + + + + 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 GameCreditsS</b>! + Varovanie: Ak zašifrujete peňaženku a stratíte heslo, <b>STRATÍTE VŠETKY VAŠE GameCreditsY</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á + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits 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 gamecreditsov 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é. + + + + GameCreditsGUI + + 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í + + + E&xit + U&končiť + + + Quit application + Ukončiť program + + + Show information about GameCredits + Zobraziť informácie o GameCredits + + + 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 GameCredits address + Poslať gamecreditss na adresu + + + Modify configuration options for GameCredits + Upraviť možnosti nastavenia pre gamecredits + + + 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 + + + GameCredits + GameCredits + + + Wallet + Peňaženka + + + &Send + &Odoslať + + + &Receive + &Prijať + + + &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 GameCredits addresses to prove you own them + Podpísať správu s vašou adresou GameCredits aby ste preukázali že ju vlastníte + + + Verify messages to ensure they were signed with specified GameCredits addresses + Overiť či správa bola podpísaná uvedenou GameCredits adresou + + + &File + &Súbor + + + &Settings + &Nastavenia + + + &Help + &Pomoc + + + Tabs toolbar + Lišta záložiek + + + [testnet] + [testovacia sieť] + + + GameCredits Core + Jadro GameCredits + + + Request payments (generates QR codes and gamecredits: URIs) + Vyžiadať platbu (vygeneruje QR kód a gamecredits: URI) + + + &About GameCredits Core + O jadre GameCredits + + + 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 gamecredits: URI or payment request + Otvoriť gamecredits URI alebo výzvu k platbe + + + &Command-line options + Možnosti príkazového riadku + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Zobraziť pomocnú správu od GameCredits Jadra pre získanie zoznamu dostupných možností príkazového riadku + + + GameCredits client + GameCredits klient + + + %n active connection(s) to GameCredits network + %n aktívne spojenie v GameCredits sieti%n aktívne spojenia v GameCredits 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 + + + Up to date + Aktualizovaný + + + Catching up... + Sťahujem... + + + Sent transaction + Odoslané transakcie + + + Incoming transaction + Prijaté transakcie + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Dátum: %1 +Suma: %2 +Typ: %3 +Adresa: %4 + + + 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. GameCredits can no longer continue safely and will quit. + Vyskytla sa neblahá chyba. GameCredits 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 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 + + + 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 GameCredits address. + Vložená adresa "%1" nieje platnou adresou gamecredits. + + + Could not unlock wallet. + Nepodarilo sa odomknúť peňaženku. + + + New key generation failed. + Generovanie nového kľúča zlyhalo. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + Jadro GameCredits - možnosti príkazového riadku + + + GameCredits Core + Jadro GameCredits + + + 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 GameCredits Core. + Vitajte v jadre GameCredits. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Keďže spúštate program prvý krát, môžte si vybrať kde bude GameCredits Jadro ukladať svoje dáta. + + + GameCredits Core will download and store a copy of the GameCredits 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 GameCredits stiahne zo siete a uloží kópiu GameCredits 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: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Automaticky spustiť GameCredits po zapnutí počítača + + + &Start GameCredits on system login + &Spustiť GameCredits 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 GameCredits network through a SOCKS proxy. + Pripojiť k GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Automaticky otvorit port pre GameCredits na routeri. Toto funguje len ak router podporuje UPnP a je táto podpora aktivovaná. + + + Map port using &UPnP + Mapovať port pomocou &UPnP + + + Proxy &IP: + Proxy &IP: + + + &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 GameCredits. + Tu sa dá nastaviť jazyk užívateľského rozhrania. Toto nastavenie bude účinné po reštartovaní GameCredits. + + + &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ť gamecredits pri zobrazovaní pri platbách a užívateľskom rozhraní. + + + Whether to show GameCredits addresses in the transaction list or not. + Či ukazovať GameCredits 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ť + + + default + predvolené + + + none + žiadne + + + Confirm options reset + Potvrdiť obnovenie možností + + + Client restart required to activate changes. + Reštart klienta potrebný pre aktivovanie zmien. + + + Client will be shutdown, do you want to proceed? + Klient bude vypnutý, chcete pokračovať? + + + This change would require a client restart. + Táto zmena by vyžadovala reštart klienta. + + + 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 GameCredits 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 GameCredits po nadviazaní spojenia ale tento proces ešte nieje ukončený. + + + 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> + + + out of sync + nesynchronizované + + + + PaymentServer + + URI handling + Spracovanie URI + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + URI sa nedá rozložiť! To môže byť spôsobené neplatou GameCredits 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 gamecredits: click-to-pay handler + Nedá sa spustiť obslužný program gamecredits: 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 + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Chyba: Uvedený priečinok s dátami "%1" neexistuje. + + + 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. + + + Error: Invalid combination of -regtest and -testnet. + Chyba: Nesprávna kombinácia -regtest a -testnet. + + + GameCredits Core didn't yet exit safely... + Jadro GameCredits sa ešte úspešne nevyplo ... + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Zadajte GameCredits adresu (napr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + Uložiť obrázok... + + + &Copy Image + Kopírovať obrázok + + + Save QR Code + Ukladanie QR kódu + + + 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í + + + 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ť + + + &Console + &Konzola + + + &Network Traffic + Sieťová prevádzka + + + &Clear + &Vyčistiť + + + Totals + Celkovo + + + In: + Dnu: + + + Out: + Von: + + + Build date + Dátum zostavenia + + + Debug log file + Súbor záznamu ladenia + + + Open the GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Otvoriť GameCredits 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 GameCredits RPC console. + Vitajte v GameCredits 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 GameCredits 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ť GameCredits. + + + 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ť GameCreditss + + + 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 + + + Clear all fields of the form. + Vyčistiť všetky polia formulára. + + + Clear &All + Zmazať &všetko + + + Balance: + Zostatok: + + + Confirm the send action + Potvrďte odoslanie + + + S&end + &Odoslať + + + Confirm send coins + Potvrdiť odoslanie gamecreditss + + + %1 to %2 + %1 do %2 + + + 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. + + + Transaction creation failed! + Vytvorenie transakcie zlyhalo! + + + 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 GameCredits address + Varovanie: Nesprávna GameCredits 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 + + A&mount: + Su&ma: + + + Pay &To: + Zapla&tiť: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adresa na odoslanie platby (napr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + Odstrániť túto položku + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + Správa ktorá bola pripojená k gamecredits: URI a ktorá bude uložená s transakcou pre Vaše potreby. Poznámka: Táto správa nebude poslaná cez sieť GameCredits. + + + This is an unverified payment request. + Toto je neoverená výzva k platbe. + + + Pay To: + Platba pre: + + + Memo: + Poznámka: + + + + ShutdownWindow + + GameCredits Core is shutting down... + Jadro GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Zadajte GameCredits adresu (napr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Zadajte GameCredits adresu (napr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Overím správy sa uistiť že bola podpísaná označenou GameCredits adresou + + + Verify &Message + Overiť správu + + + Reset all verify message fields + Obnoviť všetky polia v overiť správu + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Zadajte GameCredits adresu (napr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Kliknite "Podpísať Správu" na získanie podpisu + + + 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 + + GameCredits Core + Jadro GameCredits + + + The Bitcoin Core Developers + Vývojári jadra GameCredits + + + [testnet] + [testovacia sieť] + + + + TrafficGraphWidget + + KB/s + KB/s + + + + TransactionDesc + + Open until %1 + Otvorené do %1 + + + 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 + + + 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 + + + + TransactionDescDialog + + Transaction details + Detaily transakcie + + + This pane shows a detailed description of the transaction + Táto časť obrazovky zobrazuje detailný popis transakcie + + + + 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 + + + Confirmed (%1 confirmations) + Potvrdené (%1 potvrdení) + + + 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. + + + + 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 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 + + + Range: + Rozsah: + + + to + do + + + + WalletFrame + + No wallet has been loaded. + Nie je načítaná peňaženka. + + + + WalletModel + + Send Coins + Poslať GameCreditss + + + + 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 %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 + Záloha úspešná + + + + gamecredits-core + + Usage: + Použitie: + + + List commands + Zoznam príkazov + + + Get help for a command + Dostať pomoc pre príkaz + + + Options: + Možnosti: + + + Specify configuration file (default: gamecredits.conf) + Určiť súbor s nastaveniami (predvolené: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Určiť súbor pid (predvolené: gamecreditsd.pid) + + + Specify data directory + Určiť priečinok s dátami + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Načúvať spojeniam na <port> (prednastavené: 40002 alebo testovacia sieť: 50001) + + + 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: 40001 or testnet: 50000) + Počúvať JSON-RPC spojeniam na <port> (predvolené: 40001 or testnet: 50000) + + + Accept command line and JSON-RPC commands + Prijímať príkazy z príkazového riadku a JSON-RPC + + + GameCredits Core RPC client version + Verzia RPC klienta Jadra GameCredits + + + 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: +rpcuser=gamecreditsrpc +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 "GameCredits 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=gamecreditsrpc +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 "GameCredits 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 + + + 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 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) + + + 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 gamecredits ani obchodovanie. + + + Unable to bind to %s on this computer. GameCredits Core is probably already running. + Nepodarilo sa pripojiť na %s na tomto počítači. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits 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, GameCredits 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 + + + GameCredits Core Daemon + Démon Jadro GameCredits + + + 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: 40001 or testnet: 50000) + Pripojiť ku JSON-RPC na <port> (prednastavené: 40001 alebo testnet: 50000) + + + 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 gamecredits 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) + + + 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 gamecredits-cli): + Použitie (neodporúča sa, použite gamecredits-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 + + + Cannot obtain a lock on data directory %s. GameCredits Core is probably already running. + Neviem uzamknúť data adresár %s. Jadro GameCredits 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 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) + + + Print block on startup, if found in block index + Vytlač blok pri spustení, ak nájdený v zozname blokov + + + Print block tree on startup (default: 0) + Vytlačiť strom blokov pri spustení (prednastavené: 0) + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + Možnosti RPC SSL: (Pozri v GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL možnosť: (pozrite GameCredits Wiki pre návod na nastavenie SSL) + + + Send command to GameCredits Core + Poslať príkaz Jadru GameCredits + + + Send trace/debug info to console instead of debug.log file + Odoslať trace/debug informácie na konzolu namiesto debug.info žurnálu + + + 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 GameCredits Core Daemon + Štart služby Jadro GameCredits + + + 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) + + + 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! + + + 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) + + + 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) + + + 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 GameCredits + Chyba načítania wallet.dat: Peňaženka vyžaduje novšiu verziu GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + Bolo potrebné prepísať peňaženku: dokončite reštartovaním GameCredits + + + 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 + + + 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. + Musíš nastaviť rpcpassword=<heslo> v konfiguračnom súbore: +%s +Ak súbor neexistuje, vytvor ho s oprávnením pre čítanie len vlastníkom (owner-readable-only) + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_sl_SI.ts b/src/qt/locale/bitmark_sl_SI.ts index 227b692..dfe7f0a 100644 --- a/src/qt/locale/bitmark_sl_SI.ts +++ b/src/qt/locale/bitmark_sl_SI.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - O jedru Pfenniga + About pfennig Core + O jedru pfenniga - <b>Pfennig Core</b> version - <b>Jedro Pfenniga</b> različica + <b>pfennig Core</b> version + <b>Jedro pfenniga</b> različica @@ -98,12 +98,12 @@ This product includes software developed by the OpenSSL Project for use in the O Prejemati naslovi - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - To so vaši Pfennig naslovi za prejemanje plačil. Priporočljivo je uporabljati nov prejemni naslov za vsako izmed transakcij. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + To so vaši pfennig naslovi za prejemanje plačil. Priporočljivo je uporabljati nov prejemni naslov za vsako izmed transakcij. Copy &Label @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O Potrdi šifriranje denarnice - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,8 +220,8 @@ This product includes software developed by the OpenSSL Project for use in the O Denarnica šifrirana - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig 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. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig 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 @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... Podpiši &sporočilo ... @@ -291,8 +291,8 @@ This product includes software developed by the OpenSSL Project for use in the O Izhod iz aplikacije - Show information about Pfennig - Pokaži informacije o Pfennigu + Show information about pfennig + Pokaži informacije o pfennigu About &Qt @@ -339,12 +339,12 @@ This product includes software developed by the OpenSSL Project for use in the O Poustvarjam kazalo blokov na disku... - Send coins to a Pfennig address - Pošlji kovance na Pfennig naslov + Send coins to a pfennig address + Pošlji kovance na pfennig naslov - Modify configuration options for Pfennig - Spremeni konfiguracijo nastavitev za Pfennig + Modify configuration options for pfennig + Spremeni konfiguracijo nastavitev za pfennig Backup wallet to another location @@ -367,8 +367,8 @@ This product includes software developed by the OpenSSL Project for use in the O %Preveri sporočilo ... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O Šifiraj zasebne ključe v moji denarnici - Sign messages with your Pfennig addresses to prove you own them - Za dokaz, da ste lastniki sporočil, se podpišite z Pfennig naslovom + Sign messages with your pfennig addresses to prove you own them + Za dokaz, da ste lastniki sporočil, se podpišite z pfennig naslovom - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,16 +423,16 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core - Jedro Pfenniga + pfennig Core + Jedro pfenniga Request payments (generates QR codes and pfennig: URIs) - &About Pfennig Core - &O jedru Pfenniga + &About pfennig Core + &O jedru pfenniga Show the list of used sending addresses and labels @@ -444,22 +444,22 @@ This product includes software developed by the OpenSSL Project for use in the O Open a pfennig: URI or payment request - Odpri Pfennig: URI ali zahteva o plačilu + Odpri pfennig: URI ali zahteva o plačilu &Command-line options - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Pfennig odjemalec + pfennig client + pfennig odjemalec - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network %n aktivna povezava v pfennig omrežje%n aktivni povezavi v pfennig omrežje%n aktivnih povezav v pfennig omrežje%n aktivnih povezav v pfennig omrežje @@ -555,7 +555,7 @@ Naslov: %4 Denarnica je <b>šifrirana</b> in trenutno <b>zaklenjena</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -840,8 +840,8 @@ Naslov: %4 Vnešeni naslov "&1" je že v imeniku. - The entered address "%1" is not a valid Pfennig address. - Vnešeni naslov "%1" ni veljaven Pfennig naslov. + The entered address "%1" is not a valid pfennig address. + Vnešeni naslov "%1" ni veljaven pfennig naslov. Could not unlock wallet. @@ -878,12 +878,12 @@ Naslov: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Jedro Pfenniga + pfennig Core + Jedro pfenniga version @@ -929,15 +929,15 @@ Naslov: %4 Dobrodošli - Welcome to Pfennig Core. - Dobrodošli v jedru Pfenniga + Welcome to pfennig Core. + Dobrodošli v jedru pfenniga - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -949,8 +949,8 @@ Naslov: %4 - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1011,12 +1011,12 @@ Naslov: %4 Nakazilo plačila & provizija - Automatically start Pfennig after logging in to the system. - Po prijavi v sistem samodejno zaženite Pfennig. + Automatically start pfennig after logging in to the system. + Po prijavi v sistem samodejno zaženite pfennig. - &Start Pfennig on system login - &Zaženi Pfennig ob prijavi v sistem + &Start pfennig on system login + &Zaženi pfennig ob prijavi v sistem Size of &database cache @@ -1031,7 +1031,7 @@ Naslov: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1091,7 +1091,7 @@ Naslov: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1147,7 +1147,7 @@ Naslov: %4 Vmesnik uporabnika &jezik: - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1159,7 +1159,7 @@ Naslov: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1214,8 +1214,8 @@ Naslov: %4 Oblika - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 Pfennig omrežjem, ampak ta proces še ni bil zaključen. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig 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 pfennig omrežjem, ampak ta proces še ni bil zaključen. Wallet @@ -1269,7 +1269,7 @@ Naslov: %4 Rokovanje z URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1336,8 +1336,8 @@ Naslov: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1352,11 +1352,11 @@ Naslov: %4 Napaka: Neveljavna kombinacija -regtest and -testnet - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Vnesite pfennig naslov (npr.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1478,7 +1478,7 @@ Naslov: %4 Razhroščevalna dnevniška datoteka - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1486,8 +1486,8 @@ Naslov: %4 Počisti konzolo - Welcome to the Pfennig RPC console. - Dobrodošli na Pfennig RPC konzoli. + Welcome to the pfennig RPC console. + Dobrodošli na pfennig RPC konzoli. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1549,7 +1549,7 @@ Naslov: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1862,8 +1862,8 @@ Naslov: %4 - Warning: Invalid Pfennig address - Opozorilo: Neveljaven Pfennig naslov + Warning: Invalid pfennig address + Opozorilo: Neveljaven pfennig naslov (no label) @@ -1949,7 +1949,7 @@ Naslov: %4 Vnesite oznako za ta naslov, ki bo shranjena v seznam uporabljenih naslovov - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1968,7 +1968,7 @@ Naslov: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2023,7 +2023,7 @@ Naslov: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2051,7 +2051,7 @@ Naslov: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2063,7 +2063,7 @@ Naslov: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Vnesite pfennig naslov (npr.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2122,8 +2122,8 @@ Naslov: %4 SplashScreen - Pfennig Core - Jedro Pfenniga + pfennig Core + Jedro pfenniga The Bitcoin Core Developers @@ -2617,8 +2617,8 @@ Naslov: %4 Določi podatkovni imenik - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Sprejmi povezave na <port> (privzeta vrata: P2PPORT ali testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Sprejmi povezave na <port> (privzeta vrata: 40002 ali testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2645,7 +2645,7 @@ Naslov: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2653,7 +2653,7 @@ Naslov: %4 Sprejmi ukaze iz ukazne vrstice in JSON-RPC - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2678,7 +2678,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2751,7 +2751,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. 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. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2763,7 +2763,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2799,7 +2799,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2819,7 +2819,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3043,7 +3043,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3107,7 +3107,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3127,11 +3127,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL možnosti: (glejte Pfennig Wiki za navodla, kako nastaviti SSL) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL možnosti: (glejte pfennig Wiki za navodla, kako nastaviti SSL) - Send command to Pfennig Core + Send command to pfennig Core @@ -3167,7 +3167,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3283,12 +3283,12 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Napaka pri nalaganju wallet.dat: denarnica pokvarjena - Error loading wallet.dat: Wallet requires newer version of Pfennig - Napaka pri nalaganju wallet.dat: denarnica zahteva novejšo različico Pfenniga + Error loading wallet.dat: Wallet requires newer version of pfennig + Napaka pri nalaganju wallet.dat: denarnica zahteva novejšo različico pfenniga - Wallet needed to be rewritten: restart Pfennig to complete - Denarnica mora biti prepisana: ponovno zaženite Pfennig za doknčanje + Wallet needed to be rewritten: restart pfennig to complete + Denarnica mora biti prepisana: ponovno zaženite pfennig za doknčanje Error loading wallet.dat diff --git a/src/qt/locale/bitmark_sl_SI.ts~ b/src/qt/locale/bitmark_sl_SI.ts~ new file mode 100644 index 0000000..33961f4 --- /dev/null +++ b/src/qt/locale/bitmark_sl_SI.ts~ @@ -0,0 +1,3374 @@ + + + AboutDialog + + About GameCredits Core + O jedru GameCreditsa + + + <b>GameCredits Core</b> version + <b>Jedro GameCreditsa</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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + To so vaši GameCredits 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 GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits 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. + + + + + GameCreditsGUI + + 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 GameCredits + Pokaži informacije o GameCreditsu + + + 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 GameCredits address + Pošlji kovance na GameCredits naslov + + + Modify configuration options for GameCredits + Spremeni konfiguracijo nastavitev za GameCredits + + + 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 ... + + + GameCredits + GameCredits + + + 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 GameCredits addresses to prove you own them + Za dokaz, da ste lastniki sporočil, se podpišite z GameCredits naslovom + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &Datoteka + + + &Settings + &Nastavitve + + + &Help + &Pomoč + + + Tabs toolbar + Orodna vrstica zavihkov + + + [testnet] + [testnet] + + + GameCredits Core + Jedro GameCreditsa + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + &O jedru GameCreditsa + + + 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 gamecredits: URI or payment request + Odpri GameCredits: URI ali zahteva o plačilu + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + GameCredits odjemalec + + + %n active connection(s) to GameCredits network + %n aktivna povezava v gamecredits omrežje%n aktivni povezavi v gamecredits omrežje%n aktivnih povezav v gamecredits omrežje%n aktivnih povezav v gamecredits 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. GameCredits 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 GameCredits address. + Vnešeni naslov "%1" ni veljaven GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + Jedro GameCreditsa + + + 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 GameCredits Core. + Dobrodošli v jedru GameCreditsa + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Po prijavi v sistem samodejno zaženite GameCredits. + + + &Start GameCredits on system login + &Zaženi GameCredits ob prijavi v sistem + + + Size of &database cache + + + + MB + megabite + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits 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 GameCredits 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 gamecredits: 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 + + GameCredits + GameCredits + + + 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 + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Vnesite gamecredits naslov (npr.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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 GameCredits RPC console. + Dobrodošli na GameCredits 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 GameCredits 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 GameCredits address + Opozorilo: Neveljaven GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + Preveri &Sporočilo + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Vnesite gamecredits naslov (npr.: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + Jedro GameCreditsa + + + The Bitcoin 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 + + + + gamecredits-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: gamecredits.conf) + Določi datoteko z nastavitvami (privzeta: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Določi pid datoteko (privzeta: gamecredits.pid) + + + Specify data directory + Določi podatkovni imenik + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Sprejmi povezave na <port> (privzeta vrata: 40002 ali testnet: 50001) + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + Sprejmi ukaze iz ukazne vrstice in JSON-RPC + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL možnosti: (glejte GameCredits Wiki za navodla, kako nastaviti SSL) + + + Send command to GameCredits 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 GameCredits 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 GameCredits + Napaka pri nalaganju wallet.dat: denarnica zahteva novejšo različico GameCreditsa + + + Wallet needed to be rewritten: restart GameCredits to complete + Denarnica mora biti prepisana: ponovno zaženite GameCredits 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/bitmark_sq.ts b/src/qt/locale/bitmark_sq.ts index 84d6023..6c2a466 100644 --- a/src/qt/locale/bitmark_sq.ts +++ b/src/qt/locale/bitmark_sq.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O Konfirmoni enkriptimin e portofolit - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O Portofoli u enkriptua - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O Mbyllni aplikacionin - Show information about Pfennig + Show information about pfennig Trego informacionin rreth Botkoin-it @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O [testo rrjetin] - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network %n lidhje aktive me rrjetin e Bitkoin%n lidhje aktive me rrjetin e Bitkoin @@ -551,7 +551,7 @@ Address: %4 Portofoli po <b> enkriptohet</b> dhe është <b> i kyçur</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 Adresa e dhënë "%1" është e zënë në librin e adresave. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 Formilarë - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Futni një adresë Bitkoini (p.sh. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Futni një adresë Bitkoini (p.sh. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_sq.ts~ b/src/qt/locale/bitmark_sq.ts~ new file mode 100644 index 0000000..1513c39 --- /dev/null +++ b/src/qt/locale/bitmark_sq.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + 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 GameCredits + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + 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... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &Skedar + + + &Settings + &Konfigurimet + + + &Help + &Ndihmë + + + Tabs toolbar + Shiriti i mjeteve + + + [testnet] + [testo rrjetin] + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Futni një adresë Bitkoini (p.sh. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Futni një adresë Bitkoini (p.sh. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_sr.ts b/src/qt/locale/bitmark_sr.ts index aa272b8..b07c5d5 100644 --- a/src/qt/locale/bitmark_sr.ts +++ b/src/qt/locale/bitmark_sr.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,8 +200,8 @@ This product includes software developed by the OpenSSL Project for use in the O Одобрите шифровање новчаника - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! - Упозорење: Ако се ваш новчаник шифрује а потом изгубите лозинкзу, ви ћете <b>ИЗГУБИТИ СВЕ Pfennig-Е</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! + Упозорење: Ако се ваш новчаник шифрује а потом изгубите лозинкзу, ви ћете <b>ИЗГУБИТИ СВЕ pfennig-Е</b>! Are you sure you wish to encrypt your wallet? @@ -220,8 +220,8 @@ This product includes software developed by the OpenSSL Project for use in the O Новчаник је шифрован - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Pfennig ć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 pfennige da ne budu ukradeni od malawarea koji bi inficirao tvoj kompjuter. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig ć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 pfennige da ne budu ukradeni od malawarea koji bi inficirao tvoj kompjuter. Wallet encryption failed @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,8 +291,8 @@ This product includes software developed by the OpenSSL Project for use in the O Напустите програм - Show information about Pfennig - Прегледајте информације о Pfennig-у + Show information about pfennig + Прегледајте информације о pfennig-у About &Qt @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address Пошаљите новац на pfennig адресу - Modify configuration options for Pfennig + Modify configuration options for pfennig Изаберите могућности pfennig-а @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,16 +451,16 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network - %n активна веза са Pfennig мрежом%n активне везе са Pfennig мрежом%n активних веза са Pfennig мрежом + %n active connection(s) to pfennig network + %n активна веза са pfennig мрежом%n активне везе са pfennig мрежом%n активних веза са pfennig мрежом No block source available... @@ -551,7 +551,7 @@ Address: %4 Новчаник јс <b>шифрован</b> и тренутно <b>закључан</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 Унешена адреса "%1" се већ налази у адресару. - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 Форма - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,12 +1348,12 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Unesite Pfennig adresu (n.pr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Unesite pfennig adresu (n.pr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,8 +2059,8 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Unesite Pfennig adresu (n.pr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Unesite pfennig adresu (n.pr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,8 +2613,8 @@ Address: %4 Gde je konkretni data direktorijum - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Slušaj konekcije na <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Slušaj konekcije na <port> (default: 40002 or testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2642,7 +2642,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2650,7 +2650,7 @@ Address: %4 Prihvati komandnu liniju i JSON-RPC komande - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2675,7 +2675,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2748,7 +2748,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2760,7 +2760,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2796,7 +2796,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2816,7 +2816,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3040,7 +3040,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3104,7 +3104,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3124,11 +3124,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3164,7 +3164,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3280,11 +3280,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Грешка током учитавања wallet.dat: Новчаник је покварен - Error loading wallet.dat: Wallet requires newer version of Pfennig - Грешка током учитавања wallet.dat: Новчанику је неопходна нова верзија Pfennig-a. + Error loading wallet.dat: Wallet requires newer version of pfennig + Грешка током учитавања wallet.dat: Новчанику је неопходна нова верзија pfennig-a. - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_sr.ts~ b/src/qt/locale/bitmark_sr.ts~ new file mode 100644 index 0000000..8e4b9f2 --- /dev/null +++ b/src/qt/locale/bitmark_sr.ts~ @@ -0,0 +1,3369 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</b>! + Упозорење: Ако се ваш новчаник шифрује а потом изгубите лозинкзу, ви ћете <b>ИЗГУБИТИ СВЕ GameCredits-Е</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 + Новчаник је шифрован + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + GameCredits ć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 gamecreditse 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. + Лозинка за приступ новчанику је успешно промењена. + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + Синхронизација са мрежом у току... + + + &Overview + &Општи преглед + + + Node + + + + Show general overview of wallet + Погледајте општи преглед новчаника + + + &Transactions + &Трансакције + + + Browse transaction history + Претражите историјат трансакција + + + E&xit + I&zlaz + + + Quit application + Напустите програм + + + Show information about GameCredits + Прегледајте информације о GameCredits-у + + + 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 GameCredits address + Пошаљите новац на gamecredits адресу + + + Modify configuration options for GameCredits + Изаберите могућности gamecredits-а + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + Мењање лозинке којом се шифрује новчаник + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + новчаник + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &Фајл + + + &Settings + &Подешавања + + + &Help + П&омоћ + + + Tabs toolbar + Трака са картицама + + + [testnet] + [testnet] + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits network + %n активна веза са GameCredits мрежом%n активне везе са GameCredits мрежом%n активних веза са GameCredits мрежом + + + 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 + + Datum: %1⏎ Iznos: %2⏎ Tip: %3⏎ Adresa: %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. GameCredits can no longer continue safely and will quit. + + + + + 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 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + &Јединица за приказивање износа: + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits addresses in the transaction list or not. + + + + &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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Unesite GameCredits adresu (n.pr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 + + + + 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 + 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. + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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+ + + + Paste address from clipboard + + + + Alt+P + Alt+П + + + Remove this entry + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Unesite GameCredits adresu (n.pr. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + 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 + + + + TransactionDescDialog + + Transaction details + detalji transakcije + + + This pane shows a detailed description of the transaction + Ovaj odeljak pokazuje detaljan opis transakcije + + + + 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 + + + Confirmed (%1 confirmations) + Potvrdjena (%1 potvrdjenih) + + + 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. + + + + 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 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 + + + + Range: + Opseg: + + + to + do + + + + 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 + + + + + gamecredits-core + + Usage: + Korišćenje: + + + List commands + Listaj komande + + + Get help for a command + Zatraži pomoć za komande + + + Options: + Opcije + + + Specify configuration file (default: gamecredits.conf) + Potvrdi željeni konfiguracioni fajl (podrazumevani:gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Konkretizuj pid fajl (podrazumevani: gamecreditsd.pid) + + + Specify data directory + Gde je konkretni data direktorijum + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Slušaj konekcije na <port> (default: 40002 or testnet: 50001) + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + Prihvati komandnu liniju i JSON-RPC komande + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 + Korisničko ime za JSON-RPC konekcije + + + 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 + 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) + + + This help message + Ova poruka Pomoći + + + Unable to bind to %s on this computer (bind returned error %d, %s) + + + + 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 GameCredits + Грешка током учитавања wallet.dat: Новчанику је неопходна нова верзија GameCredits-a. + + + Wallet needed to be rewritten: restart GameCredits 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 + + + + 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. + + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_sv.ts b/src/qt/locale/bitmark_sv.ts index 2b87deb..9a9299b 100644 --- a/src/qt/locale/bitmark_sv.ts +++ b/src/qt/locale/bitmark_sv.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Om Pfennig Core + About pfennig Core + Om pfennig Core - <b>Pfennig Core</b> version - <b>Pfennig Core</b>-version + <b>pfennig Core</b> version + <b>pfennig Core</b>-version @@ -30,7 +30,7 @@ Denna produkten innehåller mjukvara utvecklad av OpenSSL Project för användni The Bitcoin Core Developers - Pfennig Core-utvecklarna + pfennig Core-utvecklarna (%1-bit) @@ -104,12 +104,12 @@ Denna produkten innehåller mjukvara utvecklad av OpenSSL Project för användni Mottagaradresser - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Detta är dina Pfennig adresser för att skicka betalningar. Kolla alltid summan och den mottagande adressen innan du skickar Pfennigs. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Detta är dina pfennig adresser för att skicka betalningar. Kolla alltid summan och den mottagande adressen innan du skickar pfennigs. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Detta är dina Pfennig adresser för att ta emot betalningar. Det rekommenderas att använda en ny mottagningsadress för varje transaktion. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Detta är dina pfennig adresser för att ta emot betalningar. Det rekommenderas att använda en ny mottagningsadress för varje transaktion. Copy &Label @@ -206,7 +206,7 @@ Denna produkten innehåller mjukvara utvecklad av OpenSSL Project för användni Bekräfta kryptering av plånbok - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</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>! @@ -226,7 +226,7 @@ Denna produkten innehåller mjukvara utvecklad av OpenSSL Project för användni Plånboken är krypterad - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs 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. @@ -259,7 +259,7 @@ Denna produkten innehåller mjukvara utvecklad av OpenSSL Project för användni - PfennigGUI + pfennigGUI Sign &message... Signera &meddelande... @@ -297,8 +297,8 @@ Denna produkten innehåller mjukvara utvecklad av OpenSSL Project för användni Avsluta programmet - Show information about Pfennig - Visa information om Pfennig + Show information about pfennig + Visa information om pfennig About &Qt @@ -345,12 +345,12 @@ Denna produkten innehåller mjukvara utvecklad av OpenSSL Project för användni Återindexerar block på disken... - Send coins to a Pfennig address - Skicka mynt till en Pfennig-adress + Send coins to a pfennig address + Skicka mynt till en pfennig-adress - Modify configuration options for Pfennig - Ändra konfigurationsalternativ för Pfennig + Modify configuration options for pfennig + Ändra konfigurationsalternativ för pfennig Backup wallet to another location @@ -373,8 +373,8 @@ Denna produkten innehåller mjukvara utvecklad av OpenSSL Project för användni &Verifiera meddelande... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -401,12 +401,12 @@ Denna produkten innehåller mjukvara utvecklad av OpenSSL Project för användni Kryptera de privata nycklar som tillhör din plånbok - Sign messages with your Pfennig addresses to prove you own them - Signera meddelanden med din Pfennigadress för att bevisa att du äger dem + Sign messages with your pfennig addresses to prove you own them + Signera meddelanden med din pfennigadress för att bevisa att du äger dem - Verify messages to ensure they were signed with specified Pfennig addresses - Verifiera meddelanden för att vara säker på att de var signerade med den specificerade Pfennig-adressen + Verify messages to ensure they were signed with specified pfennig addresses + Verifiera meddelanden för att vara säker på att de var signerade med den specificerade pfennig-adressen &File @@ -429,16 +429,16 @@ Denna produkten innehåller mjukvara utvecklad av OpenSSL Project för användni [testnet] - Pfennig Core - Pfennig Kärna + pfennig Core + pfennig Kärna Request payments (generates QR codes and pfennig: URIs) Begär betalning (genererar QR-koder och pfennig-URI) - &About Pfennig Core - &Om Pfennig Core + &About pfennig Core + &Om pfennig Core Show the list of used sending addresses and labels @@ -457,16 +457,16 @@ Denna produkten innehåller mjukvara utvecklad av OpenSSL Project för användni &Kommandoradsalternativ - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Visa Pfennig Core hjälpmeddelande för att få en lista med möjliga Pfennig kommandoradsalternativ. + Show the pfennig Core help message to get a list with possible pfennig command-line options + Visa pfennig Core hjälpmeddelande för att få en lista med möjliga pfennig kommandoradsalternativ. - Pfennig client - Pfennig-klient + pfennig client + pfennig-klient - %n active connection(s) to Pfennig network - %n aktiv anslutning till Pfennig-nätverket%n aktiva anslutningar till Pfennig-nätverket + %n active connection(s) to pfennig network + %n aktiv anslutning till pfennig-nätverket%n aktiva anslutningar till pfennig-nätverket No block source available... @@ -561,8 +561,8 @@ Adress: %4 Denna plånbok är <b>krypterad</b> och för närvarande <b>låst</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Ett allvarligt fel har uppstått. Pfennig kan inte längre köras säkert och kommer att avslutas. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Ett allvarligt fel har uppstått. pfennig kan inte längre köras säkert och kommer att avslutas. @@ -846,8 +846,8 @@ Adress: %4 Den angivna adressen "%1" finns redan i adressboken. - The entered address "%1" is not a valid Pfennig address. - Den angivna adressen "%1" är inte en giltig Pfennig-adress. + The entered address "%1" is not a valid pfennig address. + Den angivna adressen "%1" är inte en giltig pfennig-adress. Could not unlock wallet. @@ -884,12 +884,12 @@ Adress: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Core - Kommandoradsalternativ + pfennig Core - Command-line options + pfennig Core - Kommandoradsalternativ - Pfennig Core - Pfennig Kärna + pfennig Core + pfennig Kärna version @@ -935,16 +935,16 @@ Adress: %4 Välkommen - Welcome to Pfennig Core. - Välkommen till Pfennig Core. + Welcome to pfennig Core. + Välkommen till pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Eftersom detta är första gången programmet startas får du välja var Pfennig Core skall lagra sitt data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Eftersom detta är första gången programmet startas får du välja var pfennig Core skall lagra sitt data. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig Core kommer att ladda ner och spara en kopia av Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. + pfennig Core kommer att ladda ner och spara en kopia av pfennig 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 @@ -955,8 +955,8 @@ Adress: %4 Använd en anpassad datakatalog: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1017,12 +1017,12 @@ Adress: %4 Betala överförings&avgift - Automatically start Pfennig after logging in to the system. - Starta Pfennig automatiskt efter inloggning. + Automatically start pfennig after logging in to the system. + Starta pfennig automatiskt efter inloggning. - &Start Pfennig on system login - &Starta Pfennig vid systemstart + &Start pfennig on system login + &Starta pfennig vid systemstart Size of &database cache @@ -1037,8 +1037,8 @@ Adress: %4 Antalet skript & verifikationstrådar - Connect to the Pfennig network through a SOCKS proxy. - Anslut till Pfennig-nätverket genom en SOCKS-proxy. + Connect to the pfennig network through a SOCKS proxy. + Anslut till pfennig-nätverket genom en SOCKS-proxy. &Connect through SOCKS proxy (default proxy): @@ -1097,8 +1097,8 @@ Adress: %4 &Spendera okonfirmerad växel - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Öppna automatiskt Pfennig-klientens port på routern. Detta fungerar endast om din router har UPnP aktiverat. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Öppna automatiskt pfennig-klientens port på routern. Detta fungerar endast om din router har UPnP aktiverat. Map port using &UPnP @@ -1153,8 +1153,8 @@ Adress: %4 Användargränssnittets &språk: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Användargränssnittets språk kan ställas in här. Denna inställning träder i kraft efter en omstart av Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Användargränssnittets språk kan ställas in här. Denna inställning träder i kraft efter en omstart av pfennig. &Unit to show amounts in: @@ -1165,8 +1165,8 @@ Adress: %4 Välj en måttenhet att visa när du skickar mynt. - Whether to show Pfennig addresses in the transaction list or not. - Anger om Pfennig-adresser skall visas i transaktionslistan. + Whether to show pfennig addresses in the transaction list or not. + Anger om pfennig-adresser skall visas i transaktionslistan. &Display addresses in transaction list @@ -1220,8 +1220,8 @@ Adress: %4 Formulär - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig network after a connection is established, but this process has not completed yet. - Den visade informationen kan vara inaktuell. Plånboken synkroniseras automatiskt med Pfennig-nätverket efter att anslutningen är upprättad, men denna process har inte slutförts ännu. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig network after a connection is established, but this process has not completed yet. + Den visade informationen kan vara inaktuell. Plånboken synkroniseras automatiskt med pfennig-nätverket efter att anslutningen är upprättad, men denna process har inte slutförts ännu. Wallet @@ -1275,8 +1275,8 @@ Adress: %4 URI hantering - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI går inte att tolkas! Detta kan orsakas av en ogiltig Pfennig-adress eller felaktiga URI parametrar. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI går inte att tolkas! Detta kan orsakas av en ogiltig pfennig-adress eller felaktiga URI parametrar. Requested payment amount of %1 is too small (considered dust). @@ -1342,8 +1342,8 @@ Adress: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1358,12 +1358,12 @@ Adress: %4 Fel: Felaktig kombination av -regtest och -testnet. - Pfennig Core didn't yet exit safely... - Pfennig Core avslutades inte ännu säkert... + pfennig Core didn't yet exit safely... + pfennig Core avslutades inte ännu säkert... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Ange en Pfennig-adress (t.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ange en pfennig-adress (t.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1484,16 +1484,16 @@ Adress: %4 Debugloggfil - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Öppna Pfennig debug-loggfilen som finns i datakatalogen. Detta kan ta några sekunder för stora loggfiler. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Öppna pfennig debug-loggfilen som finns i datakatalogen. Detta kan ta några sekunder för stora loggfiler. Clear console Rensa konsollen - Welcome to the Pfennig RPC console. - Välkommen till Pfennig RPC-konsollen. + Welcome to the pfennig RPC console. + Välkommen till pfennig RPC-konsollen. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1555,8 +1555,8 @@ Adress: %4 Å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 Pfennig 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 Pfennignätverket. + 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 pfennig 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 pfennignätverket. An optional label to associate with the new receiving address. @@ -1868,8 +1868,8 @@ Adress: %4 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 Pfennig address - Varning: Felaktig Pfennigadress + Warning: Invalid pfennig address + Varning: Felaktig pfennigadress (no label) @@ -1955,8 +1955,8 @@ Adress: %4 Ange en etikett för denna adress att adderas till listan över använda adresser - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. - Ett meddelande som bifogades pfennig-URI, vilket lagras med transaktionen som referens. NB: Meddelandet kommer inte att sändas över Pfennignätverket. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. + Ett meddelande som bifogades pfennig-URI, vilket lagras med transaktionen som referens. NB: Meddelandet kommer inte att sändas över pfennignätverket. This is an unverified payment request. @@ -1974,8 +1974,8 @@ Adress: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig Core stängs av... + pfennig Core is shutting down... + pfennig Core stängs av... Do not shut down the computer until this window disappears. @@ -2029,7 +2029,7 @@ Adress: %4 Kopiera signaturen till systemets Urklipp - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address Signera meddelandet för att bevisa att du äger denna adress @@ -2057,8 +2057,8 @@ Adress: %4 Adressen som meddelandet var signerat med (t.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Verifiera meddelandet för att vara säker på att den var signerad med den angivna Pfennig-adressen + Verify the message to ensure it was signed with the specified pfennig address + Verifiera meddelandet för att vara säker på att den var signerad med den angivna pfennig-adressen Verify &Message @@ -2069,8 +2069,8 @@ Adress: %4 Rensa alla fält - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Ange en Pfennig-adress (t.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ange en pfennig-adress (t.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2128,12 +2128,12 @@ Adress: %4 SplashScreen - Pfennig Core - Pfennig Kärna + pfennig Core + pfennig Kärna The Bitcoin Core Developers - Pfennig Core-utvecklarna + pfennig Core-utvecklarna [testnet] @@ -2623,8 +2623,8 @@ Adress: %4 Ange katalog för data - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Lyssna efter anslutningar på <port> (förvalt: P2PPORT eller testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Lyssna efter anslutningar på <port> (förvalt: 40002 eller testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2651,16 +2651,16 @@ Adress: %4 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: RPCPORT or testnet: 1RPCPORT) - Lyssna på JSON-RPC-anslutningar på <port> (förvalt: RPCPORT eller testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Lyssna på JSON-RPC-anslutningar på <port> (förvalt: 40001 eller testnet: 50000) Accept command line and JSON-RPC commands Tillåt kommandon från kommandotolken och JSON-RPC-kommandon - Pfennig Core RPC client version - Pfennig Core RPC-klient version + pfennig Core RPC client version + pfennig Core RPC-klient version Run in the background as a daemon and accept commands @@ -2684,7 +2684,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, du behöver sätta ett rpclösensord i konfigurationsfilen: %s @@ -2695,7 +2695,7 @@ rpcpassword=%s Användarnamnet och lösenordet FÅR INTE bara detsamma. Om filen inte existerar, skapa den med enbart ägarläsbara filrättigheter. Det är också rekommenderat att sätta alertnotify så du meddelas om problem; -till exempel: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com +till exempel: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2767,8 +2767,8 @@ till exempel: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo 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. Pfennig Core is probably already running. - Det går inte att binda till %s på den här datorn. Pfennig Core är förmodligen redan igång. + Unable to bind to %s on this computer. pfennig Core is probably already running. + Det går inte att binda till %s på den här datorn. pfennig Core är förmodligen redan igång. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2779,8 +2779,8 @@ till exempel: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Varning: -paytxfee är satt väldigt hög! Detta är avgiften du kommer betala för varje transaktion. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Varning: Vänligen kolla så att din dators datum och tid är korrekt! Om din klocka går fel kommer Pfennig inte fungera korrekt. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Varning: Vänligen kolla så att din dators datum och tid är korrekt! Om din klocka går fel kommer pfennig inte fungera korrekt. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2815,8 +2815,8 @@ till exempel: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Försök att rädda de privata nycklarna från en korrupt wallet.dat - Pfennig Core Daemon - Pfennig Core tjänsten + pfennig Core Daemon + pfennig Core tjänsten Block creation options: @@ -2835,8 +2835,8 @@ till exempel: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Anslut genom SOCKS-proxy - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - Anslut till JSON-RPC på <port> (förval: RPCPORT eller testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + Anslut till JSON-RPC på <port> (förval: 40001 eller testnet: 50000) Connection options: @@ -3059,8 +3059,8 @@ till exempel: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Importerar block från extern blk000??.dat fil - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - Kan inte låsa data-mappen %s. Pfennig Core körs förmodligen redan. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + Kan inte låsa data-mappen %s. pfennig 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) @@ -3123,8 +3123,8 @@ till exempel: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Skriv ut blockträdet vid uppstart (förvalt: 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) - RPC SSL optioner: (se Pfennig Wiki för SSL inställningsinstruktioner) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) + RPC SSL optioner: (se pfennig Wiki för SSL inställningsinstruktioner) RPC server options: @@ -3143,12 +3143,12 @@ till exempel: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Kör en tråd för att tömma plånboken periodiskt (förvalt: 1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL-inställningar: (se Pfennig-wikin för SSL-setup instruktioner) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL-inställningar: (se pfennig-wikin för SSL-setup instruktioner) - Send command to Pfennig Core - Sänd kommando till Pfennig Core + Send command to pfennig Core + Sänd kommando till pfennig Core Send trace/debug info to console instead of debug.log file @@ -3183,8 +3183,8 @@ till exempel: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Ange timeout för uppkoppling i millisekunder (förvalt: 5000) - Start Pfennig Core Daemon - Starta Pfennig Core tjänsten + Start pfennig Core Daemon + Starta pfennig Core tjänsten System error: @@ -3299,12 +3299,12 @@ till exempel: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo Fel vid inläsningen av wallet.dat: Plånboken är skadad - Error loading wallet.dat: Wallet requires newer version of Pfennig - Fel vid inläsningen av wallet.dat: Plånboken kräver en senare version av Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig + Fel vid inläsningen av wallet.dat: Plånboken kräver en senare version av pfennig - Wallet needed to be rewritten: restart Pfennig to complete - Plånboken behöver skrivas om: Starta om Pfennig för att färdigställa + Wallet needed to be rewritten: restart pfennig to complete + Plånboken behöver skrivas om: Starta om pfennig för att färdigställa Error loading wallet.dat diff --git a/src/qt/locale/bitmark_sv.ts~ b/src/qt/locale/bitmark_sv.ts~ new file mode 100644 index 0000000..9b36945 --- /dev/null +++ b/src/qt/locale/bitmark_sv.ts~ @@ -0,0 +1,3390 @@ + + + AboutDialog + + About GameCredits Core + Om GameCredits Core + + + <b>GameCredits Core</b> version + <b>GameCredits 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. + +Detta är experimentell mjukvara. + + +Distribuerad under mjukvarulicensen MIT/X11, se den medföljande filen COPYING eller http://www.opensource.org/licenses/mit-license.php. + +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 Bitcoin Core Developers + GameCredits Core-utvecklarna + + + (%1-bit) + (%1-bit) + + + + AddressBookPage + + Double-click to edit address or label + 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 + + + &Copy + &Kopiera + + + C&lose + S&täng + + + &Copy Address + &Kopiera adress + + + 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 + + + &Delete + &Radera + + + 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Detta är dina GameCredits adresser för att skicka betalningar. Kolla alltid summan och den mottagande adressen innan du skickar GameCreditss. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Detta är dina GameCredits 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 + + + Export Address List + Exportera adresslistan + + + Comma separated file (*.csv) + Kommaseparerad fil (*.csv) + + + Exporting Failed + Exporteringen misslyckades + + + 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) + + + + 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 GameCreditsS</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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + GameCreditsGUI + + 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 + + + E&xit + &Avsluta + + + Quit application + Avsluta programmet + + + Show information about GameCredits + Visa information om GameCredits + + + 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 GameCredits address + Skicka mynt till en GameCredits-adress + + + Modify configuration options for GameCredits + Ändra konfigurationsalternativ för GameCredits + + + 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... + + + GameCredits + GameCredits + + + Wallet + Plånbok + + + &Send + &Skicka + + + &Receive + &Ta emot + + + &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 GameCredits addresses to prove you own them + Signera meddelanden med din GameCreditsadress för att bevisa att du äger dem + + + Verify messages to ensure they were signed with specified GameCredits addresses + Verifiera meddelanden för att vara säker på att de var signerade med den specificerade GameCredits-adressen + + + &File + &Arkiv + + + &Settings + &Inställningar + + + &Help + &Hjälp + + + Tabs toolbar + Verktygsfält för Tabbar + + + [testnet] + [testnet] + + + GameCredits Core + GameCredits Kärna + + + Request payments (generates QR codes and gamecredits: URIs) + Begär betalning (genererar QR-koder och gamecredits-URI) + + + &About GameCredits Core + &Om GameCredits 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 gamecredits: URI or payment request + Öppna en gamecredits: URI eller betalningsbegäran + + + &Command-line options + &Kommandoradsalternativ + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + Visa GameCredits Core hjälpmeddelande för att få en lista med möjliga GameCredits kommandoradsalternativ. + + + GameCredits client + GameCredits-klient + + + %n active connection(s) to GameCredits network + %n aktiv anslutning till GameCredits-nätverket%n aktiva anslutningar till GameCredits-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 + + + Up to date + Uppdaterad + + + Catching up... + Hämtar senaste... + + + Sent transaction + Transaktion skickad + + + Incoming transaction + Inkommande transaktion + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Datum: %1 +Belopp: %2 +Typ: %3 +Adress: %4 + + + + 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. GameCredits can no longer continue safely and will quit. + Ett allvarligt fel har uppstått. GameCredits kan inte längre köras säkert och kommer att avslutas. + + + + 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 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 + + + 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 GameCredits address. + Den angivna adressen "%1" är inte en giltig GameCredits-adress. + + + Could not unlock wallet. + Plånboken kunde inte låsas upp. + + + New key generation failed. + Misslyckades med generering av ny nyckel. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + GameCredits Core - Kommandoradsalternativ + + + GameCredits Core + GameCredits 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 GameCredits Core. + Välkommen till GameCredits Core. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Eftersom detta är första gången programmet startas får du välja var GameCredits Core skall lagra sitt data. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits Core kommer att ladda ner och spara en kopia av GameCredits 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: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Starta GameCredits automatiskt efter inloggning. + + + &Start GameCredits on system login + &Starta GameCredits vid systemstart + + + Size of &database cache + Storleken på &databascache + + + MB + MB + + + Number of script &verification threads + Antalet skript & verifikationstrådar + + + Connect to the GameCredits network through a SOCKS proxy. + Anslut till GameCredits-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 + + + (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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Öppna automatiskt GameCredits-klientens port på routern. Detta fungerar endast om din router har UPnP aktiverat. + + + Map port using &UPnP + Tilldela port med hjälp av &UPnP + + + Proxy &IP: + Proxy-&IP: + + + &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 GameCredits. + Användargränssnittets språk kan ställas in här. Denna inställning träder i kraft efter en omstart av GameCredits. + + + &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 GameCredits addresses in the transaction list or not. + Anger om GameCredits-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 + + + default + standard + + + none + ingen + + + Confirm options reset + Bekräfta att alternativen ska återställs + + + Client restart required to activate changes. + Klientomstart är nödvändig för att aktivera ändringarna. + + + Client will be shutdown, do you want to proceed? + Klienten skall stängas av, vill du fortsätta? + + + This change would require a client restart. + Denna ändring kräver en klientomstart. + + + The supplied proxy address is invalid. + Den medföljande proxy adressen är ogiltig. + + + + OverviewPage + + Form + Formulär + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits network after a connection is established, but this process has not completed yet. + Den visade informationen kan vara inaktuell. Plånboken synkroniseras automatiskt med GameCredits-nätverket efter att anslutningen är upprättad, men denna process har inte slutförts ännu. + + + 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> + + + out of sync + osynkroniserad + + + + PaymentServer + + URI handling + URI hantering + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + URI går inte att tolkas! Detta kan orsakas av en ogiltig GameCredits-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 gamecredits: click-to-pay handler + Kan inte starta gamecredits: 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 + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Fel: Den angivna datakatalogen "%1" finns inte. + + + 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. + + + Error: Invalid combination of -regtest and -testnet. + Fel: Felaktig kombination av -regtest och -testnet. + + + GameCredits Core didn't yet exit safely... + GameCredits Core avslutades inte ännu säkert... + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ange en GameCredits-adress (t.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + &Spara Bild... + + + &Copy Image + &Kopiera Bild + + + Save QR Code + Spara QR-kod + + + 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 + + + Block chain + Blockkedja + + + Current number of blocks + Aktuellt antal block + + + Estimated total blocks + Beräknade totala block + + + Last block time + Sista blocktid + + + &Open + &Öppna + + + &Console + &Konsol + + + &Network Traffic + &Nätverkstrafik + + + &Clear + &Rensa + + + Totals + Totalt + + + In: + In: + + + Out: + Ut: + + + Build date + Kompileringsdatum + + + Debug log file + Debugloggfil + + + Open the GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Öppna GameCredits debug-loggfilen som finns i datakatalogen. Detta kan ta några sekunder för stora loggfiler. + + + Clear console + Rensa konsollen + + + Welcome to the GameCredits RPC console. + Välkommen till GameCredits 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 GameCredits 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 GameCreditsnä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 + + + Clear all fields of the form. + Rensa alla formulärfälten + + + Clear &All + Rensa &alla + + + Balance: + Balans: + + + Confirm the send action + Bekräfta sändordern + + + S&end + &Skicka + + + Confirm send coins + Bekräfta skickade mynt + + + %1 to %2 + %1 till %2 + + + 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. + + + Transaction creation failed! + Transaktionen gick inte att skapa! + + + 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 GameCredits address + Varning: Felaktig GameCreditsadress + + + (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 + + A&mount: + &Belopp: + + + Pay &To: + Betala &Till: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adressen som betalningen skall skickas till (t.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + Radera denna post + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + Ett meddelande som bifogades gamecredits-URI, vilket lagras med transaktionen som referens. NB: Meddelandet kommer inte att sändas över GameCreditsnätverket. + + + This is an unverified payment request. + Detta är en overifierad betalningsbegäran. + + + Pay To: + Betala Till: + + + Memo: + PM: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adressen att signera meddelandet med (t.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Adressen som meddelandet var signerat med (t.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Verifiera meddelandet för att vara säker på att den var signerad med den angivna GameCredits-adressen + + + Verify &Message + Verifiera &Meddelande + + + Reset all verify message fields + Rensa alla fält + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ange en GameCredits-adress (t.ex. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + Klicka "Signera Meddelande" för att få en 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. + + + + SplashScreen + + GameCredits Core + GameCredits Kärna + + + The Bitcoin Core Developers + GameCredits 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 + + + 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 + + + + TransactionDescDialog + + Transaction details + Transaktionsdetaljer + + + This pane shows a detailed description of the transaction + Den här panelen visar en detaljerad beskrivning av transaktionen + + + + 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 + + + Confirmed (%1 confirmations) + Bekräftad (%1 bekräftelser) + + + 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. + + + + 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 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 + + + Range: + Intervall: + + + to + till + + + + WalletFrame + + No wallet has been loaded. + Ingen plånbok har laddats in. + + + + WalletModel + + Send Coins + Skicka pengar + + + + 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 %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 + + + + gamecredits-core + + Usage: + Användning: + + + List commands + Lista kommandon + + + Get help for a command + Få hjälp med ett kommando + + + Options: + Inställningar: + + + Specify configuration file (default: gamecredits.conf) + Ange konfigurationsfil (förvalt: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Ange pid fil (förvalt: gamecreditsd.pid) + + + Specify data directory + Ange katalog för data + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Lyssna efter anslutningar på <port> (förvalt: 40002 eller testnet: 50001) + + + 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: 40001 or testnet: 50000) + Lyssna på JSON-RPC-anslutningar på <port> (förvalt: 40001 eller testnet: 50000) + + + Accept command line and JSON-RPC commands + Tillåt kommandon från kommandotolken och JSON-RPC-kommandon + + + GameCredits Core RPC client version + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, du behöver sätta ett rpclösensord i konfigurationsfilen: +%s +Det är rekommenderat att använda följande slumpade lösenord: +rpcuser=gamecreditsrpc +rpcpassword=%s +(du behöver inte komma ihåg lösenordet) +Användarnamnet och lösenordet FÅR INTE bara detsamma. +Om filen inte existerar, skapa den med enbart ägarläsbara filrättigheter. +Det är också rekommenderat att sätta alertnotify så du meddelas om problem; +till exempel: alertnotify=echo %%s | mail -s "GameCredits Alert" admin@foo.com + + + + 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 + + + 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 gamecreditss! + + + 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) + + + 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. GameCredits Core is probably already running. + Det går inte att binda till %s på den här datorn. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Varning: Vänligen kolla så att din dators datum och tid är korrekt! Om din klocka går fel kommer GameCredits 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 + + + GameCredits Core Daemon + GameCredits 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: 40001 or testnet: 50000) + Anslut till JSON-RPC på <port> (förval: 40001 eller testnet: 50000) + + + 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) + + + 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 gamecredits-cli): + Användning (föråldrat, använd gamecredits-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 + + + Cannot obtain a lock on data directory %s. GameCredits Core is probably already running. + Kan inte låsa data-mappen %s. GameCredits 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 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) + + + Print block on startup, if found in block index + Skriv ut block vid uppstart, om det hittas i blockindexet + + + Print block tree on startup (default: 0) + Skriv ut blockträdet vid uppstart (förvalt: 0) + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + RPC SSL optioner: (se GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL-inställningar: (se GameCredits-wikin för SSL-setup instruktioner) + + + Send command to GameCredits Core + Sänd kommando till GameCredits Core + + + Send trace/debug info to console instead of debug.log file + Skicka trace-/debuginformation till terminalen istället för till debug.log + + + 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 GameCredits Core Daemon + Starta GameCredits 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) + + + 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! + + + 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) + + + 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) + + + 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 GameCredits + Fel vid inläsningen av wallet.dat: Plånboken kräver en senare version av GameCredits + + + Wallet needed to be rewritten: restart GameCredits to complete + Plånboken behöver skrivas om: Starta om GameCredits 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 gamecreditss + + + 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 + + + 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. + Du behöver välja ett rpclösensord i konfigurationsfilen: +%s +Om filen inte existerar, skapa den med filrättigheten endast läsbar för ägaren. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_th_TH.ts b/src/qt/locale/bitmark_th_TH.ts index b0f3a7e..1b071a1 100644 --- a/src/qt/locale/bitmark_th_TH.ts +++ b/src/qt/locale/bitmark_th_TH.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O ยืนยันการเข้ารหัสกระเป๋าสตางค์ - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O กระเป๋าสตางค์ถูกเข้ารหัสเรียบร้อยแล้ว - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,8 +291,8 @@ This product includes software developed by the OpenSSL Project for use in the O ออกจากโปรแกรม - Show information about Pfennig - แสดงข้อมูลเกี่ยวกับ Pfennig + Show information about pfennig + แสดงข้อมูลเกี่ยวกับ pfennig About &Qt @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,16 +451,16 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network - %n ที่ใช้งานการเชื่อมต่อกับเครือข่าย Pfennig + %n active connection(s) to pfennig network + %n ที่ใช้งานการเชื่อมต่อกับเครือข่าย pfennig No block source available... @@ -551,7 +551,7 @@ Address: %4 กระเป๋าเงินถูก <b>เข้ารหัส</b> และในปัจจุบัน <b>ล็อค </b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 ป้อนที่อยู่ "%1" ที่มีอยู่แล้วในสมุดที่อยู่ - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 รูป - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_th_TH.ts~ b/src/qt/locale/bitmark_th_TH.ts~ new file mode 100644 index 0000000..05163ac --- /dev/null +++ b/src/qt/locale/bitmark_th_TH.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + กระเป๋าสตางค์ถูกเข้ารหัสเรียบร้อยแล้ว + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + กำลังทำข้อมูลให้ตรงกันกับเครือข่าย ... + + + &Overview + &ภาพรวม + + + Node + + + + Show general overview of wallet + แสดงภาพรวมทั่วไปของกระเป๋าเงิน + + + &Transactions + &การทำรายการ + + + Browse transaction history + เรียกดูประวัติการทำธุรกรรม + + + E&xit + + + + Quit application + ออกจากโปรแกรม + + + Show information about GameCredits + แสดงข้อมูลเกี่ยวกับ GameCredits + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + เปลี่ยนรหัสผ่านที่ใช้สำหรับการเข้ารหัสกระเป๋าเงิน + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + &ไฟล์ + + + &Settings + &การตั้งค่า + + + &Help + &ช่วยเหลือ + + + Tabs toolbar + แถบเครื่องมือ + + + [testnet] + [testnet] + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits network + %n ที่ใช้งานการเชื่อมต่อกับเครือข่าย GameCredits + + + 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> + ระเป๋าเงินถูก <b>เข้ารหัส</b> และในขณะนี้ <b>ปลดล็อคแล้ว</b> + + + Wallet is <b>encrypted</b> and currently <b>locked</b> + กระเป๋าเงินถูก <b>เข้ารหัส</b> และในปัจจุบัน <b>ล็อค </b> + + + A fatal error occurred. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_tr.ts b/src/qt/locale/bitmark_tr.ts index 44b1ff5..250178f 100644 --- a/src/qt/locale/bitmark_tr.ts +++ b/src/qt/locale/bitmark_tr.ts @@ -2,12 +2,12 @@ AboutDialog - About Pfennig Core - Pfennig Çekirdeği hakkında + About pfennig Core + pfennig Çekirdeği hakkında - <b>Pfennig Core</b> version - <b>Pfennig Çekirdek</b> sürümü + <b>pfennig Core</b> version + <b>pfennig Çekirdek</b> sürümü @@ -29,7 +29,7 @@ This product includes software developed by the OpenSSL Project for use in the O The Bitcoin Core Developers - Pfennig Çekirdeği geliştiricileri + pfennig Çekirdeği geliştiricileri (%1-bit) @@ -84,11 +84,11 @@ This product includes software developed by the OpenSSL Project for use in the O Choose the address to send coins to - Pfennig yollanacak adresi seç + pfennig yollanacak adresi seç Choose the address to receive coins with - Pfennig alınacak adresi seç + pfennig alınacak adresi seç C&hoose @@ -103,12 +103,12 @@ This product includes software developed by the OpenSSL Project for use in the O Alım adresleri - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Bunlar ödeme yapmak için kullanacağınız Pfennig adreslerinizdir. Pfennig yollamadan önce meblağı ve alıcı adresini daima kontrol ediniz. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Bunlar ödeme yapmak için kullanacağınız pfennig adreslerinizdir. pfennig yollamadan önce meblağı ve alıcı adresini daima kontrol ediniz. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. - Bunlar ödeme almak için kullanacağınız Pfennig adreslerinizdir. Her muamele için yeni bir alım adresi kullanmanız tavsiye edilir. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Bunlar ödeme almak için kullanacağınız pfennig adreslerinizdir. Her muamele için yeni bir alım adresi kullanmanız tavsiye edilir. Copy &Label @@ -205,7 +205,7 @@ This product includes software developed by the OpenSSL Project for use in the O Cüzdan şifrelenmesini teyit eder - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! Uyarı: Eğer cüzdanınızı şifrelerseniz ve parolanızı kaybederseniz, <b>TÜM BİTMARKLERİNİZİ KAYBEDERSİNİZ</b>! @@ -225,8 +225,8 @@ This product includes software developed by the OpenSSL Project for use in the O Cüzdan şifrelendi - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. - Şifreleme işlemini tamamlamak için Pfennig şimdi kapanacaktır. Cüzdanınızı şifrelemenin, Pfenniglerinizin bilgisayara bulaşan kötücül bir yazılım tarafından çalınmaya karşı tamamen koruyamayacağını unutmayınız. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + Şifreleme işlemini tamamlamak için pfennig şimdi kapanacaktır. Cüzdanınızı şifrelemenin, pfenniglerinizin 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 @@ -258,7 +258,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... &Mesaj imzala... @@ -296,8 +296,8 @@ This product includes software developed by the OpenSSL Project for use in the O Uygulamadan çık - Show information about Pfennig - Pfennig hakkında bilgi göster + Show information about pfennig + pfennig hakkında bilgi göster About &Qt @@ -344,12 +344,12 @@ This product includes software developed by the OpenSSL Project for use in the O Diskteki bloklar yeniden endeksleniyor... - Send coins to a Pfennig address - Bir Pfennig adresine Pfennig yolla + Send coins to a pfennig address + Bir pfennig adresine pfennig yolla - Modify configuration options for Pfennig - Pfennig seçeneklerinin yapılandırmasını değiştir + Modify configuration options for pfennig + pfennig seçeneklerinin yapılandırmasını değiştir Backup wallet to another location @@ -372,8 +372,8 @@ This product includes software developed by the OpenSSL Project for use in the O Mesaj &kontrol et... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ This product includes software developed by the OpenSSL Project for use in the O Cüzdanınızın özel anahtarlarını şifrele - Sign messages with your Pfennig addresses to prove you own them - Mesajları adreslerin size ait olduğunu ispatlamak için Pfennig adresleri ile imzala + Sign messages with your pfennig addresses to prove you own them + Mesajları adreslerin size ait olduğunu ispatlamak için pfennig adresleri ile imzala - Verify messages to ensure they were signed with specified Pfennig addresses - Belirtilen Pfennig adresleri ile imzalandıklarından emin olmak için mesajları kontrol et + Verify messages to ensure they were signed with specified pfennig addresses + Belirtilen pfennig adresleri ile imzalandıklarından emin olmak için mesajları kontrol et &File @@ -428,16 +428,16 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core - Pfennig Çekirdeği + pfennig Core + pfennig Çekirdeği Request payments (generates QR codes and pfennig: URIs) Ödeme talep et (QR kodu ve pfennig URI'si oluşturur) - &About Pfennig Core - Pfennig Çekirdeği &hakkında + &About pfennig Core + pfennig Çekirdeği &hakkında Show the list of used sending addresses and labels @@ -456,16 +456,16 @@ This product includes software developed by the OpenSSL Project for use in the O &Komut satırı seçenekleri - Show the Pfennig Core help message to get a list with possible Pfennig command-line options - Pfennig komut satırı seçeneklerinin listesini elde etmek için Pfennig Çekirdeği yardım mesajını göster + Show the pfennig Core help message to get a list with possible pfennig command-line options + pfennig komut satırı seçeneklerinin listesini elde etmek için pfennig Çekirdeği yardım mesajını göster - Pfennig client - Pfennig istemcisi + pfennig client + pfennig istemcisi - %n active connection(s) to Pfennig network - Pfennig şebekesine %n faal bağlantıPfennig şebekesine %n faal bağlantı + %n active connection(s) to pfennig network + pfennig şebekesine %n faal bağlantıpfennig şebekesine %n faal bağlantı No block source available... @@ -560,8 +560,8 @@ Adres: %4 Cüzdan <b>şifrelenmiştir</b> ve şu anda <b>kilitlidir</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Ciddi bir hata oluştu. Pfennig artık güvenli bir şekilde işlemeye devam edemez ve kapanacaktır. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Ciddi bir hata oluştu. pfennig artık güvenli bir şekilde işlemeye devam edemez ve kapanacaktır. @@ -845,8 +845,8 @@ Adres: %4 Girilen "%1" adresi hâlihazırda adres defterinde mevcuttur. - The entered address "%1" is not a valid Pfennig address. - Girilen "%1" adresi geçerli bir Pfennig adresi değildir. + The entered address "%1" is not a valid pfennig address. + Girilen "%1" adresi geçerli bir pfennig adresi değildir. Could not unlock wallet. @@ -883,12 +883,12 @@ Adres: %4 HelpMessageDialog - Pfennig Core - Command-line options - Pfennig Çekirdeği - Komut satırı seçenekleri + pfennig Core - Command-line options + pfennig Çekirdeği - Komut satırı seçenekleri - Pfennig Core - Pfennig Çekirdeği + pfennig Core + pfennig Çekirdeği version @@ -934,16 +934,16 @@ Adres: %4 Hoş geldiniz - Welcome to Pfennig Core. - Pfennig Çekirdeğine hoş geldiniz. + Welcome to pfennig Core. + pfennig Çekirdeğine hoş geldiniz. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. - Bu programı ilk kez başlattığınızdan dolayı Pfennig Çekirdeğinin verilerini nereye saklayacağını seçebilirsiniz. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. + Bu programı ilk kez başlattığınızdan dolayı pfennig Çekirdeğinin verilerini nereye saklayacağını seçebilirsiniz. - Pfennig Core will download and store a copy of the Pfennig 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. - Pfennig çekirdeği Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. + pfennig çekirdeği pfennig 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 @@ -954,8 +954,8 @@ Adres: %4 Özel bir veri klasörü kullan: - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,12 +1016,12 @@ Adres: %4 Muamele ücreti &öde - Automatically start Pfennig after logging in to the system. - Sistemde oturum açıldığında Pfennig'i otomatik olarak başlat. + Automatically start pfennig after logging in to the system. + Sistemde oturum açıldığında pfennig'i otomatik olarak başlat. - &Start Pfennig on system login - Pfennig'i sistem oturumuyla &başlat + &Start pfennig on system login + pfennig'i sistem oturumuyla &başlat Size of &database cache @@ -1036,8 +1036,8 @@ Adres: %4 İş parçacıklarını &denetleme betiği sayısı - Connect to the Pfennig network through a SOCKS proxy. - Pfennig şebekesine bir SOCKS vekil sunucusu vasıtasıyla bağlan. + Connect to the pfennig network through a SOCKS proxy. + pfennig şebekesine bir SOCKS vekil sunucusu vasıtasıyla bağlan. &Connect through SOCKS proxy (default proxy): @@ -1096,8 +1096,8 @@ Adres: %4 Teyit edilmemiş para üstünü &harca - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. - Yönlendiricide Pfennig istemci portlarını otomatik olarak açar. Bu, sadece yönlendiricinizin UPnP desteği bulunuyorsa ve etkinse çalışabilir. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Yönlendiricide pfennig istemci portlarını otomatik olarak açar. Bu, sadece yönlendiricinizin UPnP desteği bulunuyorsa ve etkinse çalışabilir. Map port using &UPnP @@ -1152,8 +1152,8 @@ Adres: %4 Kullanıcı arayüzü &lisanı: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Kullanıcı arayüzünün dili burada belirtilebilir. Bu ayar Pfennig tekrar başlatıldığında etkinleşecektir. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Kullanıcı arayüzünün dili burada belirtilebilir. Bu ayar pfennig tekrar başlatıldığında etkinleşecektir. &Unit to show amounts in: @@ -1161,11 +1161,11 @@ Adres: %4 Choose the default subdivision unit to show in the interface and when sending coins. - Pfennig gönderildiğinde arayüzde gösterilecek varsayılan alt birimi seçiniz. + pfennig gönderildiğinde arayüzde gösterilecek varsayılan alt birimi seçiniz. - Whether to show Pfennig addresses in the transaction list or not. - Muamele listesinde Pfennig adreslerinin gösterilip gösterilmeyeceklerini belirler. + Whether to show pfennig addresses in the transaction list or not. + Muamele listesinde pfennig adreslerinin gösterilip gösterilmeyeceklerini belirler. &Display addresses in transaction list @@ -1219,7 +1219,7 @@ Adres: %4 Form - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig 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. @@ -1274,8 +1274,8 @@ Adres: %4 URI yönetimi - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - URI okunamadı! Sebebi geçersiz bir Pfennig adresi veya hatalı URI parametreleri olabilir. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + URI okunamadı! Sebebi geçersiz bir pfennig adresi veya hatalı URI parametreleri olabilir. Requested payment amount of %1 is too small (considered dust). @@ -1287,7 +1287,7 @@ Adres: %4 Cannot start pfennig: click-to-pay handler - Pfennig başlatılamadı: tıkla-ve-öde yöneticisi + pfennig başlatılamadı: tıkla-ve-öde yöneticisi Net manager warning @@ -1341,8 +1341,8 @@ Adres: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,12 +1357,12 @@ Adres: %4 Hata: -regtest ve -testnet'in geçersiz kombinasyonu. - Pfennig Core didn't yet exit safely... - Pfennig Çekirdeği henüz güvenli bir şekilde çıkış yapmamıştır... + pfennig Core didn't yet exit safely... + pfennig Çekirdeği henüz güvenli bir şekilde çıkış yapmamıştır... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Pfennig adresi giriniz (mesela bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + pfennig adresi giriniz (mesela bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,16 +1483,16 @@ Adres: %4 Hata ayıklama kütük dosyası - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Güncel veri klasöründen Pfennig hata ayıklama kütük dosyasını açar. Büyük kütük dosyaları için bu birkaç saniye alabilir. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Güncel veri klasöründen pfennig 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 Pfennig RPC console. - Pfennig RPC konsoluna hoş geldiniz. + Welcome to the pfennig RPC console. + pfennig RPC konsoluna hoş geldiniz. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1554,8 +1554,8 @@ Adres: %4 &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 Pfennig network. - Talep açıldığında gösterilecek, isteğinize dayalı, ödeme talebi ile ilişkilendirilecek bir mesaj. Not: Bu mesaj ödeme ile birlikte Pfennig şebekesi üzerinden gönderilmeyecektir. + 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 pfennig network. + Talep açıldığında gösterilecek, isteğinize dayalı, ödeme talebi ile ilişkilendirilecek bir mesaj. Not: Bu mesaj ödeme ile birlikte pfennig şebekesi üzerinden gönderilmeyecektir. An optional label to associate with the new receiving address. @@ -1704,7 +1704,7 @@ Adres: %4 SendCoinsDialog Send Coins - Pfennig yolla + pfennig yolla Coin Control Features @@ -1867,8 +1867,8 @@ Adres: %4 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 Pfennig address - Uyarı: geçersiz Pfennig adresi + Warning: Invalid pfennig address + Uyarı: geçersiz pfennig adresi (no label) @@ -1954,8 +1954,8 @@ Adres: %4 Kullanılmış adres listesine eklemek için bu adrese bir etiket girin - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. - Pfennig: URI'siyle ilişkili ve bilginiz için muameleyle saklanacak bir mesaj. Not: Bu mesaj Pfennig şebekesi üzerinden gönderilmeyecektir. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. + pfennig: URI'siyle ilişkili ve bilginiz için muameleyle saklanacak bir mesaj. Not: Bu mesaj pfennig şebekesi üzerinden gönderilmeyecektir. This is an unverified payment request. @@ -1973,8 +1973,8 @@ Adres: %4 ShutdownWindow - Pfennig Core is shutting down... - Pfennig Çekirdeği kapanıyor... + pfennig Core is shutting down... + pfennig Çekirdeği kapanıyor... Do not shut down the computer until this window disappears. @@ -2028,8 +2028,8 @@ Adres: %4 Güncel imzayı sistem panosuna kopyala - Sign the message to prove you own this Pfennig address - Bu Pfennig adresinin sizin olduğunu ispatlamak için mesajı imzalayın + Sign the message to prove you own this pfennig address + Bu pfennig adresinin sizin olduğunu ispatlamak için mesajı imzalayın Sign &Message @@ -2056,8 +2056,8 @@ Adres: %4 Mesajı imzalamak için kullanılmış olan adres (mesela bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Belirtilen Pfennig adresi ile imzalandığını doğrulamak için mesajı kontrol et + Verify the message to ensure it was signed with the specified pfennig address + Belirtilen pfennig adresi ile imzalandığını doğrulamak için mesajı kontrol et Verify &Message @@ -2068,8 +2068,8 @@ Adres: %4 Tüm mesaj kontrolü alanlarını sıfırla - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Pfennig adresi giriniz (mesela bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + pfennig adresi giriniz (mesela bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2127,12 +2127,12 @@ Adres: %4 SplashScreen - Pfennig Core - Pfennig Çekirdeği + pfennig Core + pfennig Çekirdeği The Bitcoin Core Developers - Pfennig Çekirdeği geliştiricileri + pfennig Çekirdeği geliştiricileri [testnet] @@ -2553,7 +2553,7 @@ Adres: %4 WalletModel Send Coins - Pfennig yolla + pfennig yolla @@ -2622,8 +2622,8 @@ Adres: %4 Veri dizinini belirt - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Bağlantılar için dinlenecek <port> (varsayılan: P2PPORT ya da testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Bağlantılar için dinlenecek <port> (varsayılan: 40002 ya da testnet: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2650,16 +2650,16 @@ Adres: %4 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: RPCPORT or testnet: 1RPCPORT) - JSON-RPC bağlantılarını <port> üzerinde dinle (varsayılan: RPCPORT veya tesnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + JSON-RPC bağlantılarını <port> üzerinde dinle (varsayılan: 40001 veya tesnet: 50000) Accept command line and JSON-RPC commands Konut satırı ve JSON-RPC komutlarını kabul et - Pfennig Core RPC client version - Pfennig Çekirdeği RPC istemci sürümü + pfennig Core RPC client version + pfennig Çekirdeği RPC istemci sürümü Run in the background as a daemon and accept commands @@ -2683,7 +2683,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, şu yapılandırma dosyasında rpc parolası belirtmeniz gerekir: %s @@ -2694,7 +2694,7 @@ rpcpassword=%s Kullanıcı ismi ile parolanın FARKLI olmaları gerekir. Dosya mevcut değilse, sadece sahibi için okumayla sınırlı izin ile oluşturunuz. Sorunlar hakkında bildiri almak için alertnotify unsurunu ayarlamanız tavsiye edilir; -mesela: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com +mesela: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2766,8 +2766,8 @@ mesela: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Bu yayın öncesi bir deneme sürümüdür - tüm riski siz üstlenmiş olursunuz - pfennig oluşturmak ya da ticari uygulamalar için kullanmayınız - Unable to bind to %s on this computer. Pfennig Core is probably already running. - Bu bilgisayarda %s unsuruna bağlanılamadı. Pfennig Çekirdeği muhtemelen hâlihazırda çalışmaktadır. + Unable to bind to %s on this computer. pfennig Core is probably already running. + Bu bilgisayarda %s unsuruna bağlanılamadı. pfennig Çekirdeği muhtemelen hâlihazırda çalışmaktadır. Use separate SOCKS5 proxy to reach peers via Tor hidden services (default: -proxy) @@ -2778,8 +2778,8 @@ mesela: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Uyarı: -paytxfee çok yüksek bir değere ayarlanmış! Bu, muamele gönderirseniz ödeyeceğiniz muamele ücretidir. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig 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 Pfennig gerektiği gibi çalışamaz. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig 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 pfennig gerektiği gibi çalışamaz. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2814,8 +2814,8 @@ mesela: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Bozuk bir wallet.dat dosyasından özel anahtarları geri kazanmayı dene - Pfennig Core Daemon - Pfennig Çekirdek servisi + pfennig Core Daemon + pfennig Çekirdek servisi Block creation options: @@ -2834,8 +2834,8 @@ mesela: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com SOCKS vekil sunucusuyla bağlan - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - <port> numarasında JSON-RPC'ye bağlan (varsayılan: RPCPORT veya testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + <port> numarasında JSON-RPC'ye bağlan (varsayılan: 40001 veya testnet: 50000) Connection options: @@ -2955,7 +2955,7 @@ mesela: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Generate coins (default: 0) - Pfennig oluştur (varsayılan: 0) + pfennig oluştur (varsayılan: 0) How many blocks to check at startup (default: 288, 0 = all) @@ -3058,8 +3058,8 @@ mesela: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Harici blk000??.dat dosyasından blokları içe aktarır - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. - %s veri dizininde kilit elde edilemedi. Pfennig Çekirdeği muhtemelen hâlihazırda çalışmaktadır. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. + %s veri dizininde kilit elde edilemedi. pfennig Ç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) @@ -3122,8 +3122,8 @@ mesela: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Başlangıçta blok ağacını göster (varsayılan: 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) - RPC SSL seçenekleri: (SSL kurulumu yönergeleri için Pfennig vikisine bakınız) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) + RPC SSL seçenekleri: (SSL kurulumu yönergeleri için pfennig vikisine bakınız) RPC server options: @@ -3142,12 +3142,12 @@ mesela: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Periyodik olarak cüdanı diske yazdırmak için bir iş parçacığı çalıştır (varsayılan: 1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL seçenekleri: (SSL kurulum bilgisi için Pfennig vikisine bakınız) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL seçenekleri: (SSL kurulum bilgisi için pfennig vikisine bakınız) - Send command to Pfennig Core - Pfennig Çekirdeğine komut yolla + Send command to pfennig Core + pfennig Çekirdeğine komut yolla Send trace/debug info to console instead of debug.log file @@ -3182,8 +3182,8 @@ mesela: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com Bağlantı zaman aşım süresini milisaniye olarak belirt (varsayılan: 5000) - Start Pfennig Core Daemon - Pfennig Çekirdeği servisini başlat + Start pfennig Core Daemon + pfennig Çekirdeği servisini başlat System error: @@ -3298,12 +3298,12 @@ mesela: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com wallet.dat dosyasının yüklenmesinde hata oluştu: bozuk cüzdan - Error loading wallet.dat: Wallet requires newer version of Pfennig - wallet.dat dosyasının yüklenmesinde hata oluştu: cüzdanın daha yeni bir Pfennig sürümüne ihtiyacı var + Error loading wallet.dat: Wallet requires newer version of pfennig + wallet.dat dosyasının yüklenmesinde hata oluştu: cüzdanın daha yeni bir pfennig sürümüne ihtiyacı var - Wallet needed to be rewritten: restart Pfennig to complete - Cüzdanın tekrar yazılması gerekiyordu: işlemi tamamlamak için Pfennig'i yeniden başlatınız + Wallet needed to be rewritten: restart pfennig to complete + Cüzdanın tekrar yazılması gerekiyordu: işlemi tamamlamak için pfennig'i yeniden başlatınız Error loading wallet.dat diff --git a/src/qt/locale/bitmark_tr.ts~ b/src/qt/locale/bitmark_tr.ts~ new file mode 100644 index 0000000..9c9f372 --- /dev/null +++ b/src/qt/locale/bitmark_tr.ts~ @@ -0,0 +1,3389 @@ + + + AboutDialog + + About GameCredits Core + GameCredits Çekirdeği hakkında + + + <b>GameCredits Core</b> version + <b>GameCredits Çekirdek</b> sürümü + + + +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. + + Bu yazılım deneme safhasındadır. + + MIT/X11 yazılım lisansı kapsamında yayınlanmıştır, COPYING dosyasına ya da http://www.opensource.org/licenses/mit-license.php sayfasına bakınız. + + 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 Bitcoin Core Developers + GameCredits Çekirdeği geliştiricileri + + + (%1-bit) + (%1-bit) + + + + AddressBookPage + + 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 sistem panosuna kopyala + + + &Copy + &Kopyala + + + C&lose + K&apat + + + &Copy Address + Adresi &kopyala + + + 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 + + + &Delete + &Sil + + + Choose the address to send coins to + GameCredits yollanacak adresi seç + + + Choose the address to receive coins with + GameCredits alınacak adresi seç + + + C&hoose + S&eç + + + Sending addresses + Yollama adresleri + + + Receiving addresses + Alım adresleri + + + These are your GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Bunlar ödeme yapmak için kullanacağınız GameCredits adreslerinizdir. GameCredits yollamadan önce meblağı ve alıcı adresini daima kontrol ediniz. + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + Bunlar ödeme almak için kullanacağınız GameCredits adreslerinizdir. Her muamele için yeni bir alım adresi kullanmanız tavsiye edilir. + + + Copy &Label + &Etiketi kopyala + + + &Edit + &Düzenle + + + Export Address List + Adres listesini dışa aktar + + + Comma separated file (*.csv) + Virgülle ayrılmış değerler dosyası (*.csv) + + + Exporting Failed + Dışa aktarım başarısız oldu + + + 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) + + + + 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 GameCreditsS</b>! + Uyarı: Eğer cüzdanınızı şifrelerseniz ve parolanızı kaybederseniz, <b>TÜM BİTMARKLERİ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 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss from being stolen by malware infecting your computer. + Şifreleme işlemini tamamlamak için GameCredits şimdi kapanacaktır. Cüzdanınızı şifrelemenin, GameCreditslerinizin 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. + + + + GameCreditsGUI + + 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 + + + E&xit + &Çık + + + Quit application + Uygulamadan çık + + + Show information about GameCredits + GameCredits 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 GameCredits address + Bir GameCredits adresine GameCredits yolla + + + Modify configuration options for GameCredits + GameCredits 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... + + + GameCredits + GameCredits + + + Wallet + Cüzdan + + + &Send + &Gönder + + + &Receive + &Al + + + &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 GameCredits addresses to prove you own them + Mesajları adreslerin size ait olduğunu ispatlamak için GameCredits adresleri ile imzala + + + Verify messages to ensure they were signed with specified GameCredits addresses + Belirtilen GameCredits 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] + + + GameCredits Core + GameCredits Çekirdeği + + + Request payments (generates QR codes and gamecredits: URIs) + Ödeme talep et (QR kodu ve gamecredits URI'si oluşturur) + + + &About GameCredits Core + GameCredits Ç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 gamecredits: URI or payment request + Bir gamecredits: bağlantısı ya da ödeme talebi aç + + + &Command-line options + &Komut satırı seçenekleri + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + GameCredits komut satırı seçeneklerinin listesini elde etmek için GameCredits Çekirdeği yardım mesajını göster + + + GameCredits client + GameCredits istemcisi + + + %n active connection(s) to GameCredits network + GameCredits şebekesine %n faal bağlantıGameCredits ş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 + + + Up to date + Güncel + + + Catching up... + Aralık kapatılıyor... + + + Sent transaction + Muamele yollandı + + + Incoming transaction + Gelen muamele + + + Date: %1 +Amount: %2 +Type: %3 +Address: %4 + + Tarih: %1 +Meblağ: %2 +Tür: %3 +Adres: %4 + + + + 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. GameCredits can no longer continue safely and will quit. + Ciddi bir hata oluştu. GameCredits artık güvenli bir şekilde işlemeye devam edemez ve kapanacaktır. + + + + 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 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 + + + 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 GameCredits address. + Girilen "%1" adresi geçerli bir GameCredits 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. + + + + FreespaceChecker + + 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 + + GameCredits Core - Command-line options + GameCredits Çekirdeği - Komut satırı seçenekleri + + + GameCredits Core + GameCredits Ç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 GameCredits Core. + GameCredits Çekirdeğine hoş geldiniz. + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + Bu programı ilk kez başlattığınızdan dolayı GameCredits Çekirdeğinin verilerini nereye saklayacağını seçebilirsiniz. + + + GameCredits Core will download and store a copy of the GameCredits 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. + GameCredits çekirdeği GameCredits 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: + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Sistemde oturum açıldığında GameCredits'i otomatik olarak başlat. + + + &Start GameCredits on system login + GameCredits'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 GameCredits network through a SOCKS proxy. + GameCredits ş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 + + + &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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Yönlendiricide GameCredits 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 + + + Proxy &IP: + Vekil &İP: + + + &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 GameCredits. + Kullanıcı arayüzünün dili burada belirtilebilir. Bu ayar GameCredits tekrar başlatıldığında etkinleşecektir. + + + &Unit to show amounts in: + Meblağları göstermek için &birim: + + + Choose the default subdivision unit to show in the interface and when sending coins. + GameCredits gönderildiğinde arayüzde gösterilecek varsayılan alt birimi seçiniz. + + + Whether to show GameCredits addresses in the transaction list or not. + Muamele listesinde GameCredits 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 + + + default + varsayılan + + + none + boş + + + Confirm options reset + Seçeneklerin sıfırlanmasını teyit et + + + Client restart required to activate changes. + Değişikliklerin uygulanması için istemcinin yeniden başlatılması lazımdır. + + + Client will be shutdown, do you want to proceed? + İstemci kapanacaktır, devam etmek istiyor musunuz? + + + This change would require a client restart. + Bu değişiklik istemcinin tekrar başlatılmasını gerektirir. + + + The supplied proxy address is invalid. + Girilen vekil sunucu adresi geçersizdir. + + + + OverviewPage + + Form + Form + + + The displayed information may be out of date. Your wallet automatically synchronizes with the GameCredits 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. + + + 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> + + + out of sync + eşleşme dışı + + + + PaymentServer + + URI handling + URI yönetimi + + + URI can not be parsed! This can be caused by an invalid GameCredits address or malformed URI parameters. + URI okunamadı! Sebebi geçersiz bir GameCredits 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 gamecredits: click-to-pay handler + GameCredits 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ı + + + + QObject + + GameCredits + GameCredits + + + Error: Specified data directory "%1" does not exist. + Hata: belirtilen "%1" veri klasörü yoktur. + + + 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. + + + Error: Invalid combination of -regtest and -testnet. + Hata: -regtest ve -testnet'in geçersiz kombinasyonu. + + + GameCredits Core didn't yet exit safely... + GameCredits Çekirdeği henüz güvenli bir şekilde çıkış yapmamıştır... + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + GameCredits adresi giriniz (mesela bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + Resmi k&aydet... + + + &Copy Image + Resmi &kopyala + + + Save QR Code + QR kodu kaydet + + + 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ı + + + 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ç + + + &Console + &Konsol + + + &Network Traffic + &Şebeke trafiği + + + &Clear + &Temizle + + + Totals + Toplamlar + + + In: + İçeri: + + + Out: + Dışarı: + + + Build date + Derleme tarihi + + + Debug log file + Hata ayıklama kütük dosyası + + + Open the GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Güncel veri klasöründen GameCredits 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 GameCredits RPC console. + GameCredits 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 GameCredits network. + Talep açıldığında gösterilecek, isteğinize dayalı, ödeme talebi ile ilişkilendirilecek bir mesaj. Not: Bu mesaj ödeme ile birlikte GameCredits ş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 + GameCredits 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 + + + Clear all fields of the form. + Formdaki tüm alanları temizle. + + + Clear &All + Tümünü &temizle + + + Balance: + Bakiye: + + + Confirm the send action + Yollama etkinliğini teyit ediniz + + + S&end + G&önder + + + Confirm send coins + Gönderiyi teyit ediniz + + + %1 to %2 + %1 öğesinden %2 unsuruna + + + 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. + + + Transaction creation failed! + Muamelenin oluşturulması başarısız oldu! + + + 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 GameCredits address + Uyarı: geçersiz GameCredits 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 + + A&mount: + Mebla&ğ: + + + Pay &To: + &Şu adrese öde: + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Ödemenin gönderileceği adres (mesela bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 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 entry + Bu unsuru kaldır + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + GameCredits: URI'siyle ilişkili ve bilginiz için muameleyle saklanacak bir mesaj. Not: Bu mesaj GameCredits şebekesi üzerinden gönderilmeyecektir. + + + This is an unverified payment request. + Bu, teyit edilmemiş bir ödeme talebidir. + + + Pay To: + Şu adrese öde: + + + Memo: + Not: + + + + ShutdownWindow + + GameCredits Core is shutting down... + GameCredits Ç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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Mesajın imzalanmasında kullanılacak adres (mesela bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits address + Bu GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Mesajı imzalamak için kullanılmış olan adres (mesela bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Belirtilen GameCredits 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 GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + GameCredits adresi giriniz (mesela bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Click "Sign Message" to generate signature + İmzayı oluşturmak için "Mesaj İmzala" unsurunu tıklayın + + + 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ı. + + + + SplashScreen + + GameCredits Core + GameCredits Çekirdeği + + + The Bitcoin Core Developers + GameCredits Ç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 meblağ + + + Message + Mesaj + + + Comment + Yorum + + + Transaction ID + Muamele tanımlayıcı + + + 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 gamecredits'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 + 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 + + + + 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 + + + + TransactionTableModel + + Date + Tarih + + + Type + Tür + + + Address + Adres + + + Amount + 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 + + + Confirmed (%1 confirmations) + Doğrulandı (%1 teyit) + + + 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 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 meblağ + + + Copy address + Adresi kopyala + + + Copy label + Etiketi kopyala + + + Copy amount + Meblağı kopyala + + + Copy transaction ID + Muamele kimliğini kopyala + + + Edit label + Etiketi düzenle + + + Show transaction details + Muamele detaylarını göster + + + 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 + Meblağ + + + ID + Tanımlayıcı + + + Range: + Aralık: + + + to + ilâ + + + + WalletFrame + + No wallet has been loaded. + Hiçbir cüzdan yüklenmemiştir. + + + + WalletModel + + Send Coins + GameCredits yolla + + + + 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 + + + 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 %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ı + + + + gamecredits-core + + Usage: + Kullanım: + + + List commands + Komutları listele + + + Get help for a command + Bir komut için yardım al + + + Options: + Seçenekler: + + + Specify configuration file (default: gamecredits.conf) + Yapılandırma dosyası belirt (varsayılan: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Pid dosyası belirt (varsayılan: gamecreditsd.pid) + + + Specify data directory + Veri dizinini belirt + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Bağlantılar için dinlenecek <port> (varsayılan: 40002 ya da testnet: 50001) + + + 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: 40001 or testnet: 50000) + JSON-RPC bağlantılarını <port> üzerinde dinle (varsayılan: 40001 veya tesnet: 50000) + + + Accept command line and JSON-RPC commands + Konut satırı ve JSON-RPC komutlarını kabul et + + + GameCredits Core RPC client version + GameCredits Ç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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, şu yapılandırma dosyasında rpc parolası belirtmeniz gerekir: +%s +Aşağıdaki rastgele oluşturulan parolayı kullanmanız tavsiye edilir: +rpcuser=gamecreditsrpc +rpcpassword=%s +(bu parolayı hatırlamanız gerekli değildir) +Kullanıcı ismi ile parolanın FARKLI olmaları gerekir. +Dosya mevcut değilse, sadece sahibi için okumayla sınırlı izin ile oluşturunuz. +Sorunlar hakkında bildiri almak için alertnotify unsurunu ayarlamanız tavsiye edilir; +mesela: alertnotify=echo %%s | mail -s "GameCredits Alert" admin@foo.com + + + + 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 + + + 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 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 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) + + + 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 - gamecredits oluşturmak ya da ticari uygulamalar için kullanmayınız + + + Unable to bind to %s on this computer. GameCredits Core is probably already running. + Bu bilgisayarda %s unsuruna bağlanılamadı. GameCredits Ç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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits 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 GameCredits 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 + + + GameCredits Core Daemon + GameCredits Ç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: 40001 or testnet: 50000) + <port> numarasında JSON-RPC'ye bağlan (varsayılan: 40001 veya testnet: 50000) + + + 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) + GameCredits 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) + + + 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 gamecredits-cli): + Kullanım (önerilmemektedir, gamecredits-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 + + + Cannot obtain a lock on data directory %s. GameCredits Core is probably already running. + %s veri dizininde kilit elde edilemedi. GameCredits Ç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 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) + + + Print block on startup, if found in block index + Başlangıçta bloğu göster, blok indeksinde bulunduysa + + + Print block tree on startup (default: 0) + Başlangıçta blok ağacını göster (varsayılan: 0) + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + RPC SSL seçenekleri: (SSL kurulumu yönergeleri için GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL seçenekleri: (SSL kurulum bilgisi için GameCredits vikisine bakınız) + + + Send command to GameCredits Core + GameCredits Ç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 + + + 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 GameCredits Core Daemon + GameCredits Ç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) + + + 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! + + + 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) + + + 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) + + + 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 GameCredits + wallet.dat dosyasının yüklenmesinde hata oluştu: cüzdanın daha yeni bir GameCredits sürümüne ihtiyacı var + + + Wallet needed to be rewritten: restart GameCredits to complete + Cüzdanın tekrar yazılması gerekiyordu: işlemi tamamlamak için GameCredits'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=<meblağ> için geçersiz meblağ: '%s' + + + Invalid amount + 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ış + + + 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. + rpcpassword=<parola> şu yapılandırma dosyasında belirtilmelidir: +%s +Dosya mevcut değilse, sadece sahibi için okumayla sınırlı izin ile oluşturunuz. + + + \ No newline at end of file diff --git a/src/qt/locale/bitmark_uk.ts b/src/qt/locale/bitmark_uk.ts index c20713a..826bb68 100644 --- a/src/qt/locale/bitmark_uk.ts +++ b/src/qt/locale/bitmark_uk.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -103,11 +103,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - Це ваші Pfennig адреси для відправки платежів. Перед відправкою монети Завжди перевіряйте суму та адресу прийому. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + Це ваші pfennig адреси для відправки платежів. Перед відправкою монети Завжди перевіряйте суму та адресу прийому. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -205,7 +205,7 @@ This product includes software developed by the OpenSSL Project for use in the O Підтвердити шифрування гаманця - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! УВАГА: Якщо ви зашифруєте гаманець і забудете пароль, ви <b>ВТРАТИТЕ ВСІ СВОЇ БІТКОІНИ</b>! @@ -225,7 +225,7 @@ This product includes software developed by the OpenSSL Project for use in the O Гаманець зашифровано - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. Біткоін-клієнт буде закрито для завершення процесу шифрування. Пам'ятайте, що шифрування гаманця не може повністю захистити ваші біткоіни від крадіжки, у випадку якщо ваш комп'ютер буде інфіковано шкідливими програмами. @@ -258,7 +258,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... &Підписати повідомлення... @@ -296,8 +296,8 @@ This product includes software developed by the OpenSSL Project for use in the O Вийти - Show information about Pfennig - Показати інформацію про Pfennig + Show information about pfennig + Показати інформацію про pfennig About &Qt @@ -344,11 +344,11 @@ This product includes software developed by the OpenSSL Project for use in the O Переіндексація блоків на диску ... - Send coins to a Pfennig address + Send coins to a pfennig address Відправити монети на вказану адресу - Modify configuration options for Pfennig + Modify configuration options for pfennig Редагувати параметри @@ -372,8 +372,8 @@ This product includes software developed by the OpenSSL Project for use in the O Перевірити повідомлення... - Pfennig - Pfennig + pfennig + pfennig Wallet @@ -400,12 +400,12 @@ This product includes software developed by the OpenSSL Project for use in the O Шифрування закритих ключів, які належать вашому гаманці - Sign messages with your Pfennig addresses to prove you own them - Підтвердіть, що Ви є власником повідомлення підписавши його Вашою Pfennig-адресою + Sign messages with your pfennig addresses to prove you own them + Підтвердіть, що Ви є власником повідомлення підписавши його Вашою pfennig-адресою - Verify messages to ensure they were signed with specified Pfennig addresses - Перевірте повідомлення для впевненості, що воно підписано вказаною Pfennig-адресою + Verify messages to ensure they were signed with specified pfennig addresses + Перевірте повідомлення для впевненості, що воно підписано вказаною pfennig-адресою &File @@ -428,15 +428,15 @@ This product includes software developed by the OpenSSL Project for use in the O [тестова мережа] - Pfennig Core - Pfennig Ядро + pfennig Core + pfennig Ядро Request payments (generates QR codes and pfennig: URIs) - &About Pfennig Core + &About pfennig Core @@ -456,15 +456,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client - Pfennig-клієнт + pfennig client + pfennig-клієнт - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network %n активне з'єднання з мережею%n активні з'єднання з мережею%n активних з'єднань з мережею @@ -560,8 +560,8 @@ Address: %4 <b>Зашифрований</b> гаманець <b>заблоковано</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. - Сталася фатальна помилка. Pfennig більше не може продовжувати безпечно і піде. + A fatal error occurred. pfennig can no longer continue safely and will quit. + Сталася фатальна помилка. pfennig більше не може продовжувати безпечно і піде. @@ -845,8 +845,8 @@ Address: %4 Введена адреса «%1» вже присутня в адресній книзі. - The entered address "%1" is not a valid Pfennig address. - Введена адреса «%1» не є коректною адресою в мережі Pfennig. + The entered address "%1" is not a valid pfennig address. + Введена адреса «%1» не є коректною адресою в мережі pfennig. Could not unlock wallet. @@ -883,12 +883,12 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core - Pfennig Ядро + pfennig Core + pfennig Ядро version @@ -934,15 +934,15 @@ Address: %4 Вітання - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -954,8 +954,8 @@ Address: %4 - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" can not be created. @@ -1016,11 +1016,11 @@ Address: %4 Заплатити комісі&ю - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. Автоматично запускати гаманець при вході до системи. - &Start Pfennig on system login + &Start pfennig on system login &Запускати гаманець при вході в систему @@ -1036,7 +1036,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1096,7 +1096,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. Автоматично відкривати порт для клієнту біткоін на роутері. Працює лише якщо ваш роутер підтримує UPnP і ця функція увімкнена. @@ -1152,8 +1152,8 @@ Address: %4 Мова інтерфейсу користувача: - The user interface language can be set here. This setting will take effect after restarting Pfennig. - Встановлює мову інтерфейсу. Зміни набудуть чинності після перезапуску Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. + Встановлює мову інтерфейсу. Зміни набудуть чинності після перезапуску pfennig. &Unit to show amounts in: @@ -1164,8 +1164,8 @@ Address: %4 Виберіть одиницю вимірювання монет, яка буде відображатись в гаманці та при відправленні. - Whether to show Pfennig addresses in the transaction list or not. - Незалежно від того, щоб показати Pfennig адреси в списку транзакцій чи ні. + Whether to show pfennig addresses in the transaction list or not. + Незалежно від того, щоб показати pfennig адреси в списку транзакцій чи ні. &Display addresses in transaction list @@ -1219,8 +1219,8 @@ Address: %4 Форма - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig network after a connection is established, but this process has not completed yet. - Показана інформація вже може бути застарілою. Ваш гаманець буде автоматично синхронізовано з мережею Pfennig після встановлення підключення, але цей процес ще не завершено. + The displayed information may be out of date. Your wallet automatically synchronizes with the pfennig network after a connection is established, but this process has not completed yet. + Показана інформація вже може бути застарілою. Ваш гаманець буде автоматично синхронізовано з мережею pfennig після встановлення підключення, але цей процес ще не завершено. Wallet @@ -1274,8 +1274,8 @@ Address: %4 Обробка URI - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. - Неможливо обробити URI! Це може бути викликано неправильною Pfennig-адресою, чи невірними параметрами URI. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. + Неможливо обробити URI! Це може бути викликано неправильною pfennig-адресою, чи невірними параметрами URI. Requested payment amount of %1 is too small (considered dust). @@ -1341,8 +1341,8 @@ Address: %4 QObject - Pfennig - Pfennig + pfennig + pfennig Error: Specified data directory "%1" does not exist. @@ -1357,12 +1357,12 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Введіть адресу Pfennig (наприклад bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Введіть адресу pfennig (наприклад bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1483,16 +1483,16 @@ Address: %4 Файл звіту зневадження - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. - Відкрийте налагодження файл журналу Pfennig з поточного каталогу даних. Це може зайняти кілька секунд для великих файлів журналів. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Відкрийте налагодження файл журналу pfennig з поточного каталогу даних. Це може зайняти кілька секунд для великих файлів журналів. Clear console Очистити консоль - Welcome to the Pfennig RPC console. - Вітаємо у консолі Pfennig RPC. + Welcome to the pfennig RPC console. + Вітаємо у консолі pfennig RPC. Use up and down arrows to navigate history, and <b>Ctrl-L</b> to clear screen. @@ -1554,7 +1554,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1867,7 +1867,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1954,7 +1954,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1973,7 +1973,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -1997,7 +1997,7 @@ Address: %4 The address to sign the message with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Введіть адресу Pfennig (наприклад bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Введіть адресу pfennig (наприклад bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Choose previously used address @@ -2028,7 +2028,7 @@ Address: %4 Копіювати поточну сигнатуру до системного буферу обміну - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address Підпишіть повідомлення щоб довести, що ви є власником цієї адреси @@ -2053,11 +2053,11 @@ Address: %4 The address the message was signed with (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Введіть адресу Pfennig (наприклад bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Введіть адресу pfennig (наприклад bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address - Перевірте повідомлення для впевненості, що воно підписано вказаною Pfennig-адресою + Verify the message to ensure it was signed with the specified pfennig address + Перевірте повідомлення для впевненості, що воно підписано вказаною pfennig-адресою Verify &Message @@ -2068,8 +2068,8 @@ Address: %4 Скинути всі поля перевірки повідомлення - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Введіть адресу Pfennig (наприклад bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Введіть адресу pfennig (наприклад bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) Click "Sign Message" to generate signature @@ -2127,8 +2127,8 @@ Address: %4 SplashScreen - Pfennig Core - Pfennig Ядро + pfennig Core + pfennig Ядро The Bitcoin Core Developers @@ -2622,8 +2622,8 @@ Address: %4 Вкажіть робочий каталог - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - Чекати на з'єднання на <port> (типово: P2PPORT або тестова мережа: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + Чекати на з'єднання на <port> (типово: 40002 або тестова мережа: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2650,15 +2650,15 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - Прослуховувати <port> для JSON-RPC-з'єднань (типово: RPCPORT або тестова мережа: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + Прослуховувати <port> для JSON-RPC-з'єднань (типово: 40001 або тестова мережа: 50000) Accept command line and JSON-RPC commands Приймати команди із командного рядка та команди JSON-RPC - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2683,7 +2683,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2756,7 +2756,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Це тест збірки попередньою версією - використовуйте на свій страх і ризик - не використовувати для гірничодобувних або торгових додатків - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2768,8 +2768,8 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Увага: встановлено занадто велику комісію (-paytxfee). Комісія зніматиметься кожен раз коли ви проводитимете транзакції. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. - Увага: будь ласка, перевірте дату і час на своєму комп'ютері. Якщо ваш годинник йде неправильно, Pfennig може працювати некоректно. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. + Увага: будь ласка, перевірте дату і час на своєму комп'ютері. Якщо ваш годинник йде неправильно, pfennig може працювати некоректно. Warning: The network does not appear to fully agree! Some miners appear to be experiencing issues. @@ -2804,7 +2804,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Спроба відновити закриті ключі з пошкодженого wallet.dat - Pfennig Core Daemon + pfennig Core Daemon @@ -2824,7 +2824,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3048,7 +3048,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Імпорт блоків з зовнішнього файлу blk000??.dat - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3112,7 +3112,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3132,11 +3132,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) - Параметри SSL: (див. Pfennig Wiki для налаштування SSL) + SSL options: (see the pfennig Wiki for SSL setup instructions) + Параметри SSL: (див. pfennig Wiki для налаштування SSL) - Send command to Pfennig Core + Send command to pfennig Core @@ -3172,7 +3172,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Вказати тайм-аут підключення у мілісекундах (типово: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3288,11 +3288,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. Помилка при завантаженні wallet.dat: Гаманець пошкоджено - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig Помилка при завантаженні wallet.dat: Гаманець потребує новішої версії Біткоін-клієнта - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete Потрібно перезаписати гаманець: перезапустіть Біткоін-клієнт для завершення diff --git a/src/qt/locale/bitmark_uk.ts~ b/src/qt/locale/bitmark_uk.ts~ new file mode 100644 index 0000000..6b969e4 --- /dev/null +++ b/src/qt/locale/bitmark_uk.ts~ @@ -0,0 +1,3379 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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, додаткова інформація міститься у файлі COPYING, а також за адресою http://www.opensource.org/licenses/mit-license.php. + +Цей продукт включає в себе програмне забезпечення, розроблене в рамках проекту OpenSSL (http://www.openssl.org/), криптографічне програмне забезпечення, написане Еріком Янгом (eay@cryptsoft.com), та функції для роботи з UPnP, написані Томасом Бернардом. + + + Copyright + Авторське право + + + The Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + Це ваші GameCredits адреси для відправки платежів. Перед відправкою монети Завжди перевіряйте суму та адресу прийому. + + + These are your GameCredits 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 GameCreditsS</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 + Гаманець зашифровано + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + Пароль було успішно змінено. + + + + GameCreditsGUI + + Sign &message... + &Підписати повідомлення... + + + Synchronizing with network... + Синхронізація з мережею... + + + &Overview + &Огляд + + + Node + + + + Show general overview of wallet + Показати загальний огляд гаманця + + + &Transactions + Транзакції + + + Browse transaction history + Переглянути історію транзакцій + + + E&xit + &Вихід + + + Quit application + Вийти + + + Show information about GameCredits + Показати інформацію про GameCredits + + + 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 GameCredits address + Відправити монети на вказану адресу + + + Modify configuration options for GameCredits + Редагувати параметри + + + Backup wallet to another location + Резервне копіювання гаманця в інше місце + + + Change the passphrase used for wallet encryption + Змінити пароль, який використовується для шифрування гаманця + + + &Debug window + Вікно зневадження + + + Open debugging and diagnostic console + Відкрити консоль зневадження і діагностики + + + &Verify message... + Перевірити повідомлення... + + + GameCredits + GameCredits + + + Wallet + Гаманець + + + &Send + &Відправити + + + &Receive + &Отримати + + + &Show / Hide + Показати / Приховати + + + Show or hide the main Window + Показує або приховує головне вікно + + + Encrypt the private keys that belong to your wallet + Шифрування закритих ключів, які належать вашому гаманці + + + Sign messages with your GameCredits addresses to prove you own them + Підтвердіть, що Ви є власником повідомлення підписавши його Вашою GameCredits-адресою + + + Verify messages to ensure they were signed with specified GameCredits addresses + Перевірте повідомлення для впевненості, що воно підписано вказаною GameCredits-адресою + + + &File + &Файл + + + &Settings + &Налаштування + + + &Help + &Довідка + + + Tabs toolbar + Панель вкладок + + + [testnet] + [тестова мережа] + + + GameCredits Core + GameCredits Ядро + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + GameCredits-клієнт + + + %n active connection(s) to GameCredits 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 + Інформація + + + 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. GameCredits can no longer continue safely and will quit. + Сталася фатальна помилка. GameCredits більше не може продовжувати безпечно і піде. + + + + 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 GameCredits address. + Введена адреса «%1» не є коректною адресою в мережі GameCredits. + + + 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 + + GameCredits Core - Command-line options + + + + GameCredits Core + GameCredits Ядро + + + 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + GameCredits + + + 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 GameCredits after logging in to the system. + Автоматично запускати гаманець при вході до системи. + + + &Start GameCredits on system login + &Запускати гаманець при вході в систему + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + Автоматично відкривати порт для клієнту біткоін на роутері. Працює лише якщо ваш роутер підтримує 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 GameCredits. + Встановлює мову інтерфейсу. Зміни набудуть чинності після перезапуску GameCredits. + + + &Unit to show amounts in: + В&имірювати монети в: + + + Choose the default subdivision unit to show in the interface and when sending coins. + Виберіть одиницю вимірювання монет, яка буде відображатись в гаманці та при відправленні. + + + Whether to show GameCredits addresses in the transaction list or not. + Незалежно від того, щоб показати GameCredits адреси в списку транзакцій чи ні. + + + &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 GameCredits network after a connection is established, but this process has not completed yet. + Показана інформація вже може бути застарілою. Ваш гаманець буде автоматично синхронізовано з мережею GameCredits після встановлення підключення, але цей процес ще не завершено. + + + 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 GameCredits address or malformed URI parameters. + Неможливо обробити URI! Це може бути викликано неправильною GameCredits-адресою, чи невірними параметрами URI. + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + GameCredits + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Введіть адресу GameCredits (наприклад bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + &Зберегти зображення... + + + &Copy Image + &Копіювати зображення + + + Save QR Code + Зберегти QR-код + + + 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 + Кількість підключень + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + Відкрийте налагодження файл журналу GameCredits з поточного каталогу даних. Це може зайняти кілька секунд для великих файлів журналів. + + + Clear console + Очистити консоль + + + Welcome to the GameCredits RPC console. + Вітаємо у консолі GameCredits 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 GameCredits 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 + Дод&ати одержувача + + + 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. + Сума перевищить ваш баланс, якщо комісія %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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Звернення до відправити платіж на (наприклад bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Enter a label for this address to add it to your address book + Введіть мітку для цієї адреси для додавання її в адресну книгу + + + &Label: + &Мітка: + + + Choose previously used address + Обрати ранiш використовувану адресу + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + Нотатка: + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Введіть адресу GameCredits (наприклад bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Введіть адресу GameCredits (наприклад bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + Перевірте повідомлення для впевненості, що воно підписано вказаною GameCredits-адресою + + + Verify &Message + Перевірити повідомлення + + + Reset all verify message fields + Скинути всі поля перевірки повідомлення + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Введіть адресу GameCredits (наприклад bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + GameCredits Ядро + + + The Bitcoin 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 транзакції + + + 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 + невідомий + + + + 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 + Копіювати 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) + Данi гаманця (*.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 + Успішне створення резервної копії + + + + gamecredits-core + + Usage: + Використання: + + + List commands + Список команд + + + Get help for a command + Отримати довідку по команді + + + Options: + Параметри: + + + Specify configuration file (default: gamecredits.conf) + Вкажіть файл конфігурації (типово: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + Вкажіть pid-файл (типово: gamecreditsd.pid) + + + Specify data directory + Вкажіть робочий каталог + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + Чекати на з'єднання на <port> (типово: 40002 або тестова мережа: 50001) + + + 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: 40001 or testnet: 50000) + Прослуховувати <port> для JSON-RPC-з'єднань (типово: 40001 або тестова мережа: 50000) + + + Accept command line and JSON-RPC commands + Приймати команди із командного рядка та команди JSON-RPC + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits 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 + Прив'язка до даного адресою і завжди слухати на ньому. Використовуйте [господаря]: позначення порту для 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! + + + + 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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits will not work properly. + Увага: будь ласка, перевірте дату і час на своєму комп'ютері. Якщо ваш годинник йде неправильно, GameCredits може працювати некоректно. + + + 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 + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 = всі) + + + 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 gamecredits-cli): + Використання (застаріле, використовуйте gamecredits-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 + + + Cannot obtain a lock on data directory %s. GameCredits 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) + Підтримувати індекс повний транзакцій (за замовчуванням: 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 + + + + Print block tree on startup (default: 0) + + + + RPC SSL options: (see the GameCredits 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 GameCredits Wiki for SSL setup instructions) + Параметри SSL: (див. GameCredits Wiki для налаштування SSL) + + + Send command to GameCredits 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 GameCredits 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) + + + 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 на цьому комп'ютері (bind returned error %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 GameCredits + Помилка при завантаженні wallet.dat: Гаманець потребує новішої версії Біткоін-клієнта + + + Wallet needed to be rewritten: restart GameCredits 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 + Додати вузол до підключення і лишити його відкритим + + + 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/bitmark_ur_PK.ts b/src/qt/locale/bitmark_ur_PK.ts index 7cf7834..72ee4cc 100644 --- a/src/qt/locale/bitmark_ur_PK.ts +++ b/src/qt/locale/bitmark_ur_PK.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Pfennig + Show information about pfennig @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_ur_PK.ts~ b/src/qt/locale/bitmark_ur_PK.ts~ new file mode 100644 index 0000000..a483f83 --- /dev/null +++ b/src/qt/locale/bitmark_ur_PK.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about GameCredits + + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_uz@Cyrl.ts b/src/qt/locale/bitmark_uz@Cyrl.ts index 5437cff..05d25da 100644 --- a/src/qt/locale/bitmark_uz@Cyrl.ts +++ b/src/qt/locale/bitmark_uz@Cyrl.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Pfennig + Show information about pfennig @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_uz@Cyrl.ts~ b/src/qt/locale/bitmark_uz@Cyrl.ts~ new file mode 100644 index 0000000..b80e4b6 --- /dev/null +++ b/src/qt/locale/bitmark_uz@Cyrl.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about GameCredits + + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_vi.ts b/src/qt/locale/bitmark_vi.ts index 414a06c..7daa810 100644 --- a/src/qt/locale/bitmark_vi.ts +++ b/src/qt/locale/bitmark_vi.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Pfennig + Show information about pfennig @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_vi.ts~ b/src/qt/locale/bitmark_vi.ts~ new file mode 100644 index 0000000..7e1fea1 --- /dev/null +++ b/src/qt/locale/bitmark_vi.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about GameCredits + + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_vi_VN.ts b/src/qt/locale/bitmark_vi_VN.ts index 58e9fbb..8ed72f1 100644 --- a/src/qt/locale/bitmark_vi_VN.ts +++ b/src/qt/locale/bitmark_vi_VN.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Pfennig + Show information about pfennig @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_vi_VN.ts~ b/src/qt/locale/bitmark_vi_VN.ts~ new file mode 100644 index 0000000..699fd2f --- /dev/null +++ b/src/qt/locale/bitmark_vi_VN.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about GameCredits + + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_zh_CN.ts b/src/qt/locale/bitmark_zh_CN.ts index 69909ad..87247d9 100644 --- a/src/qt/locale/bitmark_zh_CN.ts +++ b/src/qt/locale/bitmark_zh_CN.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core 关于比特币核心 - <b>Pfennig Core</b> version + <b>pfennig Core</b> version <b>比特币核心</b> 版本 @@ -29,7 +29,7 @@ This product includes software developed by the OpenSSL Project for use in the O The Bitcoin Core Developers - Pfennig Core 的开发者 + pfennig Core 的开发者 (%1-bit) @@ -103,11 +103,11 @@ This product includes software developed by the OpenSSL Project for use in the O 正在接收地址 - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. 这是您用来付款的比特币地址。在付款前,请总是核实付款金额和收款地址。 - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. 这些都是您的比特币地址,可用于收款。建议对每笔交易都使用一个新的地址。 @@ -205,7 +205,7 @@ This product includes software developed by the OpenSSL Project for use in the O 确认加密钱包 - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! 警告:如果您加密了您的钱包,但是忘记了密码,你将会<b>丢失所有的比特币</b>! @@ -225,7 +225,7 @@ This product includes software developed by the OpenSSL Project for use in the O 钱包已加密 - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. 比特币客户端将关闭软件以完成加密过程。请您谨记:钱包加密并不是万能的,电脑中毒等原因仍可能导致您的比特币意外丢失。 @@ -258,7 +258,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... 消息签名(&M)... @@ -296,7 +296,7 @@ This product includes software developed by the OpenSSL Project for use in the O 退出程序 - Show information about Pfennig + Show information about pfennig 显示比特币的相关信息 @@ -344,11 +344,11 @@ This product includes software developed by the OpenSSL Project for use in the O 正在为数据块建立索引... - Send coins to a Pfennig address + Send coins to a pfennig address 向一个比特币地址发送比特币 - Modify configuration options for Pfennig + Modify configuration options for pfennig 设置选项 @@ -372,7 +372,7 @@ This product includes software developed by the OpenSSL Project for use in the O 验证消息(&V)... - Pfennig + pfennig 比特币 @@ -400,11 +400,11 @@ This product includes software developed by the OpenSSL Project for use in the O 对钱包中的私钥加密 - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them 用比特币地址关联的私钥为消息签名,以证明您拥有这个比特币地址 - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses 校验消息,确保该消息是由指定的比特币地址所有者签名的 @@ -428,7 +428,7 @@ This product includes software developed by the OpenSSL Project for use in the O [测试网络] - Pfennig Core + pfennig Core 比特币核心 @@ -436,7 +436,7 @@ This product includes software developed by the OpenSSL Project for use in the O 请求支付(生成二维码和 pfennig: URI) - &About Pfennig Core + &About pfennig Core 关于比特币核心(&A) @@ -456,15 +456,15 @@ This product includes software developed by the OpenSSL Project for use in the O &命令行 选项 - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options 显示比特币核心 程序帮助信息,获取可用的命令行选项 - Pfennig client + pfennig client 比特币客户端 - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network %n条到比特币网络的活动连接 @@ -560,7 +560,7 @@ Address: %4 钱包已被<b>加密</b>,当前为<b>锁定</b>状态 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. 发生严重错误。 @@ -845,7 +845,7 @@ Address: %4 输入的地址“%1”已经存在于地址簿中。 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. 您输入的“%1”不是有效的比特币地址。 @@ -883,11 +883,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options 比特币核心程序 - 命令行选项 - Pfennig Core + pfennig Core 比特币核心 @@ -935,15 +935,15 @@ Address: %4 欢迎 - Welcome to Pfennig Core. + Welcome to pfennig Core. 欢迎使用 比特币核心 程序。 - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. 由于这是第一次运行 比特币核心 程序,您可以选择数据存储目录。 - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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的存储空间,随着时间推移会需要更多的存储空间。钱包文件也储存在该目录。 @@ -955,7 +955,7 @@ Address: %4 使用自定义的数据目录: - Pfennig + pfennig 比特币 @@ -1017,11 +1017,11 @@ Address: %4 支付交易费用(&F) - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. 登录系统后自动开启比特币客户端 - &Start Pfennig on system login + &Start pfennig on system login 系统启动时运行(&S) @@ -1037,7 +1037,7 @@ Address: %4 脚本&验证 进程数 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. 通过 SOCKS 代理连接到比特币网络。 @@ -1097,7 +1097,7 @@ Address: %4 &选择未经确认的花费 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. 自动在路由器中打开比特币端口。只有当您的路由器开启了 UPnP 选项时此功能才有效。 @@ -1153,7 +1153,7 @@ Address: %4 用户界面语言(&L): - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. 在这里设置用户界面的语言。设置将在客户端重启后生效。 @@ -1165,7 +1165,7 @@ Address: %4 选择比特币单位。 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. 是否需要在交易清单中显示比特币地址。 @@ -1220,7 +1220,7 @@ Address: %4 表单 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. 现在显示的消息可能是过期的. 在连接上比特币网络节点后,您的钱包将自动与网络同步,但是这个过程还没有完成。 @@ -1275,7 +1275,7 @@ Address: %4 URI 处理 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. URI无法解析!原因可能是比特币地址不正确,或者URI参数错误。 @@ -1342,7 +1342,7 @@ Address: %4 QObject - Pfennig + pfennig 比特币 @@ -1358,11 +1358,11 @@ Address: %4 错误:无效的 -regtest 与 -testnet 结合体。 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... 比特币核心钱包没有安全退出.... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) 请输入比特币地址(例如: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1484,7 +1484,7 @@ Address: %4 调试日志文件 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. 打开当前目录中的调试日志文件。日志文件大的话可能要等上几秒钟。 @@ -1492,7 +1492,7 @@ Address: %4 清空控制台 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. 欢迎来到 RPC 控制台。 @@ -1555,7 +1555,7 @@ Address: %4 重用现有的接收地址(不推荐) - 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 Pfennig network. + 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 pfennig network. 可在付款请求上备注一条信息,在打开付款请求时可以看到。注意:该消息不是通过比特币网络传送。 @@ -1868,7 +1868,7 @@ Address: %4 错误:该交易被拒绝!发生这种错误的原因可能是:钱包中的比特币已经被用掉,有可能您复制了wallet.dat钱包文件,然后用复制的钱包文件支付了比特币,但是这个钱包文件中没有记录。 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address 警告:无效的比特币地址 @@ -1955,7 +1955,7 @@ Address: %4 请为此地址输入一个标签以将它加入用过的地址列表 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. pfennig:URI 附带的备注信息,将会和交易一起存储,备查。 注意:该消息不会通过比特币网络传输。 @@ -1974,7 +1974,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... 比特币核心正在关机... @@ -2029,7 +2029,7 @@ Address: %4 复制当前签名至剪切板 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address 签名消息,证明这个地址属于您。 @@ -2057,7 +2057,7 @@ Address: %4 用于签名消息的地址(例如: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address 验证消息,确保消息是由指定的比特币地址签名过的。 @@ -2069,7 +2069,7 @@ Address: %4 清空所有验证消息栏 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) 请输入比特币地址 (例如: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2128,12 +2128,12 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core 比特币核心 The Bitcoin Core Developers - Pfennig Core 的开发者 + pfennig Core 的开发者 [testnet] @@ -2629,8 +2629,8 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - 监听端口连接 <port>(缺省: P2PPORT 或测试网络: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + 监听端口连接 <port>(缺省: 40002 或测试网络: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2657,8 +2657,8 @@ Address: %4 设置RPC监听端口%u时发生错误, IPv4:%s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - JSON-RPC连接监听端口<port> (缺省:RPCPORT testnet:1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + JSON-RPC连接监听端口<port> (缺省:40001 testnet:50000) Accept command line and JSON-RPC commands @@ -2666,7 +2666,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version 比特币核心钱包RPC客户端版本 @@ -2694,7 +2694,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, 您必须在配置文件设置rpcpassword: %s @@ -2705,7 +2705,7 @@ rpcpassword=%s 用户名和密码 必! 须! 不一样。 如果配置文件不存在,请自行建立一个只有所有者拥有只读权限的文件。 推荐您开启提示通知以便收到错误通知, -像这样: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com +像这样: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2777,7 +2777,7 @@ rpcpassword=%s 这是测试用的预发布版本 - 请谨慎使用 - 不要用来挖矿,或者在正式商用环境下使用 - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. 无法 %s的绑定到电脑上,比特币核心钱包可能已经在运行。 @@ -2789,7 +2789,7 @@ rpcpassword=%s 警告:-paytxfee 交易费设置得太高了!每笔交易都将支付交易费。 - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. 警告:请检查电脑的日期时间设置是否正确!时间错误可能会导致比特币客户端运行异常。 @@ -2825,7 +2825,7 @@ rpcpassword=%s 尝试从损坏的钱包文件wallet.dat中恢复私钥 - Pfennig Core Daemon + pfennig Core Daemon 比特币核心 守护程序 @@ -2845,8 +2845,8 @@ rpcpassword=%s 通过Socks代理连接: - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - 连接到 JSON-RPC 于 <port>(默认: RPCPORT,或测试网络: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + 连接到 JSON-RPC 于 <port>(默认: 40001,或测试网络: 50000) Connection options: @@ -3069,7 +3069,7 @@ rpcpassword=%s 从blk000??.dat文件导入数据块 - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. 无法获取数据目录的 %s. 比特币核心钱包可能已经在运行. @@ -3133,7 +3133,7 @@ rpcpassword=%s 启动时打印区块树 (默认值: 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) RPC SSL选项:(见有关比特币设置用于SSL说明的维基百科) @@ -3153,11 +3153,11 @@ rpcpassword=%s 运行一个程序,定时清理钱包 (默认值:1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL选项:(参见Pfennig Wiki关于SSL设置栏目) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL选项:(参见pfennig Wiki关于SSL设置栏目) - Send command to Pfennig Core + Send command to pfennig Core 发送指令到比特币核心钱包 @@ -3193,7 +3193,7 @@ rpcpassword=%s 设置连接超时时间(缺省:5000毫秒) - Start Pfennig Core Daemon + Start pfennig Core Daemon 开启比特币核心钱包守护进程 @@ -3314,12 +3314,12 @@ rpcpassword=%s wallet.dat 钱包文件加载出错:钱包损坏 - Error loading wallet.dat: Wallet requires newer version of Pfennig - wallet.dat 钱包文件加载错误:请升级到最新版Pfennig客户端 + Error loading wallet.dat: Wallet requires newer version of pfennig + wallet.dat 钱包文件加载错误:请升级到最新版pfennig客户端 - Wallet needed to be rewritten: restart Pfennig to complete - 钱包文件需要被重写:请退出并重新启动Pfennig客户端 + Wallet needed to be rewritten: restart pfennig to complete + 钱包文件需要被重写:请退出并重新启动pfennig客户端 Error loading wallet.dat diff --git a/src/qt/locale/bitmark_zh_CN.ts~ b/src/qt/locale/bitmark_zh_CN.ts~ new file mode 100644 index 0000000..587432c --- /dev/null +++ b/src/qt/locale/bitmark_zh_CN.ts~ @@ -0,0 +1,3405 @@ + + + AboutDialog + + About GameCredits Core + 关于比特币核心 + + + <b>GameCredits 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. + +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 Bitcoin Core Developers + GameCredits Core 的开发者 + + + (%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) + + + C&lose + 关闭(&C) + + + &Copy Address + 复制地址(&C) + + + Delete the currently selected address from the list + 从列表中删除选中的地址 + + + Export the data in the current tab to a file + 导出当前数据到文件 + + + &Export + 导出(&E) + + + &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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + 这是您用来付款的比特币地址。在付款前,请总是核实付款金额和收款地址。 + + + These are your GameCredits addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + 这些都是您的比特币地址,可用于收款。建议对每笔交易都使用一个新的地址。 + + + Copy &Label + 复制标签(&L) + + + &Edit + 编辑(&E) + + + Export Address List + 导出地址列表 + + + Comma separated file (*.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>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 GameCreditsS</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 + 钱包已加密 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + 修改钱包密码成功。 + + + + GameCreditsGUI + + Sign &message... + 消息签名(&M)... + + + Synchronizing with network... + 正在与网络同步... + + + &Overview + 概况(&O) + + + Node + 节点 + + + Show general overview of wallet + 显示钱包概况 + + + &Transactions + 交易记录(&T) + + + Browse transaction history + 查看交易历史 + + + E&xit + 退出(&X) + + + Quit application + 退出程序 + + + Show information about GameCredits + 显示比特币的相关信息 + + + About &Qt + 关于 &Qt + + + Show information about 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 GameCredits address + 向一个比特币地址发送比特币 + + + Modify configuration options for GameCredits + 设置选项 + + + Backup wallet to another location + 备份钱包到其他文件夹 + + + Change the passphrase used for wallet encryption + 更改钱包加密口令 + + + &Debug window + 调试窗口(&D) + + + Open debugging and diagnostic console + 打开调试和诊断控制台 + + + &Verify message... + 验证消息(&V)... + + + GameCredits + 比特币 + + + 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 GameCredits addresses to prove you own them + 用比特币地址关联的私钥为消息签名,以证明您拥有这个比特币地址 + + + Verify messages to ensure they were signed with specified GameCredits addresses + 校验消息,确保该消息是由指定的比特币地址所有者签名的 + + + &File + 文件(&F) + + + &Settings + 设置(&S) + + + &Help + 帮助(&H) + + + Tabs toolbar + 分页工具栏 + + + [testnet] + [测试网络] + + + GameCredits Core + 比特币核心 + + + Request payments (generates QR codes and gamecredits: URIs) + 请求支付(生成二维码和 gamecredits: URI) + + + &About GameCredits Core + 关于比特币核心(&A) + + + Show the list of used sending addresses and labels + 显示用过的发送地址和标签的列表 + + + Show the list of used receiving addresses and labels + 显示用过的接收地址和标签的列表 + + + Open a gamecredits: URI or payment request + 打开一个比特币:URI 或支付请求 + + + &Command-line options + &命令行 选项 + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + 显示比特币核心 程序帮助信息,获取可用的命令行选项 + + + GameCredits client + 比特币客户端 + + + %n active connection(s) to GameCredits 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 小时前 + + + %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. GameCredits 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. + 这意味着将对交易收取 %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 list entry + 与此地址相关的标签项 + + + 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 GameCredits 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 + + GameCredits Core - Command-line options + 比特币核心程序 - 命令行选项 + + + GameCredits Core + 比特币核心 + + + version + 版本 + + + Usage: + 使用: + + + command-line options + 命令行选项 + + + UI options + UI选项 + + + Set language, for example "de_DE" (default: system locale) + 设置语言, 例如“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 GameCredits Core. + 欢迎使用 比特币核心 程序。 + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + 由于这是第一次运行 比特币核心 程序,您可以选择数据存储目录。 + + + GameCredits Core will download and store a copy of the GameCredits 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: + 使用自定义的数据目录: + + + GameCredits + 比特币 + + + 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 GameCredits after logging in to the system. + 登录系统后自动开启比特币客户端 + + + &Start GameCredits on system login + 系统启动时运行(&S) + + + Size of &database cache + 数据库缓存大小(&D) + + + MB + MB + + + Number of script &verification threads + 脚本&验证 进程数 + + + Connect to the GameCredits 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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + 自动在路由器中打开比特币端口。只有当您的路由器开启了 UPnP 选项时此功能才有效。 + + + Map port using &UPnP + 使用 &UPnP 映射端口 + + + Proxy &IP: + 代理服务器 &IP: + + + &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 GameCredits. + 在这里设置用户界面的语言。设置将在客户端重启后生效。 + + + &Unit to show amounts in: + 比特币金额单位(&U): + + + Choose the default subdivision unit to show in the interface and when sending coins. + 选择比特币单位。 + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + URI无法解析!原因可能是比特币地址不正确,或者URI参数错误。 + + + Requested payment amount of %1 is too small (considered dust). + 请求支付的金额 %1 太小(就像尘埃)。 + + + Payment request error + 支付请求出错 + + + Cannot start gamecredits: 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 + 网络请求出错 + + + + QObject + + GameCredits + 比特币 + + + Error: Specified data directory "%1" does not exist. + 错误:指定的数据目录“%1”不存在。 + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + 错误: 无法解析配置文件: %1. 只有钥匙=重要的私匙. + + + Error: Invalid combination of -regtest and -testnet. + 错误:无效的 -regtest 与 -testnet 结合体。 + + + GameCredits Core didn't yet exit safely... + 比特币核心钱包没有安全退出.... + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 请输入比特币地址(例如: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + 保存图片(&S)... + + + &Copy Image + 复制图片(&C) + + + Save QR Code + 保存二维码 + + + PNG Image (*.png) + PNG图片(*.png) + + + + RPCConsole + + Client name + 客户端名称 + + + N/A + 不可用 + + + Client version + 客户端版本 + + + &Information + 信息(&I) + + + 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 + 打开(&O) + + + &Console + 控制台(&C) + + + &Network Traffic + 网络流量(&N) + + + &Clear + 清除(&C) + + + Totals + 总数 + + + In: + 输入: + + + Out: + 输出: + + + Build date + 创建时间 + + + Debug log file + 调试日志文件 + + + Open the GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + 打开当前目录中的调试日志文件。日志文件大的话可能要等上几秒钟。 + + + Clear console + 清空控制台 + + + Welcome to the GameCredits 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 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 GameCredits 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) + + + 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 + 复制字节 + + + 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 GameCredits 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: + 金额(&M) + + + Pay &To: + 付给(&T): + + + The address to send the payment to (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 付款给这个地址 (例如 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Enter a label for this address to add it to your address book + 为这个地址输入一个标签,以便将它添加到您的地址簿 + + + &Label: + 标签(&L): + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + gamecredits:URI 附带的备注信息,将会和交易一起存储,备查。 注意:该消息不会通过比特币网络传输。 + + + This is an unverified payment request. + 这是个非有效的支付请求。 + + + Pay To: + 支付给: + + + Memo: + 便条: + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 用于签名消息的地址(例如: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 用于签名消息的地址(例如: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + 验证消息,确保消息是由指定的比特币地址签名过的。 + + + Verify &Message + 验证消息签名(&M) + + + Reset all verify message fields + 清空所有验证消息栏 + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 请输入比特币地址 (例如: bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + 比特币核心 + + + The Bitcoin Core Developers + GameCredits 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) + Open for %n more block + + + 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) + Open for %n more block + + + 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 + 复制交易编号 + + + 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 + ID + + + 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. + 尝试保存钱包数据至 %1 时发生错误。 + + + The wallet data was successfully saved to %1. + 钱包数据成功保存至 %1 。 + + + Backup Successful + 备份成功 + + + + gamecredits-core + + Usage: + 使用: + + + List commands + 列出命令 + + + + Get help for a command + 获得某条命令的帮助 + + + + Options: + 选项: + + + + Specify configuration file (default: gamecredits.conf) + 指定配置文件 (默认为 gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + 指定 pid 文件 (默认为 gamecreditsd.pid) + + + + Specify data directory + 指定数据目录 + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + 监听端口连接 <port>(缺省: 40002 或测试网络: 50001) + + + 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: 40001 or testnet: 50000) + JSON-RPC连接监听端口<port> (缺省:40001 testnet:50000) + + + Accept command line and JSON-RPC commands + 接受命令行和 JSON-RPC 命令 + + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, 您必须在配置文件设置rpcpassword: + %s +建议您使用下面的随机密码: +rpcuser=gamecreditsrpc +rpcpassword=%s +(您无需记住此密码) +用户名和密码 必! 须! 不一样。 +如果配置文件不存在,请自行建立一个只有所有者拥有只读权限的文件。 +推荐您开启提示通知以便收到错误通知, +像这样: alertnotify=echo %%s | mail -s "GameCredits 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监听端口 %u 失败,返回到IPv4模式: %s + + + Bind to given address and always listen on it. Use [host]:port notation for IPv6 + 绑定指定的IP地址开始监听。IPv6地址请使用[host]:port 格式 + + + 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 wallet transaction changes (%s in cmd is replaced by TxID) + 当最佳区块变化时执行命令 (命令行中的 %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) + 从缓冲池清理磁盘数据库活动日志每<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. GameCredits 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: Please check that your computer's date and time are correct! If your clock is wrong GameCredits 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中恢复私钥 + + + GameCredits 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: 40001 or testnet: 50000) + 连接到 JSON-RPC 于 <port>(默认: 40001,或测试网络: 50000) + + + 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 选项) + + + 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... + 导入中... + + + 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 gamecredits-cli): + 用法(不推荐,请使用 gamecredits-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. GameCredits 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 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) + + + Print block on startup, if found in block index + 如果在搜索区块中找到,请启动打印区块 + + + Print block tree on startup (default: 0) + 启动时打印区块树 (默认值: 0) + + + RPC SSL options: (see the GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL选项:(参见GameCredits Wiki关于SSL设置栏目) + + + Send command to GameCredits 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) + 设置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 GameCredits 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... + 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地址为 <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) 连接 + + + 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 GameCredits + wallet.dat 钱包文件加载错误:请升级到最新版GameCredits客户端 + + + Wallet needed to be rewritten: restart GameCredits to complete + 钱包文件需要被重写:请退出并重新启动GameCredits客户端 + + + 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' + 无法解析 -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/bitmark_zh_HK.ts b/src/qt/locale/bitmark_zh_HK.ts index d6b8981..166877f 100644 --- a/src/qt/locale/bitmark_zh_HK.ts +++ b/src/qt/locale/bitmark_zh_HK.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core - <b>Pfennig Core</b> version + <b>pfennig Core</b> version @@ -98,11 +98,11 @@ This product includes software developed by the OpenSSL Project for use in the O - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. @@ -200,7 +200,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! @@ -220,7 +220,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. @@ -253,7 +253,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... @@ -291,7 +291,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Show information about Pfennig + Show information about pfennig @@ -339,11 +339,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Send coins to a Pfennig address + Send coins to a pfennig address - Modify configuration options for Pfennig + Modify configuration options for pfennig @@ -367,7 +367,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig + pfennig @@ -395,11 +395,11 @@ This product includes software developed by the OpenSSL Project for use in the O - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses @@ -423,7 +423,7 @@ This product includes software developed by the OpenSSL Project for use in the O - Pfennig Core + pfennig Core @@ -431,7 +431,7 @@ This product includes software developed by the OpenSSL Project for use in the O - &About Pfennig Core + &About pfennig Core @@ -451,15 +451,15 @@ This product includes software developed by the OpenSSL Project for use in the O - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options - Pfennig client + pfennig client - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network @@ -551,7 +551,7 @@ Address: %4 - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. @@ -836,7 +836,7 @@ Address: %4 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. @@ -874,11 +874,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options - Pfennig Core + pfennig Core @@ -925,15 +925,15 @@ Address: %4 - Welcome to Pfennig Core. + Welcome to pfennig Core. - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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. @@ -945,7 +945,7 @@ Address: %4 - Pfennig + pfennig @@ -1007,11 +1007,11 @@ Address: %4 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. - &Start Pfennig on system login + &Start pfennig on system login @@ -1027,7 +1027,7 @@ Address: %4 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. @@ -1087,7 +1087,7 @@ Address: %4 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. @@ -1143,7 +1143,7 @@ Address: %4 - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. @@ -1155,7 +1155,7 @@ Address: %4 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. @@ -1210,7 +1210,7 @@ Address: %4 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. @@ -1265,7 +1265,7 @@ Address: %4 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. @@ -1332,7 +1332,7 @@ Address: %4 QObject - Pfennig + pfennig @@ -1348,11 +1348,11 @@ Address: %4 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1474,7 +1474,7 @@ Address: %4 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. @@ -1482,7 +1482,7 @@ Address: %4 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. @@ -1545,7 +1545,7 @@ Address: %4 - 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 Pfennig network. + 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 pfennig network. @@ -1858,7 +1858,7 @@ Address: %4 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address @@ -1945,7 +1945,7 @@ Address: %4 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. @@ -1964,7 +1964,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... @@ -2019,7 +2019,7 @@ Address: %4 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address @@ -2047,7 +2047,7 @@ Address: %4 - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address @@ -2059,7 +2059,7 @@ Address: %4 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2118,7 +2118,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core @@ -2613,7 +2613,7 @@ Address: %4 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) @@ -2641,7 +2641,7 @@ Address: %4 - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) @@ -2649,7 +2649,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version @@ -2674,7 +2674,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com @@ -2747,7 +2747,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. @@ -2759,7 +2759,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. @@ -2795,7 +2795,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Pfennig Core Daemon + pfennig Core Daemon @@ -2815,7 +2815,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) @@ -3039,7 +3039,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. @@ -3103,7 +3103,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) @@ -3123,11 +3123,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - SSL options: (see the Pfennig Wiki for SSL setup instructions) + SSL options: (see the pfennig Wiki for SSL setup instructions) - Send command to Pfennig Core + Send command to pfennig Core @@ -3163,7 +3163,7 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Start Pfennig Core Daemon + Start pfennig Core Daemon @@ -3279,11 +3279,11 @@ for example: alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo. - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete diff --git a/src/qt/locale/bitmark_zh_HK.ts~ b/src/qt/locale/bitmark_zh_HK.ts~ new file mode 100644 index 0000000..fa1a5ae --- /dev/null +++ b/src/qt/locale/bitmark_zh_HK.ts~ @@ -0,0 +1,3368 @@ + + + AboutDialog + + About GameCredits Core + + + + <b>GameCredits 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 Bitcoin 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + + + + These are your GameCredits 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 GameCreditsS</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 + + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + + + + + GameCreditsGUI + + Sign &message... + + + + Synchronizing with network... + + + + &Overview + + + + Node + + + + Show general overview of wallet + + + + &Transactions + + + + Browse transaction history + + + + E&xit + + + + Quit application + + + + Show information about GameCredits + + + + 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 GameCredits address + + + + Modify configuration options for GameCredits + + + + Backup wallet to another location + + + + Change the passphrase used for wallet encryption + + + + &Debug window + + + + Open debugging and diagnostic console + + + + &Verify message... + + + + GameCredits + + + + Wallet + + + + &Send + + + + &Receive + + + + &Show / Hide + + + + Show or hide the main Window + + + + Encrypt the private keys that belong to your wallet + + + + Sign messages with your GameCredits addresses to prove you own them + + + + Verify messages to ensure they were signed with specified GameCredits addresses + + + + &File + + + + &Settings + + + + &Help + + + + Tabs toolbar + + + + [testnet] + + + + GameCredits Core + + + + Request payments (generates QR codes and gamecredits: URIs) + + + + &About GameCredits Core + + + + Show the list of used sending addresses and labels + + + + Show the list of used receiving addresses and labels + + + + Open a gamecredits: URI or payment request + + + + &Command-line options + + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + + + + GameCredits client + + + + %n active connection(s) to GameCredits 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. GameCredits 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 GameCredits 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 + + GameCredits Core - Command-line options + + + + GameCredits 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 GameCredits Core. + + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + + + + GameCredits Core will download and store a copy of the GameCredits 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: + + + + GameCredits + + + + 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 GameCredits after logging in to the system. + + + + &Start GameCredits on system login + + + + Size of &database cache + + + + MB + + + + Number of script &verification threads + + + + Connect to the GameCredits 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 GameCredits 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 GameCredits. + + + + &Unit to show amounts in: + + + + Choose the default subdivision unit to show in the interface and when sending coins. + + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + + + + Requested payment amount of %1 is too small (considered dust). + + + + Payment request error + + + + Cannot start gamecredits: 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 + + GameCredits + + + + 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. + + + + GameCredits Core didn't yet exit safely... + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + + + + Clear console + + + + Welcome to the GameCredits 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 GameCredits 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + + + + This is an unverified payment request. + + + + Pay To: + + + + Memo: + + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + Verify the message to ensure it was signed with the specified GameCredits address + + + + Verify &Message + + + + Reset all verify message fields + + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + 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 + + GameCredits Core + + + + The Bitcoin 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 + + + + + gamecredits-core + + Usage: + + + + List commands + + + + Get help for a command + + + + Options: + + + + Specify configuration file (default: gamecredits.conf) + + + + Specify pid file (default: gamecreditsd.pid) + + + + Specify data directory + + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + + + + 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: 40001 or testnet: 50000) + + + + Accept command line and JSON-RPC commands + + + + GameCredits 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=gamecreditsrpc +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 "GameCredits 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. GameCredits 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 GameCredits 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 + + + + GameCredits 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: 40001 or testnet: 50000) + + + + 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 gamecredits-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. GameCredits 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 GameCredits 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 GameCredits Wiki for SSL setup instructions) + + + + Send command to GameCredits 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 GameCredits 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 GameCredits + + + + Wallet needed to be rewritten: restart GameCredits 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/bitmark_zh_TW.ts b/src/qt/locale/bitmark_zh_TW.ts index d525a7b..2e196c4 100644 --- a/src/qt/locale/bitmark_zh_TW.ts +++ b/src/qt/locale/bitmark_zh_TW.ts @@ -2,11 +2,11 @@ AboutDialog - About Pfennig Core + About pfennig Core 關於位元幣核心 - <b>Pfennig Core</b> version + <b>pfennig Core</b> version <b>位元幣核心</b> 版本 @@ -17,7 +17,7 @@ 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. -位元幣,原名是 Pfennig, 又叫做比特幣。 +位元幣,原名是 pfennig, 又叫做比特幣。 這是一套實驗性的軟體。 @@ -105,11 +105,11 @@ This product includes software developed by the OpenSSL Project for use in the O 收款位址 - These are your Pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. + These are your pfennig addresses for sending payments. Always check the amount and the receiving address before sending coins. 這些是你要付款過去的位元幣位址。在付錢之前,務必要檢查金額和收款位址是否正確。 - These are your Pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. + These are your pfennig addresses for receiving payments. It is recommended to use a new receiving address for each transaction. 這些是你用來收款的位元幣位址。建議在每次交易時,都使用一個新的收款位址。 @@ -207,7 +207,7 @@ This product includes software developed by the OpenSSL Project for use in the O 確認錢包加密 - Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR PfennigS</b>! + Warning: If you encrypt your wallet and lose your passphrase, you will <b>LOSE ALL OF YOUR pfennigS</b>! 警告: 如果把錢包加密後又忘記密碼,你就會從此<b>失去其中所有的位元幣了</b>! @@ -227,7 +227,7 @@ This product includes software developed by the OpenSSL Project for use in the O 錢包已加密 - Pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. + pfennig will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your pfennigs from being stolen by malware infecting your computer. 位元幣軟體現在要關閉,好完成加密程序。請注意,加密錢包不能完全防止入侵你的電腦的惡意程式偷取位元幣。 @@ -260,7 +260,7 @@ This product includes software developed by the OpenSSL Project for use in the O - PfennigGUI + pfennigGUI Sign &message... 簽署訊息... @@ -298,7 +298,7 @@ This product includes software developed by the OpenSSL Project for use in the O 結束應用程式 - Show information about Pfennig + Show information about pfennig 顯示位元幣軟體相關資訊 @@ -346,11 +346,11 @@ This product includes software developed by the OpenSSL Project for use in the O 正在為磁碟裡的區塊重建索引... - Send coins to a Pfennig address + Send coins to a pfennig address 付錢給一個位元幣位址 - Modify configuration options for Pfennig + Modify configuration options for pfennig 修改位元幣軟體的設定選項 @@ -374,7 +374,7 @@ This product includes software developed by the OpenSSL Project for use in the O 驗證訊息... - Pfennig + pfennig 位元幣 @@ -402,11 +402,11 @@ This product includes software developed by the OpenSSL Project for use in the O 把錢包中的密鑰加密 - Sign messages with your Pfennig addresses to prove you own them + Sign messages with your pfennig addresses to prove you own them 用位元幣位址簽署訊息來證明位址是你的 - Verify messages to ensure they were signed with specified Pfennig addresses + Verify messages to ensure they were signed with specified pfennig addresses 驗證訊息是用來確定訊息是用指定的位元幣位址簽署的 @@ -430,7 +430,7 @@ This product includes software developed by the OpenSSL Project for use in the O [testnet] - Pfennig Core + pfennig Core 位元幣核心 @@ -438,7 +438,7 @@ This product includes software developed by the OpenSSL Project for use in the O 要求付款(產生 QR Code 和位元幣付款協議的 URI) - &About Pfennig Core + &About pfennig Core 關於位元幣核心 @@ -458,15 +458,15 @@ This product includes software developed by the OpenSSL Project for use in the O 命令列選項 - Show the Pfennig Core help message to get a list with possible Pfennig command-line options + Show the pfennig Core help message to get a list with possible pfennig command-line options 顯示位元幣核心的說明訊息,來取得可用命令列選項的列表 - Pfennig client + pfennig client 位元幣客戶端軟體 - %n active connection(s) to Pfennig network + %n active connection(s) to pfennig network %n 個運作中的位元幣網路連線 @@ -562,7 +562,7 @@ Address: %4 錢包<b>已加密</b>並且<b>上鎖中</b> - A fatal error occurred. Pfennig can no longer continue safely and will quit. + A fatal error occurred. pfennig can no longer continue safely and will quit. 發生了致命的錯誤。位元幣軟體沒辦法再繼續安全執行,只好結束。 @@ -847,7 +847,7 @@ Address: %4 輸入的位址 %1 在位址簿中已經有了。 - The entered address "%1" is not a valid Pfennig address. + The entered address "%1" is not a valid pfennig address. 輸入的位址 %1 並不是有效的位元幣位址。 @@ -885,11 +885,11 @@ Address: %4 HelpMessageDialog - Pfennig Core - Command-line options + pfennig Core - Command-line options 位元幣核心 - 命令列選項 - Pfennig Core + pfennig Core 位元幣核心 @@ -936,15 +936,15 @@ Address: %4 歡迎 - Welcome to Pfennig Core. + Welcome to pfennig Core. 歡迎使用位元幣核心 - As this is the first time the program is launched, you can choose where Pfennig Core will store its data. + As this is the first time the program is launched, you can choose where pfennig Core will store its data. 因為這是程式第一次啓動,你可以選擇位元幣核心儲存資料的地方。 - Pfennig Core will download and store a copy of the Pfennig 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. + pfennig Core will download and store a copy of the pfennig 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 的資料會儲存到這個目錄中,並且還會持續增長。另外錢包資料也會儲存在這個目錄。 @@ -956,7 +956,7 @@ Address: %4 使用自定的資料目錄: - Pfennig + pfennig 位元幣 @@ -1018,11 +1018,11 @@ Address: %4 付交易手續費 - Automatically start Pfennig after logging in to the system. + Automatically start pfennig after logging in to the system. 在登入系統後自動啓動位元幣軟體。 - &Start Pfennig on system login + &Start pfennig on system login 系統登入時啟動位元幣 @@ -1038,7 +1038,7 @@ Address: %4 指令碼驗證執行緒數目 - Connect to the Pfennig network through a SOCKS proxy. + Connect to the pfennig network through a SOCKS proxy. 透過 SOCKS 代理伺服器來連線到位元幣網路。 @@ -1098,7 +1098,7 @@ Address: %4 可以花還沒確認的零錢 - Automatically open the Pfennig client port on the router. This only works when your router supports UPnP and it is enabled. + Automatically open the pfennig client port on the router. This only works when your router supports UPnP and it is enabled. 自動在路由器上開放位元幣的客戶端通訊埠。只有在你的路由器支援且開啓「通用即插即用」協定(UPnP)時才有作用。 @@ -1154,7 +1154,7 @@ Address: %4 使用界面語言: - The user interface language can be set here. This setting will take effect after restarting Pfennig. + The user interface language can be set here. This setting will take effect after restarting pfennig. 可以在這裡設定使用者介面的語言。這個設定在重啓位元幣軟體後才會生效。 @@ -1166,7 +1166,7 @@ Address: %4 選擇操作界面和付款時,預設顯示金額的細分單位。 - Whether to show Pfennig addresses in the transaction list or not. + Whether to show pfennig addresses in the transaction list or not. 是否要在交易列表中顯示位元幣位址。 @@ -1221,7 +1221,7 @@ Address: %4 表單 - The displayed information may be out of date. Your wallet automatically synchronizes with the Pfennig 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 pfennig network after a connection is established, but this process has not completed yet. 顯示的資訊可能是過期的。跟位元幣網路的連線建立後,你的錢包會自動和網路同步,但是這個步驟還沒完成。 @@ -1276,7 +1276,7 @@ Address: %4 URI 處理 - URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters. + URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters. 沒辦法解析 URI 位址!可能是因為位元幣位址無效,或是 URI 參數格式錯誤。 @@ -1343,7 +1343,7 @@ Address: %4 QObject - Pfennig + pfennig 位元幣 @@ -1359,11 +1359,11 @@ Address: %4 錯誤: -regtest 和 -testnet 的使用組合無效。 - Pfennig Core didn't yet exit safely... + pfennig Core didn't yet exit safely... 位元幣核心還沒有安全地結束... - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) 請輸入位元幣位址(像是 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -1485,7 +1485,7 @@ Address: %4 除錯紀錄檔 - Open the Pfennig debug log file from the current data directory. This can take a few seconds for large log files. + Open the pfennig debug log file from the current data directory. This can take a few seconds for large log files. 從目前的資料目錄下開啓位元幣軟體的除錯紀錄檔。當紀錄檔很大時,可能會花好幾秒的時間。 @@ -1493,7 +1493,7 @@ Address: %4 清主控台 - Welcome to the Pfennig RPC console. + Welcome to the pfennig RPC console. 歡迎使用位元幣 RPC 主控台。 @@ -1556,7 +1556,7 @@ Address: %4 重複使用現有的收款位址(不建議) - 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 Pfennig network. + 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 pfennig network. 附加在付款要求中的訊息,可以不填,打開要求內容時會顯示。注意: 這個訊息不會隨著付款送到位元幣網路上。 @@ -1869,7 +1869,7 @@ Address: %4 交易被拒絕了!有時候會發生這種錯誤,是因為你錢包中的一些錢已經被花掉了。比如說你複製了錢包檔 wallet.dat, 然後用複製的錢包花掉了錢,你現在所用的原來的錢包中,卻沒有那筆錢已經花掉的紀錄。 - Warning: Invalid Pfennig address + Warning: Invalid pfennig address 警告: 位元幣位址無效 @@ -1956,7 +1956,7 @@ Address: %4 請輸入這個位址的標記,來把它加進去已使用過位址的清單。 - A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the Pfennig network. + A message that was attached to the pfennig: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the pfennig network. 附加在位元幣付款協議 URI 中的訊息,會和交易內容一起存起來,給你自己做參考。注意: 這個訊息不會送到位元幣網路上。 @@ -1975,7 +1975,7 @@ Address: %4 ShutdownWindow - Pfennig Core is shutting down... + pfennig Core is shutting down... 位元幣核心正在關閉中... @@ -2030,7 +2030,7 @@ Address: %4 複製目前的簽章到系統剪貼簿 - Sign the message to prove you own this Pfennig address + Sign the message to prove you own this pfennig address 簽署這個訊息來證明這個位元幣位址是你的 @@ -2058,7 +2058,7 @@ Address: %4 簽署這個訊息的位址(像是 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) - Verify the message to ensure it was signed with the specified Pfennig address + Verify the message to ensure it was signed with the specified pfennig address 驗證這個訊息來確定是用指定的位元幣位址簽署的 @@ -2070,7 +2070,7 @@ Address: %4 重設所有訊息驗證欄位 - Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) 請輸入位元幣位址(像是 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) @@ -2129,7 +2129,7 @@ Address: %4 SplashScreen - Pfennig Core + pfennig Core 位元幣核心 @@ -2624,8 +2624,8 @@ Address: %4 指定資料目錄 - Listen for connections on <port> (default: P2PPORT or testnet: 1P2PPORT) - 在通訊埠 <port> 聽候連線(預設值: P2PPORT, 或若是測試網路: 1P2PPORT) + Listen for connections on <port> (default: 40002 or testnet: 50001) + 在通訊埠 <port> 聽候連線(預設值: 40002, 或若是測試網路: 50001) Maintain at most <n> connections to peers (default: 125) @@ -2652,8 +2652,8 @@ Address: %4 設定在 IPv4 網路上以通訊埠 %u 聽取 RPC 連線時發生錯誤: %s - Listen for JSON-RPC connections on <port> (default: RPCPORT or testnet: 1RPCPORT) - 在通訊埠 <port> 聽候 JSON-RPC 連線(預設值: RPCPORT, 或若是測試網路: 1RPCPORT) + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + 在通訊埠 <port> 聽候 JSON-RPC 連線(預設值: 40001, 或若是測試網路: 50000) Accept command line and JSON-RPC commands @@ -2661,7 +2661,7 @@ Address: %4 - Pfennig Core RPC client version + pfennig Core RPC client version 位元幣核心 RPC 客戶端軟體版本 @@ -2686,7 +2686,7 @@ rpcpassword=%s 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 "Pfennig Alert" admin@foo.com +for example: alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com %s, 你必須要在以下設定檔中設定 RPC 密碼(rpcpassword): %s @@ -2698,7 +2698,7 @@ rpcpassword=%s 如果還沒有這個設定檔,請在造出來的時候,設定檔案權限成「只有主人才能讀取」。 也建議你設定警示通知,發生問題時你才會被通知到; 比如說設定成: -alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com +alertnotify=echo %%s | mail -s "pfennig Alert" admin@foo.com Acceptable ciphers (default: TLSv1.2+HIGH:TLSv1+HIGH:!SSLv2:!aNULL:!eNULL:!3DES:@STRENGTH) @@ -2769,7 +2769,7 @@ alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com這是個還沒發表的測試版本 - 使用請自負風險 - 請不要用來開採或商業應用 - Unable to bind to %s on this computer. Pfennig Core is probably already running. + Unable to bind to %s on this computer. pfennig Core is probably already running. 沒辦法繫結在這台電腦上的 %s 。位元幣核心可能已經在執行了。 @@ -2781,7 +2781,7 @@ alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com警告: -paytxfee 設定了很高的金額!這可是你交易付款所要付的手續費。 - Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly. + Warning: Please check that your computer's date and time are correct! If your clock is wrong pfennig will not work properly. 警告: 請檢查電腦日期和時間是否正確!位元幣軟體沒辦法在時鐘不準的情況下正常運作。 @@ -2817,7 +2817,7 @@ alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com嘗試從壞掉的錢包檔 wallet.dat 復原密鑰 - Pfennig Core Daemon + pfennig Core Daemon 位元幣核心護靈 @@ -2837,8 +2837,8 @@ alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com透過 SOCKS 代理伺服器來連線 - Connect to JSON-RPC on <port> (default: RPCPORT or testnet: 1RPCPORT) - 連線到埠號 <port> 上的 JSON-RPC 伺服器(預設值: RPCPORT,或若是測試網路: 1RPCPORT) + Connect to JSON-RPC on <port> (default: 40001 or testnet: 50000) + 連線到埠號 <port> 上的 JSON-RPC 伺服器(預設值: 40001,或若是測試網路: 50000) Connection options: @@ -3061,7 +3061,7 @@ alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com從其它來源的 blk000??.dat 檔匯入區塊 - Cannot obtain a lock on data directory %s. Pfennig Core is probably already running. + Cannot obtain a lock on data directory %s. pfennig Core is probably already running. 沒辦法鎖定資料目錄 %s。位元幣核心可能已經在執行了。 @@ -3125,8 +3125,8 @@ alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com啟動時輸出區塊樹 (預設值: 0) - RPC SSL options: (see the Pfennig Wiki for SSL setup instructions) - RPC SSL 選項: (SSL 設定程序請見 Pfennig Wiki) + RPC SSL options: (see the pfennig Wiki for SSL setup instructions) + RPC SSL 選項: (SSL 設定程序請見 pfennig Wiki) RPC server options: @@ -3145,11 +3145,11 @@ alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com啟用定期將變動寫入錢包檔的執行緒 (預設值: 1) - SSL options: (see the Pfennig Wiki for SSL setup instructions) - SSL 選項: (SSL 設定程序請見 Pfennig Wiki) + SSL options: (see the pfennig Wiki for SSL setup instructions) + SSL 選項: (SSL 設定程序請見 pfennig Wiki) - Send command to Pfennig Core + Send command to pfennig Core 傳送指令給位元幣核心 @@ -3185,7 +3185,7 @@ alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com指定連線在幾毫秒後逾時(預設值: 5000) - Start Pfennig Core Daemon + Start pfennig Core Daemon 啟動位元幣核心護靈 @@ -3301,11 +3301,11 @@ alertnotify=echo %%s | mail -s "Pfennig Alert" admin@foo.com載入檔案 wallet.dat 時發生錯誤: 錢包損毀了 - Error loading wallet.dat: Wallet requires newer version of Pfennig + Error loading wallet.dat: Wallet requires newer version of pfennig 載入 wallet.dat 檔案時發生錯誤: 這個錢包需要新版的位元幣軟體 - Wallet needed to be rewritten: restart Pfennig to complete + Wallet needed to be rewritten: restart pfennig to complete 錢包需要重寫: 請重新啓動位元幣軟體來完成 diff --git a/src/qt/locale/bitmark_zh_TW.ts~ b/src/qt/locale/bitmark_zh_TW.ts~ new file mode 100644 index 0000000..187dd8b --- /dev/null +++ b/src/qt/locale/bitmark_zh_TW.ts~ @@ -0,0 +1,3392 @@ + + + AboutDialog + + About GameCredits Core + 關於位元幣核心 + + + <b>GameCredits 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. + +位元幣,原名是 GameCredits, 又叫做比特幣。 + +這是一套實驗性的軟體。 + +這套軟體是依據 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 Bitcoin Core Developers + 位元幣核心開發人員 + + + (%1-bit) + (%1 位元) + + + + 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 GameCredits addresses for sending payments. Always check the amount and the receiving address before sending coins. + 這些是你要付款過去的位元幣位址。在付錢之前,務必要檢查金額和收款位址是否正確。 + + + These are your GameCredits 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. + 儲存位址列表到 %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 GameCreditsS</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 + 錢包已加密 + + + GameCredits will close now to finish the encryption process. Remember that encrypting your wallet cannot fully protect your gamecreditss 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. + 錢包密碼改成功了。 + + + + GameCreditsGUI + + Sign &message... + 簽署訊息... + + + Synchronizing with network... + 正在跟網路進行同步... + + + &Overview + 總覽 + + + Node + 節點 + + + Show general overview of wallet + 顯示錢包一般總覽 + + + &Transactions + 交易 + + + Browse transaction history + 瀏覽交易紀錄 + + + E&xit + 結束 + + + Quit application + 結束應用程式 + + + Show information about GameCredits + 顯示位元幣軟體相關資訊 + + + 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 GameCredits address + 付錢給一個位元幣位址 + + + Modify configuration options for GameCredits + 修改位元幣軟體的設定選項 + + + Backup wallet to another location + 把錢包備份到其它地方 + + + Change the passphrase used for wallet encryption + 改變錢包加密用的密碼 + + + &Debug window + 除錯視窗 + + + Open debugging and diagnostic console + 開啓除錯和診斷主控台 + + + &Verify message... + 驗證訊息... + + + GameCredits + 位元幣 + + + Wallet + 錢包 + + + &Send + 付款 + + + &Receive + 收款 + + + &Show / Hide + 顯示或隱藏 + + + Show or hide the main Window + 顯示或隱藏主視窗 + + + Encrypt the private keys that belong to your wallet + 把錢包中的密鑰加密 + + + Sign messages with your GameCredits addresses to prove you own them + 用位元幣位址簽署訊息來證明位址是你的 + + + Verify messages to ensure they were signed with specified GameCredits addresses + 驗證訊息是用來確定訊息是用指定的位元幣位址簽署的 + + + &File + 檔案 + + + &Settings + 設定 + + + &Help + 說明 + + + Tabs toolbar + 分頁工具列 + + + [testnet] + [testnet] + + + GameCredits Core + 位元幣核心 + + + Request payments (generates QR codes and gamecredits: URIs) + 要求付款(產生 QR Code 和位元幣付款協議的 URI) + + + &About GameCredits Core + 關於位元幣核心 + + + Show the list of used sending addresses and labels + 顯示已使用過的付款位址和標記的清單 + + + Show the list of used receiving addresses and labels + 顯示已使用過的收款位址和標記的清單 + + + Open a gamecredits: URI or payment request + 開啓 gamecredits 協議的 URI 或付款要求 + + + &Command-line options + 命令列選項 + + + Show the GameCredits Core help message to get a list with possible GameCredits command-line options + 顯示位元幣核心的說明訊息,來取得可用命令列選項的列表 + + + GameCredits client + 位元幣客戶端軟體 + + + %n active connection(s) to GameCredits 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. GameCredits 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 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 GameCredits 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 + + GameCredits Core - Command-line options + 位元幣核心 - 命令列選項 + + + GameCredits 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 根憑證 (預設值: 系統憑證庫) + + + Show splash screen on startup (default: 1) + 顯示啓動畫面(預設值: 1) + + + Choose data directory on startup (default: 0) + 啓動時選擇資料目錄(預設值: 0) + + + + Intro + + Welcome + 歡迎 + + + Welcome to GameCredits Core. + 歡迎使用位元幣核心 + + + As this is the first time the program is launched, you can choose where GameCredits Core will store its data. + 因為這是程式第一次啓動,你可以選擇位元幣核心儲存資料的地方。 + + + GameCredits Core will download and store a copy of the GameCredits 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: + 使用自定的資料目錄: + + + GameCredits + 位元幣 + + + 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. + + + Pay transaction &fee + 付交易手續費 + + + Automatically start GameCredits after logging in to the system. + 在登入系統後自動啓動位元幣軟體。 + + + &Start GameCredits on system login + 系統登入時啟動位元幣 + + + Size of &database cache + 資料庫快取大小 + + + MB + MB (百萬位元組) + + + Number of script &verification threads + 指令碼驗證執行緒數目 + + + Connect to the GameCredits 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 + 網路 + + + (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 GameCredits client port on the router. This only works when your router supports UPnP and it is enabled. + 自動在路由器上開放位元幣的客戶端通訊埠。只有在你的路由器支援且開啓「通用即插即用」協定(UPnP)時才有作用。 + + + Map port using &UPnP + 用 &UPnP 設定通訊埠對應 + + + Proxy &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 GameCredits. + 可以在這裡設定使用者介面的語言。這個設定在重啓位元幣軟體後才會生效。 + + + &Unit to show amounts in: + 金額顯示單位: + + + Choose the default subdivision unit to show in the interface and when sending coins. + 選擇操作界面和付款時,預設顯示金額的細分單位。 + + + Whether to show GameCredits 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 GameCredits 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 GameCredits address or malformed URI parameters. + 沒辦法解析 URI 位址!可能是因為位元幣位址無效,或是 URI 參數格式錯誤。 + + + Requested payment amount of %1 is too small (considered dust). + 要求付款的金額 %1 太少(會被網路認為是沒必要的零散錢)。 + + + Payment request error + 要求付款時發生錯誤 + + + Cannot start gamecredits: click-to-pay handler + 沒辦法啟動 gamecredits 協議的按就付處理器 + + + 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 + + GameCredits + 位元幣 + + + Error: Specified data directory "%1" does not exist. + 錯誤: 沒有指定的資料目錄 %1 。 + + + Error: Cannot parse configuration file: %1. Only use key=value syntax. + 錯誤: 沒辦法解析設定檔: %1。請只用「名稱=設定值」這種語法。 + + + Error: Invalid combination of -regtest and -testnet. + 錯誤: -regtest 和 -testnet 的使用組合無效。 + + + GameCredits Core didn't yet exit safely... + 位元幣核心還沒有安全地結束... + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 請輸入位元幣位址(像是 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + + QRImageWidget + + &Save Image... + 儲存圖片... + + + &Copy Image + 複製圖片 + + + Save QR Code + 儲存 QR Code + + + 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 GameCredits debug log file from the current data directory. This can take a few seconds for large log files. + 從目前的資料目錄下開啓位元幣軟體的除錯紀錄檔。當紀錄檔很大時,可能會花好幾秒的時間。 + + + Clear console + 清主控台 + + + Welcome to the GameCredits 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 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 GameCredits 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 + 增加收款人 + + + 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. + 付款金額必須大於零。 + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 付款的目標位址(像是 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 gamecredits: URI which will be stored with the transaction for your reference. Note: This message will not be sent over the GameCredits network. + 附加在位元幣付款協議 URI 中的訊息,會和交易內容一起存起來,給你自己做參考。注意: 這個訊息不會送到位元幣網路上。 + + + This is an unverified payment request. + 這是個沒驗證過的付款要求。 + + + Pay To: + 付給: + + + Memo: + 備註: + + + + ShutdownWindow + + GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 用來簽署訊息的位址(像是 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 GameCredits 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. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 簽署這個訊息的位址(像是 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + Verify the message to ensure it was signed with the specified GameCredits address + 驗證這個訊息來確定是用指定的位元幣位址簽署的 + + + Verify &Message + 驗證訊息 + + + Reset all verify message fields + 重設所有訊息驗證欄位 + + + Enter a GameCredits address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + 請輸入位元幣位址(像是 bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR) + + + 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 + + GameCredits Core + 位元幣核心 + + + The Bitcoin 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 + 交易識別碼 + + + 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 + 複製交易識別碼 + + + 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 + 備份成功 + + + + gamecredits-core + + Usage: + 用法: + + + List commands + 列出指令 + + + Get help for a command + 取得指令說明 + + + Options: + 選項: + + + Specify configuration file (default: gamecredits.conf) + 指定設定檔(預設值: gamecredits.conf) + + + Specify pid file (default: gamecreditsd.pid) + 指定行程識別碼(PID)檔(預設值: gamecreditsd.pid) + + + Specify data directory + 指定資料目錄 + + + Listen for connections on <port> (default: 40002 or testnet: 50001) + 在通訊埠 <port> 聽候連線(預設值: 40002, 或若是測試網路: 50001) + + + 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 + 設定在 IPv4 網路上以通訊埠 %u 聽取 RPC 連線時發生錯誤: %s + + + Listen for JSON-RPC connections on <port> (default: 40001 or testnet: 50000) + 在通訊埠 <port> 聽候 JSON-RPC 連線(預設值: 40001, 或若是測試網路: 50000) + + + Accept command line and JSON-RPC commands + 接受指令列和 JSON-RPC 指令 + + + + GameCredits 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: +rpcuser=gamecreditsrpc +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 "GameCredits Alert" admin@foo.com + + %s, 你必須要在以下設定檔中設定 RPC 密碼(rpcpassword): +%s +建議你使用以下隨機產生的密碼: +rpcuser=gamecreditsrpc +rpcpassword=%s +(你不用記住這個密碼) +使用者名稱(rpcuser)和密碼(rpcpassword)不可以相同! +如果還沒有這個設定檔,請在造出來的時候,設定檔案權限成「只有主人才能讀取」。 +也建議你設定警示通知,發生問題時你才會被通知到; +比如說設定成: +alertnotify=echo %%s | mail -s "GameCredits 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 + + + 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) + 對沒付手續費的交易持續限制一分鐘內最多只能有 <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, 然後用複製的錢包花掉了錢,你現在所用的原來的錢包中,卻沒有那筆錢已經花掉的紀錄。 + + + 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 會被取代成交易識別碼) + + + 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. GameCredits 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 設定了很高的金額!這可是你交易付款所要付的手續費。 + + + Warning: Please check that your computer's date and time are correct! If your clock is wrong GameCredits 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: + <category> 可以是: + + + Attempt to recover private keys from a corrupt wallet.dat + 嘗試從壞掉的錢包檔 wallet.dat 復原密鑰 + + + GameCredits 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: 40001 or testnet: 50000) + 連線到埠號 <port> 上的 JSON-RPC 伺服器(預設值: 40001,或若是測試網路: 50000) + + + 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) + + + 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 + 交易時每一千位元組(kB)加付的交易手續費 + + + Fees smaller than this are considered zero fee (for relaying) (default: + 手續費比這個低時會被認為是沒付手續費(轉發用)(預設值: + + + Find peers using DNS lookup (default: 1 unless -connect) + 是否允許在找節點時使用域名查詢(預設值: 當沒用 -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... + 正在匯入中... + + + 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 gamecredits-cli): + 用法(已過時,請改用 gamecredits-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. GameCredits 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 amount for -minrelaytxfee=<amount>: '%s' + 設定最低轉發手續費 -minrelaytxfee=<金額> 的金額無效: '%s' + + + Invalid amount for -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) + + + 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 + 啟動時輸出指定的區塊內容,如果有在區塊索引中找到的話 + + + Print block tree on startup (default: 0) + 啟動時輸出區塊樹 (預設值: 0) + + + RPC SSL options: (see the GameCredits Wiki for SSL setup instructions) + RPC SSL 選項: (SSL 設定程序請見 GameCredits 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 GameCredits Wiki for SSL setup instructions) + SSL 選項: (SSL 設定程序請見 GameCredits Wiki) + + + Send command to GameCredits 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) + 在錢包資料庫環境變數設定 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) + + + Signing transaction failed + 簽署交易失敗 + + + Specify connection timeout in milliseconds (default: 5000) + 指定連線在幾毫秒後逾時(預設值: 5000) + + + Start GameCredits 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 + 錢包檔 weallet.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) + 當最新區塊改變時要執行的指令(指令中的 %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 的參數使用域名查詢 + + + Loading addresses... + 正在載入位址資料... + + + Error loading wallet.dat: Wallet corrupted + 載入檔案 wallet.dat 時發生錯誤: 錢包損毀了 + + + Error loading wallet.dat: Wallet requires newer version of GameCredits + 載入 wallet.dat 檔案時發生錯誤: 這個錢包需要新版的位元幣軟體 + + + Wallet needed to be rewritten: restart GameCredits 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=<金額> 的金額無效: '%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. + 你必須在以下設定檔中設定 RPC 密碼(rpcpassword=<password>): +%s +如果還沒有這個檔案,請在造出來的時候,設定檔案權限成只有主人才能讀取。 + + + \ No newline at end of file diff --git a/src/qt/macdockiconhandler.h b/src/qt/macdockiconhandler.h index 495d6d0..2516db1 100644 --- a/src/qt/macdockiconhandler.h +++ b/src/qt/macdockiconhandler.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/macdockiconhandler.h~ b/src/qt/macdockiconhandler.h~ new file mode 100644 index 0000000..e5e1120 --- /dev/null +++ b/src/qt/macdockiconhandler.h~ @@ -0,0 +1,52 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +QT_BEGIN_NAMESPACE +class QIcon; +class QMenu; +class QWidget; +QT_END_NAMESPACE + +#ifdef __OBJC__ +@class DockIconClickEventHandler; +#else +class DockIconClickEventHandler; +#endif + +/** Macintosh-specific dock icon handler. + */ +class MacDockIconHandler : public QObject +{ + Q_OBJECT + +public: + ~MacDockIconHandler(); + + QMenu *dockMenu(); + void setIcon(const QIcon &icon); + void setMainWindow(QMainWindow *window); + static MacDockIconHandler *instance(); + + void handleDockIconClickEvent(); + +signals: + void dockIconClicked(); + +private: + MacDockIconHandler(); + + DockIconClickEventHandler *m_dockIconClickEventHandler; + QWidget *m_dummyWidget; + QMenu *m_dockMenu; + QMainWindow *mainWindow; +}; + +#endif // MACDOCKICONCLICKHANDLER_H diff --git a/src/qt/macdockiconhandler.mm b/src/qt/macdockiconhandler.mm index 3c371fd..a7049cd 100644 --- a/src/qt/macdockiconhandler.mm +++ b/src/qt/macdockiconhandler.mm @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/macdockiconhandler.mm~ b/src/qt/macdockiconhandler.mm~ new file mode 100644 index 0000000..4946914 --- /dev/null +++ b/src/qt/macdockiconhandler.mm~ @@ -0,0 +1,138 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +#undef slots +#include + +#if QT_VERSION < 0x050000 +extern void qt_mac_set_dock_menu(QMenu *); +#endif + +@interface DockIconClickEventHandler : NSObject +{ + MacDockIconHandler* dockIconHandler; +} + +@end + +@implementation DockIconClickEventHandler + +- (id)initWithDockIconHandler:(MacDockIconHandler *)aDockIconHandler +{ + self = [super init]; + if (self) { + dockIconHandler = aDockIconHandler; + + [[NSAppleEventManager sharedAppleEventManager] + setEventHandler:self + andSelector:@selector(handleDockClickEvent:withReplyEvent:) + forEventClass:kCoreEventClass + andEventID:kAEReopenApplication]; + } + return self; +} + +- (void)handleDockClickEvent:(NSAppleEventDescriptor*)event withReplyEvent:(NSAppleEventDescriptor*)replyEvent +{ + Q_UNUSED(event) + Q_UNUSED(replyEvent) + + if (dockIconHandler) { + dockIconHandler->handleDockIconClickEvent(); + } +} + +@end + +MacDockIconHandler::MacDockIconHandler() : QObject() +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + this->m_dockIconClickEventHandler = [[DockIconClickEventHandler alloc] initWithDockIconHandler:this]; + 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]; +} + +void MacDockIconHandler::setMainWindow(QMainWindow *window) { + this->mainWindow = window; +} + +MacDockIconHandler::~MacDockIconHandler() +{ + [this->m_dockIconClickEventHandler release]; + delete this->m_dummyWidget; + this->setMainWindow(NULL); +} + +QMenu *MacDockIconHandler::dockMenu() +{ + return this->m_dockMenu; +} + +void MacDockIconHandler::setIcon(const QIcon &icon) +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSImage *image = nil; + if (icon.isNull()) + image = [[NSImage imageNamed:@"NSApplicationIcon"] retain]; + else { + // generate NSImage from QIcon and use this as dock icon. + QSize size = icon.actualSize(QSize(128, 128)); + QPixmap pixmap = icon.pixmap(size); + + // write temp file hack (could also be done through QIODevice [memory]) + QTemporaryFile notificationIconFile; + if (!pixmap.isNull() && notificationIconFile.open()) { + QImageWriter writer(¬ificationIconFile, "PNG"); + if (writer.write(pixmap.toImage())) { + const char *cString = notificationIconFile.fileName().toUtf8().data(); + NSString *macString = [NSString stringWithCString:cString encoding:NSUTF8StringEncoding]; + image = [[NSImage alloc] initWithContentsOfFile:macString]; + } + } + + if(!image) { + // if testnet image could not be created, load std. app icon + image = [[NSImage imageNamed:@"NSApplicationIcon"] retain]; + } + } + + [NSApp setApplicationIconImage:image]; + [image release]; + [pool release]; +} + +MacDockIconHandler *MacDockIconHandler::instance() +{ + static MacDockIconHandler *s_instance = NULL; + if (!s_instance) + s_instance = new MacDockIconHandler(); + return s_instance; +} + +void MacDockIconHandler::handleDockIconClickEvent() +{ + if (this->mainWindow) + { + this->mainWindow->activateWindow(); + this->mainWindow->show(); + } + + emit this->dockIconClicked(); +} diff --git a/src/qt/macnotificationhandler.h b/src/qt/macnotificationhandler.h index d07748c..02ace39 100644 --- a/src/qt/macnotificationhandler.h +++ b/src/qt/macnotificationhandler.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/macnotificationhandler.h~ b/src/qt/macnotificationhandler.h~ new file mode 100644 index 0000000..6e235f0 --- /dev/null +++ b/src/qt/macnotificationhandler.h~ @@ -0,0 +1,31 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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). + */ +class MacNotificationHandler : public QObject +{ + Q_OBJECT + +public: + /** shows a 10.8+ UserNotification in the UserNotificationCenter + */ + void showNotification(const QString &title, const QString &text); + + /** executes AppleScript */ + void sendAppleScript(const QString &script); + + /** check if OS can handle UserNotifications */ + bool hasUserNotificationCenterSupport(void); + static MacNotificationHandler *instance(); +}; + + +#endif // MACNOTIFICATIONHANDLER_H diff --git a/src/qt/macnotificationhandler.mm b/src/qt/macnotificationhandler.mm index 8418840..454cbf9 100644 --- a/src/qt/macnotificationhandler.mm +++ b/src/qt/macnotificationhandler.mm @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/macnotificationhandler.mm~ b/src/qt/macnotificationhandler.mm~ new file mode 100644 index 0000000..298c85c --- /dev/null +++ b/src/qt/macnotificationhandler.mm~ @@ -0,0 +1,70 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 +#include + +void MacNotificationHandler::showNotification(const QString &title, const QString &text) +{ + // check if users OS has support for NSUserNotification + if(this->hasUserNotificationCenterSupport()) { + // okay, seems like 10.8+ + QByteArray utf8 = title.toUtf8(); + char* cString = (char *)utf8.constData(); + NSString *titleMac = [[NSString alloc] initWithUTF8String:cString]; + + utf8 = text.toUtf8(); + cString = (char *)utf8.constData(); + NSString *textMac = [[NSString alloc] initWithUTF8String:cString]; + + // do everything weak linked (because we will keep <10.8 compatibility) + id userNotification = [[NSClassFromString(@"NSUserNotification") alloc] init]; + [userNotification performSelector:@selector(setTitle:) withObject:titleMac]; + [userNotification performSelector:@selector(setInformativeText:) withObject:textMac]; + + id notificationCenterInstance = [NSClassFromString(@"NSUserNotificationCenter") performSelector:@selector(defaultUserNotificationCenter)]; + [notificationCenterInstance performSelector:@selector(deliverNotification:) withObject:userNotification]; + + [titleMac release]; + [textMac release]; + [userNotification release]; + } +} + +// sendAppleScript just take a QString and executes it as apple script +void MacNotificationHandler::sendAppleScript(const QString &script) +{ + QByteArray utf8 = script.toUtf8(); + char* cString = (char *)utf8.constData(); + NSString *scriptApple = [[NSString alloc] initWithUTF8String:cString]; + + NSAppleScript *as = [[NSAppleScript alloc] initWithSource:scriptApple]; + NSDictionary *err = nil; + [as executeAndReturnError:&err]; + [as release]; + [scriptApple release]; +} + +bool MacNotificationHandler::hasUserNotificationCenterSupport(void) +{ + Class possibleClass = NSClassFromString(@"NSUserNotificationCenter"); + + // check if users OS has support for NSUserNotification + if(possibleClass!=nil) { + return true; + } + return false; +} + + +MacNotificationHandler *MacNotificationHandler::instance() +{ + static MacNotificationHandler *s_instance = NULL; + if (!s_instance) + s_instance = new MacNotificationHandler(); + return s_instance; +} diff --git a/src/qt/monitoreddatamapper.cpp b/src/qt/monitoreddatamapper.cpp index 61f03be..d6395f4 100644 --- a/src/qt/monitoreddatamapper.cpp +++ b/src/qt/monitoreddatamapper.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/monitoreddatamapper.cpp~ b/src/qt/monitoreddatamapper.cpp~ new file mode 100644 index 0000000..7e77247 --- /dev/null +++ b/src/qt/monitoreddatamapper.cpp~ @@ -0,0 +1,40 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +MonitoredDataMapper::MonitoredDataMapper(QObject *parent) : + QDataWidgetMapper(parent) +{ +} + +void MonitoredDataMapper::addMapping(QWidget *widget, int section) +{ + QDataWidgetMapper::addMapping(widget, section); + addChangeMonitor(widget); +} + +void MonitoredDataMapper::addMapping(QWidget *widget, int section, const QByteArray &propertyName) +{ + QDataWidgetMapper::addMapping(widget, section, propertyName); + addChangeMonitor(widget); +} + +void MonitoredDataMapper::addChangeMonitor(QWidget *widget) +{ + // Watch user property of widget for changes, and connect + // the signal to our viewModified signal. + QMetaProperty prop = widget->metaObject()->userProperty(); + int signal = prop.notifySignalIndex(); + int method = this->metaObject()->indexOfMethod("viewModified()"); + if(signal != -1 && method != -1) + { + QMetaObject::connect(widget, signal, this, method); + } +} diff --git a/src/qt/monitoreddatamapper.h b/src/qt/monitoreddatamapper.h index 10e1c52..6445ea5 100644 --- a/src/qt/monitoreddatamapper.h +++ b/src/qt/monitoreddatamapper.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/monitoreddatamapper.h~ b/src/qt/monitoreddatamapper.h~ new file mode 100644 index 0000000..5340d52 --- /dev/null +++ b/src/qt/monitoreddatamapper.h~ @@ -0,0 +1,35 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +#include + +QT_BEGIN_NAMESPACE +class QWidget; +QT_END_NAMESPACE + +/** Data to Widget mapper that watches for edits and notifies listeners when a field is edited. + This can be used, for example, to enable a commit/apply button in a configuration dialog. + */ +class MonitoredDataMapper : public QDataWidgetMapper +{ + Q_OBJECT + +public: + explicit MonitoredDataMapper(QObject *parent=0); + + void addMapping(QWidget *widget, int section); + void addMapping(QWidget *widget, int section, const QByteArray &propertyName); + +private: + void addChangeMonitor(QWidget *widget); + +signals: + void viewModified(); +}; + +#endif // MONITOREDDATAMAPPER_H diff --git a/src/qt/notificator.cpp b/src/qt/notificator.cpp index c545854..dd2fa54 100644 --- a/src/qt/notificator.cpp +++ b/src/qt/notificator.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/notificator.cpp~ b/src/qt/notificator.cpp~ new file mode 100644 index 0000000..28f1a5d --- /dev/null +++ b/src/qt/notificator.cpp~ @@ -0,0 +1,325 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 +#ifdef USE_DBUS +#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) : + QObject(parent), + parent(parent), + programName(programName), + mode(None), + trayIcon(trayicon) +#ifdef USE_DBUS + ,interface(0) +#endif +{ + if(trayicon && trayicon->supportsMessages()) + { + mode = QSystemTray; + } +#ifdef USE_DBUS + interface = new QDBusInterface("org.freedesktop.Notifications", + "/org/freedesktop/Notifications", "org.freedesktop.Notifications"); + if(interface->isValid()) + { + mode = Freedesktop; + } +#endif +#ifdef Q_OS_MAC + // check if users OS has support for NSUserNotification + if( MacNotificationHandler::instance()->hasUserNotificationCenterSupport()) { + mode = UserNotificationCenter; + } + else { + // Check if Growl is installed (based on Qt's tray icon implementation) + CFURLRef cfurl; + OSStatus status = LSGetApplicationForInfo(kLSUnknownType, kLSUnknownCreator, CFSTR("growlTicket"), kLSRolesAll, 0, &cfurl); + if (status != kLSApplicationNotFoundErr) { + CFBundleRef bundle = CFBundleCreate(0, cfurl); + if (CFStringCompare(CFBundleGetIdentifier(bundle), CFSTR("com.Growl.GrowlHelperApp"), kCFCompareCaseInsensitive | kCFCompareBackwards) == kCFCompareEqualTo) { + if (CFStringHasSuffix(CFURLGetString(cfurl), CFSTR("/Growl.app/"))) + mode = Growl13; + else + mode = Growl12; + } + CFRelease(cfurl); + CFRelease(bundle); + } + } +#endif +} + +Notificator::~Notificator() +{ +#ifdef USE_DBUS + delete interface; +#endif +} + +#ifdef USE_DBUS + +// Loosely based on http://www.qtcentre.org/archive/index.php/t-25879.html +class FreedesktopImage +{ +public: + FreedesktopImage() {} + FreedesktopImage(const QImage &img); + + static int metaType(); + + // Image to variant that can be marshalled over DBus + static QVariant toVariant(const QImage &img); + +private: + int width, height, stride; + bool hasAlpha; + int channels; + int bitsPerSample; + QByteArray image; + + friend QDBusArgument &operator<<(QDBusArgument &a, const FreedesktopImage &i); + friend const QDBusArgument &operator>>(const QDBusArgument &a, FreedesktopImage &i); +}; + +Q_DECLARE_METATYPE(FreedesktopImage); + +// Image configuration settings +const int CHANNELS = 4; +const int BYTES_PER_PIXEL = 4; +const int BITS_PER_SAMPLE = 8; + +FreedesktopImage::FreedesktopImage(const QImage &img): + width(img.width()), + height(img.height()), + stride(img.width() * BYTES_PER_PIXEL), + hasAlpha(true), + channels(CHANNELS), + bitsPerSample(BITS_PER_SAMPLE) +{ + // Convert 00xAARRGGBB to RGBA bytewise (endian-independent) format + QImage tmp = img.convertToFormat(QImage::Format_ARGB32); + const uint32_t *data = reinterpret_cast(tmp.bits()); + + unsigned int num_pixels = width * height; + image.resize(num_pixels * BYTES_PER_PIXEL); + + for(unsigned int ptr = 0; ptr < num_pixels; ++ptr) + { + image[ptr*BYTES_PER_PIXEL+0] = data[ptr] >> 16; // R + image[ptr*BYTES_PER_PIXEL+1] = data[ptr] >> 8; // G + image[ptr*BYTES_PER_PIXEL+2] = data[ptr]; // B + image[ptr*BYTES_PER_PIXEL+3] = data[ptr] >> 24; // A + } +} + +QDBusArgument &operator<<(QDBusArgument &a, const FreedesktopImage &i) +{ + a.beginStructure(); + a << i.width << i.height << i.stride << i.hasAlpha << i.bitsPerSample << i.channels << i.image; + a.endStructure(); + return a; +} + +const QDBusArgument &operator>>(const QDBusArgument &a, FreedesktopImage &i) +{ + a.beginStructure(); + a >> i.width >> i.height >> i.stride >> i.hasAlpha >> i.bitsPerSample >> i.channels >> i.image; + a.endStructure(); + return a; +} + +int FreedesktopImage::metaType() +{ + return qDBusRegisterMetaType(); +} + +QVariant FreedesktopImage::toVariant(const QImage &img) +{ + FreedesktopImage fimg(img); + return QVariant(FreedesktopImage::metaType(), &fimg); +} + +void Notificator::notifyDBus(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout) +{ + Q_UNUSED(cls); + // Arguments for DBus call: + QList args; + + // Program Name: + args.append(programName); + + // Unique ID of this notification type: + args.append(0U); + + // Application Icon, empty string + args.append(QString()); + + // Summary + args.append(title); + + // Body + args.append(text); + + // Actions (none, actions are deprecated) + QStringList actions; + args.append(actions); + + // Hints + QVariantMap hints; + + // If no icon specified, set icon based on class + QIcon tmpicon; + if(icon.isNull()) + { + QStyle::StandardPixmap sicon = QStyle::SP_MessageBoxQuestion; + switch(cls) + { + case Information: sicon = QStyle::SP_MessageBoxInformation; break; + case Warning: sicon = QStyle::SP_MessageBoxWarning; break; + case Critical: sicon = QStyle::SP_MessageBoxCritical; break; + default: break; + } + tmpicon = QApplication::style()->standardIcon(sicon); + } + else + { + tmpicon = icon; + } + hints["icon_data"] = FreedesktopImage::toVariant(tmpicon.pixmap(FREEDESKTOP_NOTIFICATION_ICON_SIZE).toImage()); + args.append(hints); + + // Timeout (in msec) + args.append(millisTimeout); + + // "Fire and forget" + interface->callWithArgumentList(QDBus::NoBlock, "Notify", args); +} +#endif + +void Notificator::notifySystray(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout) +{ + Q_UNUSED(icon); + QSystemTrayIcon::MessageIcon sicon = QSystemTrayIcon::NoIcon; + switch(cls) // Set icon based on class + { + case Information: sicon = QSystemTrayIcon::Information; break; + case Warning: sicon = QSystemTrayIcon::Warning; break; + case Critical: sicon = QSystemTrayIcon::Critical; break; + } + trayIcon->showMessage(title, text, sicon, millisTimeout); +} + +// Based on Qt's tray icon implementation +#ifdef Q_OS_MAC +void Notificator::notifyGrowl(Class cls, const QString &title, const QString &text, const QIcon &icon) +{ + const QString script( + "tell application \"%5\"\n" + " set the allNotificationsList to {\"Notification\"}\n" // -- Make a list of all the notification types (all) + " set the enabledNotificationsList to {\"Notification\"}\n" // -- Make a list of the notifications (enabled) + " register as application \"%1\" all notifications allNotificationsList default notifications enabledNotificationsList\n" // -- Register our script with Growl + " notify with name \"Notification\" title \"%2\" description \"%3\" application name \"%1\"%4\n" // -- Send a Notification + "end tell" + ); + + QString notificationApp(QApplication::applicationName()); + if (notificationApp.isEmpty()) + notificationApp = "Application"; + + QPixmap notificationIconPixmap; + if (icon.isNull()) { // If no icon specified, set icon based on class + QStyle::StandardPixmap sicon = QStyle::SP_MessageBoxQuestion; + switch (cls) + { + case Information: sicon = QStyle::SP_MessageBoxInformation; break; + case Warning: sicon = QStyle::SP_MessageBoxWarning; break; + case Critical: sicon = QStyle::SP_MessageBoxCritical; break; + } + notificationIconPixmap = QApplication::style()->standardPixmap(sicon); + } + else { + QSize size = icon.actualSize(QSize(48, 48)); + notificationIconPixmap = icon.pixmap(size); + } + + QString notificationIcon; + QTemporaryFile notificationIconFile; + if (!notificationIconPixmap.isNull() && notificationIconFile.open()) { + QImageWriter writer(¬ificationIconFile, "PNG"); + if (writer.write(notificationIconPixmap.toImage())) + notificationIcon = QString(" image from location \"file://%1\"").arg(notificationIconFile.fileName()); + } + + QString quotedTitle(title), quotedText(text); + quotedTitle.replace("\\", "\\\\").replace("\"", "\\"); + quotedText.replace("\\", "\\\\").replace("\"", "\\"); + QString growlApp(this->mode == Notificator::Growl13 ? "Growl" : "GrowlHelperApp"); + MacNotificationHandler::instance()->sendAppleScript(script.arg(notificationApp, quotedTitle, quotedText, notificationIcon, growlApp)); +} + +void Notificator::notifyMacUserNotificationCenter(Class cls, const QString &title, const QString &text, const QIcon &icon) { + // icon is not supported by the user notification center yet. OSX will use the app icon. + MacNotificationHandler::instance()->showNotification(title, text); +} + +#endif + +void Notificator::notify(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout) +{ + switch(mode) + { +#ifdef USE_DBUS + case Freedesktop: + notifyDBus(cls, title, text, icon, millisTimeout); + break; +#endif + case QSystemTray: + notifySystray(cls, title, text, icon, millisTimeout); + break; +#ifdef Q_OS_MAC + case UserNotificationCenter: + notifyMacUserNotificationCenter(cls, title, text, icon); + break; + case Growl12: + case Growl13: + notifyGrowl(cls, title, text, icon); + break; +#endif + default: + if(cls == Critical) + { + // Fall back to old fashioned pop-up dialog if critical and no other notification available + QMessageBox::critical(parent, title, text, QMessageBox::Ok, QMessageBox::Ok); + } + break; + } +} diff --git a/src/qt/notificator.h b/src/qt/notificator.h index 8995fd1..598faaa 100644 --- a/src/qt/notificator.h +++ b/src/qt/notificator.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/notificator.h~ b/src/qt/notificator.h~ new file mode 100644 index 0000000..834f5e9 --- /dev/null +++ b/src/qt/notificator.h~ @@ -0,0 +1,81 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +#if defined(HAVE_CONFIG_H) +#include "bitmark-config.h" +#endif + +#include +#include + +QT_BEGIN_NAMESPACE +class QSystemTrayIcon; + +#ifdef USE_DBUS +class QDBusInterface; +#endif +QT_END_NAMESPACE + +/** Cross-platform desktop notification client. */ +class Notificator: public QObject +{ + Q_OBJECT + +public: + /** Create a new notificator. + @note Ownership of trayIcon is not transferred to this object. + */ + Notificator(const QString &programName, QSystemTrayIcon *trayIcon, QWidget *parent); + ~Notificator(); + + // Message class + enum Class + { + Information, /**< Informational message */ + Warning, /**< Notify user of potential problem */ + Critical /**< An error occurred */ + }; + +public slots: + /** Show notification message. + @param[in] cls general message class + @param[in] title title shown with message + @param[in] text message content + @param[in] icon optional icon to show with message + @param[in] millisTimeout notification timeout in milliseconds (defaults to 10 seconds) + @note Platform implementations are free to ignore any of the provided fields except for \a text. + */ + void notify(Class cls, const QString &title, const QString &text, + const QIcon &icon = QIcon(), int millisTimeout = 10000); + +private: + QWidget *parent; + enum Mode { + None, /**< Ignore informational notifications, and show a modal pop-up dialog for Critical notifications. */ + Freedesktop, /**< Use DBus org.freedesktop.Notifications */ + QSystemTray, /**< Use QSystemTray::showMessage */ + Growl12, /**< Use the Growl 1.2 notification system (Mac only) */ + Growl13, /**< Use the Growl 1.3 notification system (Mac only) */ + UserNotificationCenter /**< Use the 10.8+ User Notification Center (Mac only) */ + }; + QString programName; + Mode mode; + QSystemTrayIcon *trayIcon; +#ifdef USE_DBUS + QDBusInterface *interface; + + void notifyDBus(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout); +#endif + void notifySystray(Class cls, const QString &title, const QString &text, const QIcon &icon, int millisTimeout); +#ifdef Q_OS_MAC + void notifyGrowl(Class cls, const QString &title, const QString &text, const QIcon &icon); + void notifyMacUserNotificationCenter(Class cls, const QString &title, const QString &text, const QIcon &icon); +#endif +}; + +#endif // NOTIFICATOR_H diff --git a/src/qt/openuridialog.cpp b/src/qt/openuridialog.cpp index e801dfa..64061b0 100644 --- a/src/qt/openuridialog.cpp +++ b/src/qt/openuridialog.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -17,7 +17,7 @@ OpenURIDialog::OpenURIDialog(QWidget *parent) : { ui->setupUi(this); #if QT_VERSION >= 0x040700 - ui->uriEdit->setPlaceholderText("bitmark:"); + ui->uriEdit->setPlaceholderText("pfennig:"); #endif } @@ -49,5 +49,5 @@ void OpenURIDialog::on_selectFileButton_clicked() if(filename.isEmpty()) return; QUrl fileUri = QUrl::fromLocalFile(filename); - ui->uriEdit->setText("bitmark:?r=" + QUrl::toPercentEncoding(fileUri.toString())); + ui->uriEdit->setText("pfennig:?r=" + QUrl::toPercentEncoding(fileUri.toString())); } diff --git a/src/qt/openuridialog.cpp~ b/src/qt/openuridialog.cpp~ new file mode 100644 index 0000000..1e7aa59 --- /dev/null +++ b/src/qt/openuridialog.cpp~ @@ -0,0 +1,53 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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("pfennig:"); +#endif +} + +OpenURIDialog::~OpenURIDialog() +{ + delete ui; +} + +QString OpenURIDialog::getURI() +{ + return ui->uriEdit->text(); +} + +void OpenURIDialog::accept() +{ + SendCoinsRecipient rcp; + if(GUIUtil::parseBitmarkURI(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("pfennig:?r=" + QUrl::toPercentEncoding(fileUri.toString())); +} diff --git a/src/qt/openuridialog.h b/src/qt/openuridialog.h index 08c1946..a2947da 100644 --- a/src/qt/openuridialog.h +++ b/src/qt/openuridialog.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/openuridialog.h~ b/src/qt/openuridialog.h~ new file mode 100644 index 0000000..a66c3f9 --- /dev/null +++ b/src/qt/openuridialog.h~ @@ -0,0 +1,35 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 f9e9685..c5d0f11 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/optionsdialog.cpp~ b/src/qt/optionsdialog.cpp~ new file mode 100644 index 0000000..d978cfc --- /dev/null +++ b/src/qt/optionsdialog.cpp~ @@ -0,0 +1,303 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmark-config.h" +#endif + +#include "optionsdialog.h" +#include "ui_optionsdialog.h" + +#include "bitmarkunits.h" +#include "guiutil.h" +#include "monitoreddatamapper.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), + 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 + ui->mapPortUpnp->setEnabled(false); +#endif + + ui->proxyIp->setEnabled(false); + 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); + ui->socksVersion->setCurrentIndex(0); + + 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))); + + ui->proxyIp->installEventFilter(this); + + /* Window elements init */ +#ifdef Q_OS_MAC + /* remove Window tab on Mac */ + ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->tabWindow)); +#endif + + /* Display elements init */ + QDir translations(":translations"); + ui->lang->addItem(QString("(") + tr("default") + QString(")"), QVariant("")); + foreach(const QString &langStr, translations.entryList()) + { + QLocale locale(langStr); + + /** check if the locale name consists of 2 parts (language_country) */ + if(langStr.contains("_")) + { +#if QT_VERSION >= 0x040800 + /** display language strings as "native language - native country (locale name)", e.g. "Deutsch - Deutschland (de)" */ + ui->lang->addItem(locale.nativeLanguageName() + QString(" - ") + locale.nativeCountryName() + QString(" (") + langStr + QString(")"), QVariant(langStr)); +#else + /** display language strings as "language - country (locale name)", e.g. "German - Germany (de)" */ + ui->lang->addItem(QLocale::languageToString(locale.language()) + QString(" - ") + QLocale::countryToString(locale.country()) + QString(" (") + langStr + QString(")"), QVariant(langStr)); +#endif + } + else + { +#if QT_VERSION >= 0x040800 + /** display language strings as "native language (locale name)", e.g. "Deutsch (de)" */ + ui->lang->addItem(locale.nativeLanguageName() + QString(" (") + langStr + QString(")"), QVariant(langStr)); +#else + /** display language strings as "language (locale name)", e.g. "German (de)" */ + ui->lang->addItem(QLocale::languageToString(locale.language()) + QString(" (") + langStr + QString(")"), QVariant(langStr)); +#endif + } + } +#if QT_VERSION >= 0x040700 + ui->thirdPartyTxUrls->setPlaceholderText("https://example.com/tx/%s"); +#endif + + ui->unit->setModel(new BitmarkUnits(this)); + ui->transactionFee->setSingleStep(CTransaction::nMinTxFee); + + /* Widget-to-option mapper */ + mapper = new MonitoredDataMapper(this); + mapper->setSubmitPolicy(QDataWidgetMapper::ManualSubmit); + mapper->setOrientation(Qt::Vertical); + + /* setup/change UI elements when proxy IP is invalid/valid */ + connect(this, SIGNAL(proxyIpChecks(QValidatedLineEdit *, int)), this, SLOT(doProxyIpChecks(QValidatedLineEdit *, int))); +} + +OptionsDialog::~OptionsDialog() +{ + GUIUtil::saveWindowGeometry("nOptionsDialogWindow", this); + delete ui; +} + +void OptionsDialog::setModel(OptionsModel *model) +{ + this->model = 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); + setMapper(); + mapper->toFirst(); + } + + /* update the display unit, to not use the default ("PFG") */ + updateDisplayUnit(); + + /* warn when one of the following settings changes by user action (placed here so init via mapper doesn't trigger them) */ + + /* 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->bitmarkAtStartup, 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); + + mapper->addMapping(ui->connectSocks, OptionsModel::ProxyUse); + mapper->addMapping(ui->proxyIp, OptionsModel::ProxyIP); + mapper->addMapping(ui->proxyPort, OptionsModel::ProxyPort); + mapper->addMapping(ui->socksVersion, OptionsModel::ProxySocksVersion); + + /* Window */ +#ifndef Q_OS_MAC + mapper->addMapping(ui->minimizeToTray, OptionsModel::MinimizeToTray); + mapper->addMapping(ui->minimizeOnClose, OptionsModel::MinimizeOnClose); +#endif + + /* Display */ + 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::enableOkButton() +{ + /* prevent enabling of the OK button when data modified, if there is an invalid proxy address present */ + if(fProxyIpValid) + setOkButtonState(true); +} + +void OptionsDialog::disableOkButton() +{ + setOkButtonState(false); +} + +void OptionsDialog::setOkButtonState(bool fState) +{ + ui->okButton->setEnabled(fState); +} + +void OptionsDialog::on_resetButton_clicked() +{ + if(model) + { + // confirmation dialog + QMessageBox::StandardButton btnRetVal = QMessageBox::question(this, tr("Confirm options reset"), + 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; + + /* reset all options and close GUI */ + model->Reset(); + QApplication::quit(); + } +} + +void OptionsDialog::on_okButton_clicked() +{ + mapper->submit(); + accept(); +} + +void OptionsDialog::on_cancelButton_clicked() +{ + reject(); +} + +void OptionsDialog::showRestartWarning(bool fPersistent) +{ + ui->statusLabel->setStyleSheet("QLabel { color: red; }"); + + if(fPersistent) + { + 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::clearStatusLabel() +{ + ui->statusLabel->clear(); +} + +void OptionsDialog::updateDisplayUnit() +{ + if(model) + { + /* Update transactionFee with the current unit */ + ui->transactionFee->setDisplayUnit(model->getDisplayUnit()); + } +} + +void OptionsDialog::doProxyIpChecks(QValidatedLineEdit *pUiProxyIp, int nProxyPort) +{ + Q_UNUSED(nProxyPort); + + const std::string strAddrProxy = pUiProxyIp->text().toStdString(); + CService addrProxy; + + /* Check for a valid IPv4 / IPv6 address */ + if (!(fProxyIpValid = LookupNumeric(strAddrProxy.c_str(), addrProxy))) + { + disableOkButton(); + pUiProxyIp->setValid(false); + ui->statusLabel->setStyleSheet("QLabel { color: red; }"); + ui->statusLabel->setText(tr("The supplied proxy address is invalid.")); + } + else + { + enableOkButton(); + ui->statusLabel->clear(); + } +} + +bool OptionsDialog::eventFilter(QObject *object, QEvent *event) +{ + if(event->type() == QEvent::FocusOut) + { + if(object == ui->proxyIp) + { + 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 68c5be9..2155b03 100644 --- a/src/qt/optionsdialog.h +++ b/src/qt/optionsdialog.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/optionsdialog.h~ b/src/qt/optionsdialog.h~ new file mode 100644 index 0000000..9af3688 --- /dev/null +++ b/src/qt/optionsdialog.h~ @@ -0,0 +1,60 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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; +} + +/** Preferences dialog. */ +class OptionsDialog : public QDialog +{ + Q_OBJECT + +public: + explicit OptionsDialog(QWidget *parent); + ~OptionsDialog(); + + void setModel(OptionsModel *model); + void setMapper(); + +protected: + bool eventFilter(QObject *object, QEvent *event); + +private slots: + /* 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 showRestartWarning(bool fPersistent = false); + void clearStatusLabel(); + void updateDisplayUnit(); + void doProxyIpChecks(QValidatedLineEdit *pUiProxyIp, int nProxyPort); + +signals: + void proxyIpChecks(QValidatedLineEdit *pUiProxyIp, int nProxyPort); + +private: + Ui::OptionsDialog *ui; + OptionsModel *model; + MonitoredDataMapper *mapper; + bool fProxyIpValid; +}; + +#endif // OPTIONSDIALOG_H diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index a43e490..c69141e 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/optionsmodel.cpp~ b/src/qt/optionsmodel.cpp~ new file mode 100644 index 0000000..adc4d03 --- /dev/null +++ b/src/qt/optionsmodel.cpp~ @@ -0,0 +1,385 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmark-config.h" +#endif + +#include "optionsmodel.h" + +#include "bitmarkunits.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) +{ + Init(); +} + +void OptionsModel::addOverriddenOption(const std::string &option) +{ + strOverriddenByCommandLine += QString::fromStdString(option) + "=" + QString::fromStdString(mapArgs[option]) + " "; +} + +// Writes all missing QSettings with their default values +void OptionsModel::Init() +{ + QSettings settings; + + // Ensure restart flag is unset on client startup + setRestartRequired(false); + + // 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", BitmarkUnits::PFG); + 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 from our QSettings object + settings.clear(); + + // default setting for OptionsModel::StartAtStartup - disabled + if (GUIUtil::GetStartOnSystemStartup()) + GUIUtil::SetStartOnSystemStartup(false); +} + +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) + { + QSettings settings; + switch(index.row()) + { + case StartAtStartup: + return GUIUtil::GetStartOnSystemStartup(); + case MinimizeToTray: + return fMinimizeToTray; + case MapPortUPnP: +#ifdef USE_UPNP + return settings.value("fUseUPnP"); +#else + return false; +#endif + case MinimizeOnClose: + return fMinimizeOnClose; + + // default proxy + case ProxyUse: + return settings.value("fUseProxy", false); + case ProxyIP: { + // 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: { + // 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: + // 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 nDisplayUnit; + case DisplayAddresses: + return bDisplayAddresses; + case ThirdPartyTxUrls: + return strThirdPartyTxUrls; + case Language: + return settings.value("language"); + case CoinControlFeatures: + return fCoinControlFeatures; + case DatabaseCache: + return settings.value("nDatabaseCache"); + case ThreadsScriptVerif: + return settings.value("nThreadsScriptVerif"); + default: + return QVariant(); + } + } + 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 */ + if(role == Qt::EditRole) + { + QSettings settings; + switch(index.row()) + { + case StartAtStartup: + successful = GUIUtil::SetStartOnSystemStartup(value.toBool()); + break; + case MinimizeToTray: + fMinimizeToTray = value.toBool(); + settings.setValue("fMinimizeToTray", fMinimizeToTray); + break; + case MapPortUPnP: // core option - can be changed on-the-fly + settings.setValue("fUseUPnP", value.toBool()); + MapPort(value.toBool()); + break; + case MinimizeOnClose: + fMinimizeOnClose = value.toBool(); + settings.setValue("fMinimizeOnClose", fMinimizeOnClose); + break; + + // default proxy + case ProxyUse: + if (settings.value("fUseProxy") != value) { + settings.setValue("fUseProxy", value.toBool()); + setRestartRequired(true); + } + break; + case ProxyIP: { + // 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: { + // 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: { + if (settings.value("nSocksVersion") != value) { + settings.setValue("nSocksVersion", value.toInt()); + setRestartRequired(true); + } + } + break; +#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", (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); + emit displayUnitChanged(nDisplayUnit); + break; + case DisplayAddresses: + 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: + 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; + } + } + emit dataChanged(index, index); + + return successful; +} + +bool OptionsModel::getProxySettings(QNetworkProxy& proxy) const +{ + // 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 df6d0e4..6a569e4 100644 --- a/src/qt/optionsmodel.h +++ b/src/qt/optionsmodel.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -12,7 +12,7 @@ QT_BEGIN_NAMESPACE class QNetworkProxy; QT_END_NAMESPACE -/** Interface from Qt to configuration data structure for Bitmark client. +/** Interface from Qt to configuration data structure for Pfennig client. To Qt, the options are presented as a list with the different options laid out vertically. This can be changed to a tree once the settings become sufficiently diff --git a/src/qt/optionsmodel.h~ b/src/qt/optionsmodel.h~ new file mode 100644 index 0000000..e699a0c --- /dev/null +++ b/src/qt/optionsmodel.h~ @@ -0,0 +1,91 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 Pfennig client. + To Qt, the options are presented as a list with the different options + laid out vertically. + This can be changed to a tree once the settings become sufficiently + complex. + */ +class OptionsModel : public QAbstractListModel +{ + Q_OBJECT + +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, // BitmarkUnits::Unit + DisplayAddresses, // bool + ThirdPartyTxUrls, // QString + Language, // QString + CoinControlFeatures, // bool + ThreadsScriptVerif, // int + DatabaseCache, // int + SpendZeroConfChange, // bool + OptionIDRowCount, + }; + + void Init(); + void Reset(); + + 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 */ + bool getMinimizeToTray() { return fMinimizeToTray; } + bool getMinimizeOnClose() { return fMinimizeOnClose; } + int getDisplayUnit() { return nDisplayUnit; } + bool getDisplayAddresses() { return bDisplayAddresses; } + 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: + /* 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 94f1c16..d22fdde 100644 --- a/src/qt/overviewpage.cpp +++ b/src/qt/overviewpage.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/overviewpage.cpp~ b/src/qt/overviewpage.cpp~ new file mode 100644 index 0000000..5311599 --- /dev/null +++ b/src/qt/overviewpage.cpp~ @@ -0,0 +1,220 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmarkunits.h" +#include "clientmodel.h" +#include "guiconstants.h" +#include "guiutil.h" +#include "optionsmodel.h" +#include "transactionfilterproxy.h" +#include "transactiontablemodel.h" +#include "walletmodel.h" + +#include +#include + +#define DECORATION_SIZE 64 +#define NUM_ITEMS 3 + +class TxViewDelegate : public QAbstractItemDelegate +{ + Q_OBJECT +public: + TxViewDelegate(): QAbstractItemDelegate(), unit(BitmarkUnits::PFG) + { + + } + + inline void paint(QPainter *painter, const QStyleOptionViewItem &option, + const QModelIndex &index ) const + { + painter->save(); + + QIcon icon = qvariant_cast(index.data(Qt::DecorationRole)); + QRect mainRect = option.rect; + QRect decorationRect(mainRect.topLeft(), QSize(DECORATION_SIZE, DECORATION_SIZE)); + int xspace = DECORATION_SIZE + 8; + int ypad = 6; + int halfheight = (mainRect.height() - 2*ypad)/2; + QRect amountRect(mainRect.left() + xspace, mainRect.top()+ypad, mainRect.width() - xspace, halfheight); + QRect addressRect(mainRect.left() + xspace, mainRect.top()+ypad+halfheight, mainRect.width() - xspace, halfheight); + icon.paint(painter, decorationRect); + + QDateTime date = index.data(TransactionTableModel::DateRole).toDateTime(); + QString address = index.data(Qt::DisplayRole).toString(); + qint64 amount = index.data(TransactionTableModel::AmountRole).toLongLong(); + bool confirmed = index.data(TransactionTableModel::ConfirmedRole).toBool(); + QVariant value = index.data(Qt::ForegroundRole); + QColor foreground = option.palette.color(QPalette::Text); + if(value.canConvert()) + { + QBrush brush = qvariant_cast(value); + foreground = brush.color(); + } + + painter->setPen(foreground); + painter->drawText(addressRect, Qt::AlignLeft|Qt::AlignVCenter, address); + + if(amount < 0) + { + foreground = COLOR_NEGATIVE; + } + else if(!confirmed) + { + foreground = COLOR_UNCONFIRMED; + } + else + { + foreground = option.palette.color(QPalette::Text); + } + painter->setPen(foreground); + QString amountText = BitmarkUnits::formatWithUnit(unit, amount, true); + if(!confirmed) + { + amountText = QString("[") + amountText + QString("]"); + } + painter->drawText(amountRect, Qt::AlignRight|Qt::AlignVCenter, amountText); + + painter->setPen(option.palette.color(QPalette::Text)); + painter->drawText(amountRect, Qt::AlignLeft|Qt::AlignVCenter, GUIUtil::dateTimeStr(date)); + + painter->restore(); + } + + inline QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const + { + return QSize(DECORATION_SIZE, DECORATION_SIZE); + } + + int unit; + +}; +#include "overviewpage.moc" + +OverviewPage::OverviewPage(QWidget *parent) : + QWidget(parent), + ui(new Ui::OverviewPage), + clientModel(0), + walletModel(0), + currentBalance(-1), + currentUnconfirmedBalance(-1), + currentImmatureBalance(-1), + txdelegate(new TxViewDelegate()), + filter(0) +{ + ui->setupUi(this); + + // Recent transactions + ui->listTransactions->setItemDelegate(txdelegate); + ui->listTransactions->setIconSize(QSize(DECORATION_SIZE, DECORATION_SIZE)); + ui->listTransactions->setMinimumHeight(NUM_ITEMS * (DECORATION_SIZE + 2)); + ui->listTransactions->setAttribute(Qt::WA_MacShowFocusRect, false); + + connect(ui->listTransactions, SIGNAL(clicked(QModelIndex)), this, SLOT(handleTransactionClicked(QModelIndex))); + + // init "out of sync" warning labels + ui->labelWalletStatus->setText("(" + tr("out of sync") + ")"); + ui->labelTransactionsStatus->setText("(" + tr("out of sync") + ")"); + + // start with displaying the "out of sync" warnings + showOutOfSyncWarning(true); +} + +void OverviewPage::handleTransactionClicked(const QModelIndex &index) +{ + if(filter) + emit transactionClicked(filter->mapToSource(index)); +} + +OverviewPage::~OverviewPage() +{ + delete ui; +} + +void OverviewPage::setBalance(qint64 balance, qint64 unconfirmedBalance, qint64 immatureBalance) +{ + int unit = walletModel->getOptionsModel()->getDisplayUnit(); + currentBalance = balance; + currentUnconfirmedBalance = unconfirmedBalance; + currentImmatureBalance = immatureBalance; + ui->labelBalance->setText(BitmarkUnits::formatWithUnit(unit, balance)); + ui->labelUnconfirmed->setText(BitmarkUnits::formatWithUnit(unit, unconfirmedBalance)); + ui->labelImmature->setText(BitmarkUnits::formatWithUnit(unit, immatureBalance)); + ui->labelTotal->setText(BitmarkUnits::formatWithUnit(unit, balance + unconfirmedBalance + immatureBalance)); + + // only show immature (newly mined) balance if it's non-zero, so as not to complicate things + // for the non-mining users + bool showImmature = immatureBalance != 0; + ui->labelImmature->setVisible(showImmature); + ui->labelImmatureText->setVisible(showImmature); +} + +void OverviewPage::setClientModel(ClientModel *model) +{ + this->clientModel = model; + if(model) + { + // Show warning if this is a prerelease version + connect(model, SIGNAL(alertsChanged(QString)), this, SLOT(updateAlerts(QString))); + updateAlerts(model->getStatusBarWarnings()); + } +} + +void OverviewPage::setWalletModel(WalletModel *model) +{ + this->walletModel = model; + if(model && model->getOptionsModel()) + { + // Set up transaction list + filter = new TransactionFilterProxy(); + filter->setSourceModel(model->getTransactionTableModel()); + filter->setLimit(NUM_ITEMS); + filter->setDynamicSortFilter(true); + filter->setSortRole(Qt::EditRole); + filter->setShowInactive(false); + filter->sort(TransactionTableModel::Status, Qt::DescendingOrder); + + ui->listTransactions->setModel(filter); + ui->listTransactions->setModelColumn(TransactionTableModel::ToAddress); + + // Keep up to date with wallet + 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())); + } + + // update the display unit, to not use the default ("PFG") + updateDisplayUnit(); +} + +void OverviewPage::updateDisplayUnit() +{ + if(walletModel && walletModel->getOptionsModel()) + { + if(currentBalance != -1) + setBalance(currentBalance, currentUnconfirmedBalance, currentImmatureBalance); + + // Update txdelegate->unit with the current unit + txdelegate->unit = walletModel->getOptionsModel()->getDisplayUnit(); + + ui->listTransactions->update(); + } +} + +void OverviewPage::updateAlerts(const QString &warnings) +{ + this->ui->labelAlerts->setVisible(!warnings.isEmpty()); + this->ui->labelAlerts->setText(warnings); +} + +void OverviewPage::showOutOfSyncWarning(bool fShow) +{ + ui->labelWalletStatus->setVisible(fShow); + ui->labelTransactionsStatus->setVisible(fShow); +} diff --git a/src/qt/overviewpage.h b/src/qt/overviewpage.h index b6be3a5..dd35d27 100644 --- a/src/qt/overviewpage.h +++ b/src/qt/overviewpage.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/overviewpage.h~ b/src/qt/overviewpage.h~ new file mode 100644 index 0000000..50aed5a --- /dev/null +++ b/src/qt/overviewpage.h~ @@ -0,0 +1,60 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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; +} + +QT_BEGIN_NAMESPACE +class QModelIndex; +QT_END_NAMESPACE + +/** Overview ("home") page widget */ +class OverviewPage : public QWidget +{ + Q_OBJECT + +public: + explicit OverviewPage(QWidget *parent = 0); + ~OverviewPage(); + + void setClientModel(ClientModel *clientModel); + void setWalletModel(WalletModel *walletModel); + void showOutOfSyncWarning(bool fShow); + +public slots: + void setBalance(qint64 balance, qint64 unconfirmedBalance, qint64 immatureBalance); + +signals: + void transactionClicked(const QModelIndex &index); + +private: + Ui::OverviewPage *ui; + ClientModel *clientModel; + WalletModel *walletModel; + qint64 currentBalance; + qint64 currentUnconfirmedBalance; + qint64 currentImmatureBalance; + + TxViewDelegate *txdelegate; + TransactionFilterProxy *filter; + +private slots: + void updateDisplayUnit(); + void handleTransactionClicked(const QModelIndex &index); + void updateAlerts(const QString &warnings); +}; + +#endif // OVERVIEWPAGE_H diff --git a/src/qt/paymentrequestplus.cpp b/src/qt/paymentrequestplus.cpp index ade1e36..b9ffb0d 100644 --- a/src/qt/paymentrequestplus.cpp +++ b/src/qt/paymentrequestplus.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/paymentrequestplus.cpp~ b/src/qt/paymentrequestplus.cpp~ new file mode 100644 index 0000000..1b250ad --- /dev/null +++ b/src/qt/paymentrequestplus.cpp~ @@ -0,0 +1,209 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 index ef368da..347607e 100644 --- a/src/qt/paymentrequestplus.h +++ b/src/qt/paymentrequestplus.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/paymentrequestplus.h~ b/src/qt/paymentrequestplus.h~ new file mode 100644 index 0000000..7d101fc --- /dev/null +++ b/src/qt/paymentrequestplus.h~ @@ -0,0 +1,47 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 3d4149f..6c365ed 100644 --- a/src/qt/paymentserver.cpp +++ b/src/qt/paymentserver.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -48,10 +48,10 @@ using namespace boost; const int BITMARK_IPC_CONNECT_TIMEOUT = 1000; // milliseconds -const QString BITMARK_IPC_PREFIX("bitmark:"); -const char* BITMARK_REQUEST_MIMETYPE = "application/bitmark-paymentrequest"; -const char* BITMARK_PAYMENTACK_MIMETYPE = "application/bitmark-paymentack"; -const char* BITMARK_PAYMENTACK_CONTENTTYPE = "application/bitmark-payment"; +const QString BITMARK_IPC_PREFIX("pfennig:"); +const char* BITMARK_REQUEST_MIMETYPE = "application/pfennig-paymentrequest"; +const char* BITMARK_PAYMENTACK_MIMETYPE = "application/pfennig-paymentack"; +const char* BITMARK_PAYMENTACK_CONTENTTYPE = "application/pfennig-payment"; X509_STORE* PaymentServer::certStore = NULL; void PaymentServer::freeCertStore() @@ -70,7 +70,7 @@ void PaymentServer::freeCertStore() // static QString ipcServerName() { - QString name("PfennigQt"); + QString name("pfennigQt"); // Append a simple hash of the datadir // Note that GetDataDir(true) returns a different path @@ -291,7 +291,7 @@ PaymentServer::PaymentServer(QObject* parent, bool startLocalServer) : 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 bitmark: click-to-pay handler")); + tr("Cannot start pfennig: click-to-pay handler")); } else { connect(uriServer, SIGNAL(newConnection()), this, SLOT(handleURIConnection())); @@ -415,7 +415,7 @@ void PaymentServer::handleURIOrFile(const QString& s) emit receivedPaymentRequest(recipient); else emit message(tr("URI handling"), - tr("URI can not be parsed! This can be caused by an invalid Pfennig address or malformed URI parameters."), + tr("URI can not be parsed! This can be caused by an invalid pfennig address or malformed URI parameters."), CClientUIInterface::ICON_WARNING); return; diff --git a/src/qt/paymentserver.cpp~ b/src/qt/paymentserver.cpp~ new file mode 100644 index 0000000..4966d74 --- /dev/null +++ b/src/qt/paymentserver.cpp~ @@ -0,0 +1,677 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "paymentserver.h" + +#include "bitmarkunits.h" +#include "guiconstants.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 BITMARK_IPC_CONNECT_TIMEOUT = 1000; // milliseconds +const QString BITMARK_IPC_PREFIX("pfennig:"); +const char* BITMARK_REQUEST_MIMETYPE = "application/pfennig-paymentrequest"; +const char* BITMARK_PAYMENTACK_MIMETYPE = "application/pfennig-paymentack"; +const char* BITMARK_PAYMENTACK_CONTENTTYPE = "application/pfennig-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: +// testnet / non-testnet +// data directory +// +static QString ipcServerName() +{ + QString name("pfennigQt"); + + // Append a simple hash of the datadir + // Note that GetDataDir(true) returns a different path + // for -testnet versus main net + QString ddir(QString::fromStdString(GetDataDir(true).string())); + name.append(QString::number(qHash(ddir))); + + return name; +} + +// +// 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); +} + +// +// 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(BITMARK_IPC_PREFIX, Qt::CaseInsensitive)) // bitmark: URI + { + savedPaymentRequests.append(arg); + + SendCoinsRecipient r; + if (GUIUtil::parseBitmarkURI(arg, &r) && !r.address.isEmpty()) + { + CBitmarkAddress 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. +// If the server isn't already running, startup continues, +// and the items in savedPaymentRequest will be handled +// when uiReady() is called. +// +bool PaymentServer::ipcSendCommandLine() +{ + bool fResult = false; + foreach (const QString& r, savedPaymentRequests) + { + QLocalSocket* socket = new QLocalSocket(); + socket->connectToServer(ipcServerName(), QIODevice::WriteOnly); + if (!socket->waitForConnected(BITMARK_IPC_CONNECT_TIMEOUT)) + { + delete socket; + return false; + } + + QByteArray block; + QDataStream out(&block, QIODevice::WriteOnly); + out.setVersion(QDataStream::Qt_4_0); + out << r; + out.device()->seek(0); + socket->write(block); + socket->flush(); + + socket->waitForBytesWritten(BITMARK_IPC_CONNECT_TIMEOUT); + socket->disconnectFromServer(); + delete socket; + fResult = true; + } + + return fResult; +} + +PaymentServer::PaymentServer(QObject* parent, bool startLocalServer) : + QObject(parent), + saveURIs(true), + uriServer(0), + netManager(0), + optionsModel(0) +{ + // 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 bitmark: 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); + + if (startLocalServer) + { + 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 pfennig: click-to-pay handler")); + } + else { + connect(uriServer, SIGNAL(newConnection()), this, SLOT(handleURIConnection())); + connect(this, SIGNAL(receivedPaymentACK(QString)), this, SLOT(handlePaymentACK(QString))); + } + } +} + +PaymentServer::~PaymentServer() +{ + google::protobuf::ShutdownProtobufLibrary(); +} + +// +// OSX-specific way of handling bitmark: URIs and +// PaymentRequest mime types +// +bool PaymentServer::eventFilter(QObject *object, QEvent *event) +{ + // clicking on bitmark: 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 bitmark: 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) + { + handleURIOrFile(s); + } + savedPaymentRequests.clear(); +} + +void PaymentServer::handleURIOrFile(const QString& s) +{ + if (saveURIs) + { + savedPaymentRequests.append(s); + return; + } + + if (s.startsWith(BITMARK_IPC_PREFIX, Qt::CaseInsensitive)) // bitmark: 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::parseBitmarkURI(s, &recipient)) + emit receivedPaymentRequest(recipient); + else + emit message(tr("URI handling"), + tr("URI can not be parsed! This can be caused by an invalid pfennig 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(); + + while (clientConnection->bytesAvailable() < (int)sizeof(quint32)) + clientConnection->waitForReadyRead(); + + connect(clientConnection, SIGNAL(disconnected()), + clientConnection, SLOT(deleteLater())); + + QDataStream in(clientConnection); + in.setVersion(QDataStream::Qt_4_0); + if (clientConnection->bytesAvailable() < (int)sizeof(quint16)) { + return; + } + QString msg; + in >> msg; + + 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(CBitmarkAddress(dest).ToString())); + } + else if (!recipient.authenticatedMerchant.isEmpty()){ + // Insecure payments to custom bitmark 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(BitmarkUnits::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", BITMARK_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, BITMARK_PAYMENTACK_CONTENTTYPE); + netRequest.setRawHeader("User-Agent", CLIENT_NAME.c_str()); + netRequest.setRawHeader("Accept", BITMARK_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 e7e0813..18a1a2a 100644 --- a/src/qt/paymentserver.h +++ b/src/qt/paymentserver.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/paymentserver.h~ b/src/qt/paymentserver.h~ new file mode 100644 index 0000000..0dcb138 --- /dev/null +++ b/src/qt/paymentserver.h~ @@ -0,0 +1,139 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 +// bitmark: URIs +// +// This is somewhat tricky, because we have to deal with +// the situation where the user clicks on a link during +// startup/initialization, when the splash-screen is up +// but the main window (and the Send Coins tab) is not. +// +// So, the strategy is: +// +// Create the server, and register the event handler, +// when the application is created. Save any URIs +// received at or during startup in a list. +// +// When startup is finished and the main window is +// shown, a signal is sent to slot uiReady(), which +// emits a receivedURL() signal for any payment +// requests that happened during startup. +// +// After startup, receivedURL() happens as usual. +// +// This class has one more feature: a static +// method that finds URIs passed in the command line +// 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 + +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(); + + // parent should be QApplication object + PaymentServer(QObject* parent, bool startLocalServer = true); + ~PaymentServer(); + + // 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: + // 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/qvalidatedlineedit.cpp b/src/qt/qvalidatedlineedit.cpp index fa10d2d..5e92cf8 100644 --- a/src/qt/qvalidatedlineedit.cpp +++ b/src/qt/qvalidatedlineedit.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/qvalidatedlineedit.cpp~ b/src/qt/qvalidatedlineedit.cpp~ new file mode 100644 index 0000000..602e30b --- /dev/null +++ b/src/qt/qvalidatedlineedit.cpp~ @@ -0,0 +1,108 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmarkaddressvalidator.h" +#include "guiconstants.h" + +QValidatedLineEdit::QValidatedLineEdit(QWidget *parent) : + QLineEdit(parent), + valid(true), + checkValidator(0) +{ + connect(this, SIGNAL(textChanged(QString)), this, SLOT(markValid())); +} + +void QValidatedLineEdit::setValid(bool valid) +{ + if(valid == this->valid) + { + return; + } + + if(valid) + { + setStyleSheet(""); + } + else + { + setStyleSheet(STYLE_INVALID); + } + this->valid = valid; +} + +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); +} + +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 64389d9..086c206 100644 --- a/src/qt/qvalidatedlineedit.h +++ b/src/qt/qvalidatedlineedit.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/qvalidatedlineedit.h~ b/src/qt/qvalidatedlineedit.h~ new file mode 100644 index 0000000..648ffa9 --- /dev/null +++ b/src/qt/qvalidatedlineedit.h~ @@ -0,0 +1,40 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +#include + +/** Line edit that can be marked as "invalid" to show input validation feedback. When marked as invalid, + it will get a red background until it is focused. + */ +class QValidatedLineEdit : public QLineEdit +{ + Q_OBJECT + +public: + 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 c650d73..3347331 100644 --- a/src/qt/qvaluecombobox.cpp +++ b/src/qt/qvaluecombobox.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/qvaluecombobox.cpp~ b/src/qt/qvaluecombobox.cpp~ new file mode 100644 index 0000000..f4edb62 --- /dev/null +++ b/src/qt/qvaluecombobox.cpp~ @@ -0,0 +1,32 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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) : + QComboBox(parent), role(Qt::UserRole) +{ + connect(this, SIGNAL(currentIndexChanged(int)), this, SLOT(handleSelectionChanged(int))); +} + +QVariant QValueComboBox::value() const +{ + return itemData(currentIndex(), role); +} + +void QValueComboBox::setValue(const QVariant &value) +{ + setCurrentIndex(findData(value, role)); +} + +void QValueComboBox::setRole(int role) +{ + this->role = role; +} + +void QValueComboBox::handleSelectionChanged(int idx) +{ + emit valueChanged(); +} diff --git a/src/qt/qvaluecombobox.h b/src/qt/qvaluecombobox.h index 34649d4..7331342 100644 --- a/src/qt/qvaluecombobox.h +++ b/src/qt/qvaluecombobox.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/qvaluecombobox.h~ b/src/qt/qvaluecombobox.h~ new file mode 100644 index 0000000..f9a8344 --- /dev/null +++ b/src/qt/qvaluecombobox.h~ @@ -0,0 +1,38 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +#include +#include + +/* QComboBox that can be used with QDataWidgetMapper to select ordinal values from a model. */ +class QValueComboBox : public QComboBox +{ + Q_OBJECT + + Q_PROPERTY(QVariant value READ value WRITE setValue NOTIFY valueChanged USER true) + +public: + explicit QValueComboBox(QWidget *parent = 0); + + QVariant value() const; + void setValue(const QVariant &value); + + /** Specify model role to use as ordinal value (defaults to Qt::UserRole) */ + void setRole(int role); + +signals: + void valueChanged(); + +private: + int role; + +private slots: + void handleSelectionChanged(int idx); +}; + +#endif // QVALUECOMBOBOX_H diff --git a/src/qt/receivecoinsdialog.cpp b/src/qt/receivecoinsdialog.cpp index 36ddbdb..ee85574 100644 --- a/src/qt/receivecoinsdialog.cpp +++ b/src/qt/receivecoinsdialog.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/receivecoinsdialog.cpp~ b/src/qt/receivecoinsdialog.cpp~ new file mode 100644 index 0000000..bbf0bde --- /dev/null +++ b/src/qt/receivecoinsdialog.cpp~ @@ -0,0 +1,265 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmarkunits.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 index db82eb2..1b5757e 100644 --- a/src/qt/receivecoinsdialog.h +++ b/src/qt/receivecoinsdialog.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/receivecoinsdialog.h~ b/src/qt/receivecoinsdialog.h~ new file mode 100644 index 0000000..592984b --- /dev/null +++ b/src/qt/receivecoinsdialog.h~ @@ -0,0 +1,76 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 bitmarks */ +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 index 27fe288..825fa76 100644 --- a/src/qt/receiverequestdialog.cpp +++ b/src/qt/receiverequestdialog.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/receiverequestdialog.cpp~ b/src/qt/receiverequestdialog.cpp~ new file mode 100644 index 0000000..261aba3 --- /dev/null +++ b/src/qt/receiverequestdialog.cpp~ @@ -0,0 +1,198 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmarkunits.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 "bitmark-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::formatBitmarkURI(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")+": " + BitmarkUnits::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::formatBitmarkURI(info)); +} + +void ReceiveRequestDialog::on_btnCopyAddress_clicked() +{ + GUIUtil::setClipboard(info.address); +} diff --git a/src/qt/receiverequestdialog.h b/src/qt/receiverequestdialog.h index cf6d45c..49fb8fa 100644 --- a/src/qt/receiverequestdialog.h +++ b/src/qt/receiverequestdialog.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/receiverequestdialog.h~ b/src/qt/receiverequestdialog.h~ new file mode 100644 index 0000000..cc89229 --- /dev/null +++ b/src/qt/receiverequestdialog.h~ @@ -0,0 +1,69 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 index 6d4262b..1410f7b 100644 --- a/src/qt/recentrequeststablemodel.cpp +++ b/src/qt/recentrequeststablemodel.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/recentrequeststablemodel.cpp~ b/src/qt/recentrequeststablemodel.cpp~ new file mode 100644 index 0000000..a5c87cb --- /dev/null +++ b/src/qt/recentrequeststablemodel.cpp~ @@ -0,0 +1,209 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmarkunits.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 BitmarkUnits::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 index 228943a..de38330 100644 --- a/src/qt/recentrequeststablemodel.h +++ b/src/qt/recentrequeststablemodel.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/recentrequeststablemodel.h~ b/src/qt/recentrequeststablemodel.h~ new file mode 100644 index 0000000..b26957a --- /dev/null +++ b/src/qt/recentrequeststablemodel.h~ @@ -0,0 +1,103 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 / bitmark: 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/bitmark-qt-res.rc b/src/qt/res/bitmark-qt-res.rc index 14e1735..febbd6b 100644 --- a/src/qt/res/bitmark-qt-res.rc +++ b/src/qt/res/bitmark-qt-res.rc @@ -20,14 +20,14 @@ BEGIN BEGIN BLOCK "040904E4" // U.S. English - multilingual (hex) BEGIN - VALUE "CompanyName", "Pfennig" - VALUE "FileDescription", "Pfennig Core (OSS GUI client for Pfennig)" + VALUE "CompanyName", "pfennig" + VALUE "FileDescription", "pfennig Core (OSS GUI client for pfennig)" VALUE "FileVersion", VER_FILEVERSION_STR VALUE "InternalName", "pfennig-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", "pfennig-qt.exe" - VALUE "ProductName", "Pfennig Core" + VALUE "ProductName", "pfennig Core" VALUE "ProductVersion", VER_PRODUCTVERSION_STR END END diff --git a/src/qt/res/bitmark-qt-res.rc~ b/src/qt/res/bitmark-qt-res.rc~ new file mode 100644 index 0000000..a03c53e --- /dev/null +++ b/src/qt/res/bitmark-qt-res.rc~ @@ -0,0 +1,39 @@ +IDI_ICON1 ICON DISCARDABLE "icons/bitmark.ico" +IDI_ICON2 ICON DISCARDABLE "icons/bitmark_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 Core 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", "GameCredits" + VALUE "FileDescription", "GameCredits Core (OSS GUI client for GameCredits)" + VALUE "FileVersion", VER_FILEVERSION_STR + VALUE "InternalName", "gamecredits-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", "gamecredits-qt.exe" + VALUE "ProductName", "GameCredits Core" + 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/bitmark.icns b/src/qt/res/icons/bitmark.icns index abde5aa..c800679 100644 Binary files a/src/qt/res/icons/bitmark.icns and b/src/qt/res/icons/bitmark.icns differ diff --git a/src/qt/res/icons/bitmark.ico b/src/qt/res/icons/bitmark.ico index 2e62907..e265360 100644 Binary files a/src/qt/res/icons/bitmark.ico and b/src/qt/res/icons/bitmark.ico differ diff --git a/src/qt/res/icons/bitmark.png b/src/qt/res/icons/bitmark.png index b7d6895..5fcb408 100644 Binary files a/src/qt/res/icons/bitmark.png and b/src/qt/res/icons/bitmark.png differ diff --git a/src/qt/res/icons/bitmark_testnet.ico b/src/qt/res/icons/bitmark_testnet.ico index fcd6ee9..dd6d9c8 100644 Binary files a/src/qt/res/icons/bitmark_testnet.ico and b/src/qt/res/icons/bitmark_testnet.ico differ diff --git a/src/qt/res/icons/bitmark_testnet.png b/src/qt/res/icons/bitmark_testnet.png index 5d267a8..aa2c962 100644 Binary files a/src/qt/res/icons/bitmark_testnet.png and b/src/qt/res/icons/bitmark_testnet.png differ diff --git a/src/qt/res/icons/toolbar.png b/src/qt/res/icons/toolbar.png index 937ff12..fbfd024 100644 Binary files a/src/qt/res/icons/toolbar.png and b/src/qt/res/icons/toolbar.png differ diff --git a/src/qt/res/icons/toolbar_testnet.png b/src/qt/res/icons/toolbar_testnet.png index d5beb7f..faca38e 100644 Binary files a/src/qt/res/icons/toolbar_testnet.png and b/src/qt/res/icons/toolbar_testnet.png differ diff --git a/src/qt/res/images/about.png b/src/qt/res/images/about.png index fdede66..1e3dc54 100644 Binary files a/src/qt/res/images/about.png and b/src/qt/res/images/about.png differ diff --git a/src/qt/res/images/splash.png b/src/qt/res/images/splash.png index fb9f173..a766688 100644 Binary files a/src/qt/res/images/splash.png and b/src/qt/res/images/splash.png differ diff --git a/src/qt/res/images/splash_testnet.png b/src/qt/res/images/splash_testnet.png index 6eb3f8a..8f93b45 100644 Binary files a/src/qt/res/images/splash_testnet.png and b/src/qt/res/images/splash_testnet.png differ diff --git a/src/qt/res/src/bitmark.svg b/src/qt/res/src/bitmark.svg index aba7b9e..f41a800 100644 --- a/src/qt/res/src/bitmark.svg +++ b/src/qt/res/src/bitmark.svg @@ -5,86 +5,86 @@ width="827px" height="827px" viewBox="0 0 827 827" enable-background="new 0 0 827 827" xml:space="preserve"> - @@ -97,598 +97,598 @@ d//aAAgBAQEGPwAsSf/Z" transform="matrix(0.7003 0 0 0.7003 0 0)"> - diff --git a/src/qt/res/src/bitmark.svg~ b/src/qt/res/src/bitmark.svg~ new file mode 100644 index 0000000..aba7b9e --- /dev/null +++ b/src/qt/res/src/bitmark.svg~ @@ -0,0 +1,697 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index 14b749d..aa6022f 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -327,7 +327,7 @@ void RPCConsole::clear() "b { color: #006060; } " ); - message(CMD_REPLY, (tr("Welcome to the Pfennig RPC console.") + "
" + + message(CMD_REPLY, (tr("Welcome to the pfennig RPC console.") + "
" + tr("Use up and down arrows to navigate history, and Ctrl-L to clear screen.") + "
" + tr("Type help for an overview of available commands.")), true); } diff --git a/src/qt/rpcconsole.cpp~ b/src/qt/rpcconsole.cpp~ new file mode 100644 index 0000000..227b229 --- /dev/null +++ b/src/qt/rpcconsole.cpp~ @@ -0,0 +1,495 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "guiutil.h" + +#include "rpcserver.h" +#include "rpcclient.h" + +#include "json/json_spirit_value.h" +#include +#include +#include +#include +#include + +#if QT_VERSION < 0x050000 +#include +#endif + +// TODO: add a scrollback limit, as there is currently none +// TODO: make it possible to filter out categories (esp debug messages when implemented) +// TODO: receive errors and debug messages through ClientModel + +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; +} ICON_MAPPING[] = { + {"cmd-request", ":/icons/tx_input"}, + {"cmd-reply", ":/icons/tx_output"}, + {"cmd-error", ":/icons/tx_output"}, + {"misc", ":/icons/tx_inout"}, + {NULL, NULL} +}; + +/* Object for executing console RPC commands in a separate thread. +*/ +class RPCExecutor : public QObject +{ + Q_OBJECT + +public slots: + void request(const QString &command); + +signals: + void reply(int category, const QString &command); +}; + +#include "rpcconsole.moc" + +/** + * Split shell command line into a list of arguments. Aims to emulate \c bash and friends. + * + * - Arguments are delimited with whitespace + * - Extra whitespace at the beginning and end and between arguments will be ignored + * - Text can be "double" or 'single' quoted + * - The backslash \c \ is used as escape character + * - Outside quotes, any character can be escaped + * - Within double quotes, only escape \c " and backslashes before a \c " or another backslash + * - Within single quotes, no escaping is possible and no special interpretation takes place + * + * @param[out] args Parsed arguments will be appended to this list + * @param[in] strCommand Command line to split + */ +bool parseCommandLine(std::vector &args, const std::string &strCommand) +{ + enum CmdParseState + { + STATE_EATING_SPACES, + STATE_ARGUMENT, + STATE_SINGLEQUOTED, + STATE_DOUBLEQUOTED, + STATE_ESCAPE_OUTER, + STATE_ESCAPE_DOUBLEQUOTED + } state = STATE_EATING_SPACES; + std::string curarg; + foreach(char ch, strCommand) + { + switch(state) + { + case STATE_ARGUMENT: // In or after argument + case STATE_EATING_SPACES: // Handle runs of whitespace + switch(ch) + { + case '"': state = STATE_DOUBLEQUOTED; break; + case '\'': state = STATE_SINGLEQUOTED; break; + case '\\': state = STATE_ESCAPE_OUTER; break; + case ' ': case '\n': case '\t': + if(state == STATE_ARGUMENT) // Space ends argument + { + args.push_back(curarg); + curarg.clear(); + } + state = STATE_EATING_SPACES; + break; + default: curarg += ch; state = STATE_ARGUMENT; + } + break; + case STATE_SINGLEQUOTED: // Single-quoted string + switch(ch) + { + case '\'': state = STATE_ARGUMENT; break; + default: curarg += ch; + } + break; + case STATE_DOUBLEQUOTED: // Double-quoted string + switch(ch) + { + case '"': state = STATE_ARGUMENT; break; + case '\\': state = STATE_ESCAPE_DOUBLEQUOTED; break; + default: curarg += ch; + } + break; + case STATE_ESCAPE_OUTER: // '\' outside quotes + curarg += ch; state = STATE_ARGUMENT; + break; + case STATE_ESCAPE_DOUBLEQUOTED: // '\' in double-quoted text + if(ch != '"' && ch != '\\') curarg += '\\'; // keep '\' for everything but the quote and '\' itself + curarg += ch; state = STATE_DOUBLEQUOTED; + break; + } + } + switch(state) // final state + { + case STATE_EATING_SPACES: + return true; + case STATE_ARGUMENT: + args.push_back(curarg); + return true; + default: // ERROR to end in one of the other states + return false; + } +} + +void RPCExecutor::request(const QString &command) +{ + std::vector args; + if(!parseCommandLine(args, command.toStdString())) + { + emit reply(RPCConsole::CMD_ERROR, QString("Parse error: unbalanced ' or \"")); + return; + } + if(args.empty()) + return; // Nothing to do + try + { + std::string strPrint; + // Convert argument list to JSON objects in method-dependent way, + // and pass it along with the method name to the dispatcher. + json_spirit::Value result = tableRPC.execute( + args[0], + RPCConvertValues(args[0], std::vector(args.begin() + 1, args.end()))); + + // Format result reply + if (result.type() == json_spirit::null_type) + strPrint = ""; + else if (result.type() == json_spirit::str_type) + strPrint = result.get_str(); + else + strPrint = write_string(result, true); + + emit reply(RPCConsole::CMD_REPLY, QString::fromStdString(strPrint)); + } + catch (json_spirit::Object& objError) + { + try // Nice formatting for standard-format error + { + int code = find_value(objError, "code").get_int(); + std::string message = find_value(objError, "message").get_str(); + emit reply(RPCConsole::CMD_ERROR, QString::fromStdString(message) + " (code " + QString::number(code) + ")"); + } + catch(std::runtime_error &) // raised when converting to invalid type, i.e. missing code or message + { // Show raw JSON object + emit reply(RPCConsole::CMD_ERROR, QString::fromStdString(write_string(json_spirit::Value(objError), false))); + } + } + catch (std::exception& e) + { + emit reply(RPCConsole::CMD_ERROR, QString("Error: ") + QString::fromStdString(e.what())); + } +} + +RPCConsole::RPCConsole(QWidget *parent) : + QDialog(parent), + ui(new Ui::RPCConsole), + clientModel(0), + historyPtr(0) +{ + ui->setupUi(this); + GUIUtil::restoreWindowGeometry("nRPCConsoleWindow", this->size(), this); + +#ifndef Q_OS_MAC + ui->openDebugLogfileButton->setIcon(QIcon(":/icons/export")); +#endif + + // Install event filter for up and down arrow + ui->lineEdit->installEventFilter(this); + 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; +} + +bool RPCConsole::eventFilter(QObject* obj, QEvent *event) +{ + if(event->type() == QEvent::KeyPress) // Special key handling + { + QKeyEvent *keyevt = static_cast(event); + int key = keyevt->key(); + Qt::KeyboardModifiers mod = keyevt->modifiers(); + switch(key) + { + case Qt::Key_Up: if(obj == ui->lineEdit) { browseHistory(-1); return true; } break; + case Qt::Key_Down: if(obj == ui->lineEdit) { browseHistory(1); return true; } break; + case Qt::Key_PageUp: /* pass paging keys to messages widget */ + case Qt::Key_PageDown: + if(obj == ui->lineEdit) + { + QApplication::postEvent(ui->messagesWidget, new QKeyEvent(*keyevt)); + return true; + } + break; + default: + // Typing in messages widget brings focus to line edit, and redirects key there + // Exclude most combinations and keys that emit no text, except paste shortcuts + if(obj == ui->messagesWidget && ( + (!mod && !keyevt->text().isEmpty() && key != Qt::Key_Tab) || + ((mod & Qt::ControlModifier) && key == Qt::Key_V) || + ((mod & Qt::ShiftModifier) && key == Qt::Key_Insert))) + { + ui->lineEdit->setFocus(); + QApplication::postEvent(ui->lineEdit, new QKeyEvent(*keyevt)); + return true; + } + } + } + return QDialog::eventFilter(obj, event); +} + +void RPCConsole::setClientModel(ClientModel *model) +{ + clientModel = model; + ui->trafficGraph->setClientModel(model); + if(model) + { + // Keep up to date with client + setNumConnections(model->getNumConnections()); + connect(model, SIGNAL(numConnectionsChanged(int)), this, SLOT(setNumConnections(int))); + + setNumBlocks(model->getNumBlocks()); + connect(model, SIGNAL(numBlocksChanged(int)), this, SLOT(setNumBlocks(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->networkName->setText(model->getNetworkName()); + } +} + +static QString categoryClass(int category) +{ + switch(category) + { + case RPCConsole::CMD_REQUEST: return "cmd-request"; break; + case RPCConsole::CMD_REPLY: return "cmd-reply"; break; + case RPCConsole::CMD_ERROR: return "cmd-error"; break; + default: return "misc"; + } +} + +void RPCConsole::clear() +{ + ui->messagesWidget->clear(); + history.clear(); + historyPtr = 0; + ui->lineEdit->clear(); + ui->lineEdit->setFocus(); + + // Add smoothly scaled icon images. + // (when using width/height on an img, Qt uses nearest instead of linear interpolation) + for(int i=0; ICON_MAPPING[i].url; ++i) + { + ui->messagesWidget->document()->addResource( + QTextDocument::ImageResource, + QUrl(ICON_MAPPING[i].url), + QImage(ICON_MAPPING[i].source).scaled(ICON_SIZE, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + } + + // Set default style sheet + ui->messagesWidget->document()->setDefaultStyleSheet( + "table { }" + "td.time { color: #808080; padding-top: 3px; } " + "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; } " + ); + + message(CMD_REPLY, (tr("Welcome to the pfennig RPC console.") + "
" + + tr("Use up and down arrows to navigate history, and Ctrl-L to clear screen.") + "
" + + 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(); + QString timeString = time.toString(); + QString out; + out += ""; + out += ""; + out += "
" + timeString + ""; + if(html) + out += message; + else + out += GUIUtil::HtmlEscape(message, true); + out += "
"; + ui->messagesWidget->append(out); +} + +void RPCConsole::setNumConnections(int 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) +{ + ui->numberOfBlocks->setText(QString::number(count)); + if(clientModel) + ui->lastBlockTime->setText(clientModel->getLastBlockDate().toString()); +} + +void RPCConsole::on_lineEdit_returnPressed() +{ + QString cmd = ui->lineEdit->text(); + ui->lineEdit->clear(); + + if(!cmd.isEmpty()) + { + message(CMD_REQUEST, cmd); + emit cmdRequest(cmd); + // Truncate history from current position + history.erase(history.begin() + historyPtr, history.end()); + // Append command to history + history.append(cmd); + // Enforce maximum history size + while(history.size() > CONSOLE_HISTORY) + history.removeFirst(); + // Set pointer to end of history + historyPtr = history.size(); + // Scroll console view to end + scrollToEnd(); + } +} + +void RPCConsole::browseHistory(int offset) +{ + historyPtr += offset; + if(historyPtr < 0) + historyPtr = 0; + if(historyPtr > history.size()) + historyPtr = history.size(); + QString cmd; + if(historyPtr < history.size()) + cmd = history.at(historyPtr); + ui->lineEdit->setText(cmd); +} + +void RPCConsole::startExecutor() +{ + QThread *thread = new QThread; + RPCExecutor *executor = new RPCExecutor(); + executor->moveToThread(thread); + + // Replies from executor object must go to this object + connect(executor, SIGNAL(reply(int,QString)), this, SLOT(message(int,QString))); + // Requests from this object must go to executor + connect(this, SIGNAL(cmdRequest(QString)), executor, SLOT(request(QString))); + + // On stopExecutor signal + // - queue executor for deletion (in execution thread) + // - quit the Qt event loop in the execution thread + connect(this, SIGNAL(stopExecutor()), executor, SLOT(deleteLater())); + connect(this, SIGNAL(stopExecutor()), thread, SLOT(quit())); + // Queue the thread for deletion (in this thread) when it is finished + connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); + + // Default implementation of QThread::run() simply spins up an event loop in the thread, + // which is what we want. + thread->start(); +} + +void RPCConsole::on_tabWidget_currentChanged(int index) +{ + if(ui->tabWidget->widget(index) == ui->tab_console) + { + ui->lineEdit->setFocus(); + } +} + +void RPCConsole::on_openDebugLogfileButton_clicked() +{ + GUIUtil::openDebugLogfile(); +} + +void RPCConsole::scrollToEnd() +{ + QScrollBar *scrollbar = ui->messagesWidget->verticalScrollBar(); + scrollbar->setValue(scrollbar->maximum()); +} + +void RPCConsole::on_sldGraphRange_valueChanged(int value) +{ + 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 ed055a6..1bbe8a1 100644 --- a/src/qt/rpcconsole.h +++ b/src/qt/rpcconsole.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -14,7 +14,7 @@ namespace Ui { class RPCConsole; } -/** Local Pfennig RPC console. */ +/** Local pfennig RPC console. */ class RPCConsole: public QDialog { Q_OBJECT diff --git a/src/qt/rpcconsole.h~ b/src/qt/rpcconsole.h~ new file mode 100644 index 0000000..a2fc589 --- /dev/null +++ b/src/qt/rpcconsole.h~ @@ -0,0 +1,79 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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; +} + +/** Local pfennig RPC console. */ +class RPCConsole: public QDialog +{ + Q_OBJECT + +public: + explicit RPCConsole(QWidget *parent); + ~RPCConsole(); + + void setClientModel(ClientModel *model); + + enum MessageClass { + MC_ERROR, + MC_DEBUG, + CMD_REQUEST, + CMD_REPLY, + CMD_ERROR + }; + +protected: + virtual bool eventFilter(QObject* obj, QEvent *event); + +private slots: + void on_lineEdit_returnPressed(); + void on_tabWidget_currentChanged(int index); + /** open the debug.log from the current datadir */ + void on_openDebugLogfileButton_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); + /** Set number of blocks shown in the UI */ + void setNumBlocks(int count); + /** Go forward or back in history */ + 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; + int historyPtr; + + void startExecutor(); +}; + +#endif // RPCCONSOLE_H diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp index acbae2d..54de13b 100644 --- a/src/qt/sendcoinsdialog.cpp +++ b/src/qt/sendcoinsdialog.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -562,7 +562,7 @@ void SendCoinsDialog::coinControlChangeEdited(const QString& text) } else if (!addr.IsValid()) // Invalid address { - ui->labelCoinControlChangeLabel->setText(tr("Warning: Invalid Pfennig address")); + ui->labelCoinControlChangeLabel->setText(tr("Warning: Invalid pfennig address")); } else // Valid address { diff --git a/src/qt/sendcoinsdialog.cpp~ b/src/qt/sendcoinsdialog.cpp~ new file mode 100644 index 0000000..5d36cbf --- /dev/null +++ b/src/qt/sendcoinsdialog.cpp~ @@ -0,0 +1,624 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "addresstablemodel.h" +#include "bitmarkunits.h" +#include "coincontroldialog.h" +#include "guiutil.h" +#include "optionsmodel.h" +#include "sendcoinsentry.h" +#include "walletmodel.h" + +#include "base58.h" +#include "coincontrol.h" +#include "ui_interface.h" + +#include +#include +#include + +SendCoinsDialog::SendCoinsDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::SendCoinsDialog), + model(0) +{ + ui->setupUi(this); + +#ifdef Q_OS_MAC // Icons on push buttons are very uncommon on Mac + ui->addButton->setIcon(QIcon()); + ui->clearButton->setIcon(QIcon()); + 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; +} + +void SendCoinsDialog::setModel(WalletModel *model) +{ + this->model = 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(); + } +} + +SendCoinsDialog::~SendCoinsDialog() +{ + delete ui; +} + +void SendCoinsDialog::on_sendButton_clicked() +{ + if(!model || !model->getOptionsModel()) + return; + + QList recipients; + bool valid = true; + + for(int i = 0; i < ui->entries->count(); ++i) + { + SendCoinsEntry *entry = qobject_cast(ui->entries->itemAt(i)->widget()); + if(entry) + { + if(entry->validate()) + { + recipients.append(entry->getValue()); + } + else + { + valid = false; + } + } + } + + if(!valid || recipients.isEmpty()) + { + return; + } + + // Format confirmation message + QStringList formatted; + foreach(const SendCoinsRecipient &rcp, recipients) + { + // generate bold amount string + QString amount = "" + BitmarkUnits::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; + + + WalletModel::UnlockContext ctx(model->requestUnlock()); + if(!ctx.isValid()) + { + // Unlock wallet was cancelled + fNewRecipientAllowed = true; + return; + } + + // 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, + BitmarkUnits::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(BitmarkUnits::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(BitmarkUnits::Unit u, BitmarkUnits::availableUnits()) + { + if(u != model->getOptionsModel()->getDisplayUnit()) + alternativeUnits.append(BitmarkUnits::formatWithUnit(u, totalAmount)); + } + questionString.append(tr("Total Amount %1 (= %2)") + .arg(BitmarkUnits::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) + { + accept(); + CoinControlDialog::coinControl->UnSelectAll(); + coinControlUpdateLabels(); + } + fNewRecipientAllowed = true; +} + +void SendCoinsDialog::clear() +{ + // Remove entries until only one left + while(ui->entries->count()) + { + ui->entries->takeAt(0)->widget()->deleteLater(); + } + addEntry(); + + updateTabsAndLabels(); +} + +void SendCoinsDialog::reject() +{ + clear(); +} + +void SendCoinsDialog::accept() +{ + clear(); +} + +SendCoinsEntry *SendCoinsDialog::addEntry() +{ + SendCoinsEntry *entry = new SendCoinsEntry(this); + entry->setModel(model); + ui->entries->addWidget(entry); + connect(entry, SIGNAL(removeEntry(SendCoinsEntry*)), this, SLOT(removeEntry(SendCoinsEntry*))); + connect(entry, SIGNAL(payAmountChanged()), this, SLOT(coinControlUpdateLabels())); + + updateTabsAndLabels(); + + // Focus the field, so that entry can start immediately + entry->clear(); + entry->setFocus(); + ui->scrollAreaWidgetContents->resize(ui->scrollAreaWidgetContents->sizeHint()); + qApp->processEvents(); + QScrollBar* bar = ui->scrollArea->verticalScrollBar(); + if(bar) + bar->setSliderPosition(bar->maximum()); + return entry; +} + +void SendCoinsDialog::updateTabsAndLabels() +{ + setupTabChain(0); + coinControlUpdateLabels(); +} + +void SendCoinsDialog::removeEntry(SendCoinsEntry* entry) +{ + 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) +{ + for(int i = 0; i < ui->entries->count(); ++i) + { + SendCoinsEntry *entry = qobject_cast(ui->entries->itemAt(i)->widget()); + if(entry) + { + prev = entry->setupTabChain(prev); + } + } + 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) +{ + SendCoinsEntry *entry = 0; + // Replace the first entry if it is still unused + if(ui->entries->count() == 1) + { + SendCoinsEntry *first = qobject_cast(ui->entries->itemAt(0)->widget()); + if(first->isClear()) + { + entry = first; + } + } + if(!entry) + { + entry = addEntry(); + } + + entry->setAddress(address); +} + +void SendCoinsDialog::pasteEntry(const SendCoinsRecipient &rv) +{ + if(!fNewRecipientAllowed) + return; + + SendCoinsEntry *entry = 0; + // Replace the first entry if it is still unused + if(ui->entries->count() == 1) + { + SendCoinsEntry *first = qobject_cast(ui->entries->itemAt(0)->widget()); + if(first->isClear()) + { + entry = first; + } + } + if(!entry) + { + entry = addEntry(); + } + + entry->setValue(rv); + updateTabsAndLabels(); +} + +bool SendCoinsDialog::handlePaymentRequest(const SendCoinsRecipient &rv) +{ + 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; + } + } + else { + CBitmarkAddress address(rv.address.toStdString()); + if (!address.IsValid()) { + emit message(strSendCoins, tr("Invalid payment address %1").arg(rv.address), + CClientUIInterface::MSG_WARNING); + 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()) + { + ui->labelBalance->setText(BitmarkUnits::formatWithUnit(model->getOptionsModel()->getDisplayUnit(), balance)); + } +} + +void SendCoinsDialog::updateDisplayUnit() +{ + 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) + { + 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;}"); + + CBitmarkAddress addr = CBitmarkAddress(text.toStdString()); + + if (text.isEmpty()) // Nothing entered + { + ui->labelCoinControlChangeLabel->setText(""); + } + else if (!addr.IsValid()) // Invalid address + { + ui->labelCoinControlChangeLabel->setText(tr("Warning: Invalid pfennig 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 b042f8e..2314112 100644 --- a/src/qt/sendcoinsdialog.h +++ b/src/qt/sendcoinsdialog.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/sendcoinsdialog.h~ b/src/qt/sendcoinsdialog.h~ new file mode 100644 index 0000000..b055e8e --- /dev/null +++ b/src/qt/sendcoinsdialog.h~ @@ -0,0 +1,86 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "walletmodel.h" + +#include +#include + +class OptionsModel; +class SendCoinsEntry; +class SendCoinsRecipient; + +QT_BEGIN_NAMESPACE +class QUrl; +QT_END_NAMESPACE + +namespace Ui { + class SendCoinsDialog; +} + +/** Dialog for sending bitmarks */ +class SendCoinsDialog : public QDialog +{ + Q_OBJECT + +public: + explicit SendCoinsDialog(QWidget *parent = 0); + ~SendCoinsDialog(); + + void setModel(WalletModel *model); + + /** 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 setAddress(const QString &address); + void pasteEntry(const SendCoinsRecipient &rv); + bool handlePaymentRequest(const SendCoinsRecipient &recipient); + +public slots: + void clear(); + void reject(); + void accept(); + SendCoinsEntry *addEntry(); + void updateTabsAndLabels(); + void setBalance(qint64 balance, qint64 unconfirmedBalance, qint64 immatureBalance); + +private: + Ui::SendCoinsDialog *ui; + 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 b31687f..14e9fc8 100644 --- a/src/qt/sendcoinsentry.cpp +++ b/src/qt/sendcoinsentry.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/sendcoinsentry.cpp~ b/src/qt/sendcoinsentry.cpp~ new file mode 100644 index 0000000..fab48c3 --- /dev/null +++ b/src/qt/sendcoinsentry.cpp~ @@ -0,0 +1,248 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "addressbookpage.h" +#include "addresstablemodel.h" +#include "guiutil.h" +#include "optionsmodel.h" +#include "walletmodel.h" + +#include +#include + +SendCoinsEntry::SendCoinsEntry(QWidget *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 + ui->addAsLabel->setPlaceholderText(tr("Enter a label for this address to add it to your address book")); +#endif + + // normal bitmark address field + GUIUtil::setupAddressWidget(ui->payTo, this); + // just a label for displaying bitmark address(es) + ui->payTo_is->setFont(GUIUtil::bitmarkAddressFont()); +} + +SendCoinsEntry::~SendCoinsEntry() +{ + delete ui; +} + +void SendCoinsEntry::on_pasteButton_clicked() +{ + // Paste text from clipboard into recipient field + ui->payTo->setText(QApplication::clipboard()->text()); +} + +void SendCoinsEntry::on_addressBookButton_clicked() +{ + if(!model) + return; + AddressBookPage dlg(AddressBookPage::ForSelection, AddressBookPage::SendingTab, this); + dlg.setModel(model->getAddressTableModel()); + if(dlg.exec()) + { + ui->payTo->setText(dlg.getReturnValue()); + ui->payAmount->setFocus(); + } +} + +void SendCoinsEntry::on_payTo_textChanged(const QString &address) +{ + updateLabel(address); +} + +void SendCoinsEntry::setModel(WalletModel *model) +{ + this->model = model; + + 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::clear() +{ + // clear UI elements for normal payment + ui->payTo->clear(); + ui->addAsLabel->clear(); + ui->payAmount->clear(); + 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 ("PFG") + updateDisplayUnit(); +} + +void SendCoinsEntry::deleteClicked() +{ + emit removeEntry(this); +} + +bool SendCoinsEntry::validate() +{ + if (!model) + return false; + + // Check input validity + bool retval = true; + + // 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; + } + + // Reject dust outputs: + if (retval && GUIUtil::isDust(ui->payTo->text(), ui->payAmount->value())) { + ui->payAmount->setValid(false); + retval = false; + } + + return retval; +} + +SendCoinsRecipient SendCoinsEntry::getValue() +{ + // Payment request + if (recipient.paymentRequest.IsInitialized()) + return recipient; + + // Normal payment + recipient.address = ui->payTo->text(); + recipient.label = ui->addAsLabel->text(); + recipient.amount = ui->payAmount->value(); + recipient.message = ui->messageTextLabel->text(); + + return recipient; +} + +QWidget *SendCoinsEntry::setupTabChain(QWidget *prev) +{ + QWidget::setTabOrder(prev, ui->payTo); + 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); + return ui->deleteButton; +} + +void SendCoinsEntry::setValue(const SendCoinsRecipient &value) +{ + 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) +{ + ui->payTo->setText(address); + ui->payAmount->setFocus(); +} + +bool SendCoinsEntry::isClear() +{ + return ui->payTo->text().isEmpty() && ui->payTo_is->text().isEmpty() && ui->payTo_s->text().isEmpty(); +} + +void SendCoinsEntry::setFocus() +{ + ui->payTo->setFocus(); +} + +void SendCoinsEntry::updateDisplayUnit() +{ + if(model && model->getOptionsModel()) + { + // 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 623745f..21c96a5 100644 --- a/src/qt/sendcoinsentry.h +++ b/src/qt/sendcoinsentry.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/sendcoinsentry.h~ b/src/qt/sendcoinsentry.h~ new file mode 100644 index 0000000..00273fa --- /dev/null +++ b/src/qt/sendcoinsentry.h~ @@ -0,0 +1,71 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "walletmodel.h" + +#include + +class WalletModel; + +namespace Ui { + class SendCoinsEntry; +} + +/** + * A single entry in the dialog for sending bitmarks. + * Stacked widget, with different UIs for payment requests + * with a strong payee identity. + */ +class SendCoinsEntry : public QStackedWidget +{ + Q_OBJECT + +public: + explicit SendCoinsEntry(QWidget *parent = 0); + ~SendCoinsEntry(); + + void setModel(WalletModel *model); + bool validate(); + SendCoinsRecipient getValue(); + + /** Return whether the entry is still empty and unedited */ + bool isClear(); + + 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). + */ + QWidget *setupTabChain(QWidget *prev); + + void setFocus(); + +public slots: + void clear(); + +signals: + void removeEntry(SendCoinsEntry *entry); + void payAmountChanged(); + +private slots: + 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 4f5695e..46e1c94 100644 --- a/src/qt/signverifymessagedialog.cpp +++ b/src/qt/signverifymessagedialog.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -28,7 +28,7 @@ SignVerifyMessageDialog::SignVerifyMessageDialog(QWidget *parent) : #if QT_VERSION >= 0x040700 ui->signatureOut_SM->setPlaceholderText(tr("Click \"Sign Message\" to generate signature")); - ui->addressIn_VM->setPlaceholderText(tr("Enter a Pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR)")); + ui->addressIn_VM->setPlaceholderText(tr("Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR)")); #endif GUIUtil::setupAddressWidget(ui->addressIn_SM, this); diff --git a/src/qt/signverifymessagedialog.cpp~ b/src/qt/signverifymessagedialog.cpp~ new file mode 100644 index 0000000..e4a7406 --- /dev/null +++ b/src/qt/signverifymessagedialog.cpp~ @@ -0,0 +1,274 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "guiutil.h" +#include "walletmodel.h" + +#include "base58.h" +#include "init.h" +#include "wallet.h" + +#include +#include + +#include + +SignVerifyMessageDialog::SignVerifyMessageDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::SignVerifyMessageDialog), + model(0) +{ + ui->setupUi(this); + +#if QT_VERSION >= 0x040700 + ui->signatureOut_SM->setPlaceholderText(tr("Click \"Sign Message\" to generate signature")); + ui->addressIn_VM->setPlaceholderText(tr("Enter a pfennig address (e.g. bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR)")); +#endif + + GUIUtil::setupAddressWidget(ui->addressIn_SM, this); + GUIUtil::setupAddressWidget(ui->addressIn_VM, this); + + ui->addressIn_SM->installEventFilter(this); + ui->messageIn_SM->installEventFilter(this); + ui->signatureOut_SM->installEventFilter(this); + ui->addressIn_VM->installEventFilter(this); + ui->messageIn_VM->installEventFilter(this); + ui->signatureIn_VM->installEventFilter(this); + + ui->signatureOut_SM->setFont(GUIUtil::bitmarkAddressFont()); + ui->signatureIn_VM->setFont(GUIUtil::bitmarkAddressFont()); +} + +SignVerifyMessageDialog::~SignVerifyMessageDialog() +{ + delete ui; +} + +void SignVerifyMessageDialog::setModel(WalletModel *model) +{ + this->model = model; +} + +void SignVerifyMessageDialog::setAddress_SM(const QString &address) +{ + ui->addressIn_SM->setText(address); + ui->messageIn_SM->setFocus(); +} + +void SignVerifyMessageDialog::setAddress_VM(const QString &address) +{ + ui->addressIn_VM->setText(address); + ui->messageIn_VM->setFocus(); +} + +void SignVerifyMessageDialog::showTab_SM(bool fShow) +{ + ui->tabWidget->setCurrentIndex(0); + if (fShow) + this->show(); +} + +void SignVerifyMessageDialog::showTab_VM(bool fShow) +{ + ui->tabWidget->setCurrentIndex(1); + if (fShow) + this->show(); +} + +void SignVerifyMessageDialog::on_addressBookButton_SM_clicked() +{ + if (model && model->getAddressTableModel()) + { + AddressBookPage dlg(AddressBookPage::ForSelection, AddressBookPage::ReceivingTab, this); + dlg.setModel(model->getAddressTableModel()); + if (dlg.exec()) + { + setAddress_SM(dlg.getReturnValue()); + } + } +} + +void SignVerifyMessageDialog::on_pasteButton_SM_clicked() +{ + setAddress_SM(QApplication::clipboard()->text()); +} + +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(); + + CBitmarkAddress addr(ui->addressIn_SM->text().toStdString()); + if (!addr.IsValid()) + { + 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; + } + CKeyID keyID; + if (!addr.GetKeyID(keyID)) + { + ui->addressIn_SM->setValid(false); + ui->statusLabel_SM->setStyleSheet("QLabel { color: red; }"); + ui->statusLabel_SM->setText(tr("The entered address does not refer to a key.") + QString(" ") + tr("Please check the address and try again.")); + return; + } + + WalletModel::UnlockContext ctx(model->requestUnlock()); + if (!ctx.isValid()) + { + ui->statusLabel_SM->setStyleSheet("QLabel { color: red; }"); + ui->statusLabel_SM->setText(tr("Wallet unlock was cancelled.")); + return; + } + + CKey key; + if (!pwalletMain->GetKey(keyID, key)) + { + ui->statusLabel_SM->setStyleSheet("QLabel { color: red; }"); + ui->statusLabel_SM->setText(tr("Private key for the entered address is not available.")); + return; + } + + CDataStream ss(SER_GETHASH, 0); + ss << strMessageMagic; + ss << ui->messageIn_SM->document()->toPlainText().toStdString(); + + std::vector vchSig; + if (!key.SignCompact(Hash(ss.begin(), ss.end()), vchSig)) + { + ui->statusLabel_SM->setStyleSheet("QLabel { color: red; }"); + ui->statusLabel_SM->setText(QString("") + tr("Message signing failed.") + QString("")); + return; + } + + ui->statusLabel_SM->setStyleSheet("QLabel { color: green; }"); + ui->statusLabel_SM->setText(QString("") + tr("Message signed.") + QString("")); + + ui->signatureOut_SM->setText(QString::fromStdString(EncodeBase64(&vchSig[0], vchSig.size()))); +} + +void SignVerifyMessageDialog::on_copySignatureButton_SM_clicked() +{ + GUIUtil::setClipboard(ui->signatureOut_SM->text()); +} + +void SignVerifyMessageDialog::on_clearButton_SM_clicked() +{ + ui->addressIn_SM->clear(); + ui->messageIn_SM->clear(); + ui->signatureOut_SM->clear(); + ui->statusLabel_SM->clear(); + + ui->addressIn_SM->setFocus(); +} + +void SignVerifyMessageDialog::on_addressBookButton_VM_clicked() +{ + if (model && model->getAddressTableModel()) + { + AddressBookPage dlg(AddressBookPage::ForSelection, AddressBookPage::SendingTab, this); + dlg.setModel(model->getAddressTableModel()); + if (dlg.exec()) + { + setAddress_VM(dlg.getReturnValue()); + } + } +} + +void SignVerifyMessageDialog::on_verifyMessageButton_VM_clicked() +{ + CBitmarkAddress addr(ui->addressIn_VM->text().toStdString()); + if (!addr.IsValid()) + { + 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; + } + CKeyID keyID; + if (!addr.GetKeyID(keyID)) + { + ui->addressIn_VM->setValid(false); + ui->statusLabel_VM->setStyleSheet("QLabel { color: red; }"); + ui->statusLabel_VM->setText(tr("The entered address does not refer to a key.") + QString(" ") + tr("Please check the address and try again.")); + return; + } + + bool fInvalid = false; + std::vector vchSig = DecodeBase64(ui->signatureIn_VM->text().toStdString().c_str(), &fInvalid); + + if (fInvalid) + { + ui->signatureIn_VM->setValid(false); + ui->statusLabel_VM->setStyleSheet("QLabel { color: red; }"); + ui->statusLabel_VM->setText(tr("The signature could not be decoded.") + QString(" ") + tr("Please check the signature and try again.")); + return; + } + + CDataStream ss(SER_GETHASH, 0); + ss << strMessageMagic; + ss << ui->messageIn_VM->document()->toPlainText().toStdString(); + + CPubKey pubkey; + if (!pubkey.RecoverCompact(Hash(ss.begin(), ss.end()), vchSig)) + { + ui->signatureIn_VM->setValid(false); + ui->statusLabel_VM->setStyleSheet("QLabel { color: red; }"); + ui->statusLabel_VM->setText(tr("The signature did not match the message digest.") + QString(" ") + tr("Please check the signature and try again.")); + return; + } + + if (!(CBitmarkAddress(pubkey.GetID()) == addr)) + { + ui->statusLabel_VM->setStyleSheet("QLabel { color: red; }"); + ui->statusLabel_VM->setText(QString("") + tr("Message verification failed.") + QString("")); + return; + } + + ui->statusLabel_VM->setStyleSheet("QLabel { color: green; }"); + ui->statusLabel_VM->setText(QString("") + tr("Message verified.") + QString("")); +} + +void SignVerifyMessageDialog::on_clearButton_VM_clicked() +{ + ui->addressIn_VM->clear(); + ui->signatureIn_VM->clear(); + ui->messageIn_VM->clear(); + ui->statusLabel_VM->clear(); + + ui->addressIn_VM->setFocus(); +} + +bool SignVerifyMessageDialog::eventFilter(QObject *object, QEvent *event) +{ + if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::FocusIn) + { + if (ui->tabWidget->currentIndex() == 0) + { + /* Clear status message on focus change */ + ui->statusLabel_SM->clear(); + + /* Select generated signature */ + if (object == ui->signatureOut_SM) + { + ui->signatureOut_SM->selectAll(); + return true; + } + } + else if (ui->tabWidget->currentIndex() == 1) + { + /* Clear status message on focus change */ + ui->statusLabel_VM->clear(); + } + } + return QDialog::eventFilter(object, event); +} diff --git a/src/qt/signverifymessagedialog.h b/src/qt/signverifymessagedialog.h index 978cbf5..ae28e4c 100644 --- a/src/qt/signverifymessagedialog.h +++ b/src/qt/signverifymessagedialog.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/signverifymessagedialog.h~ b/src/qt/signverifymessagedialog.h~ new file mode 100644 index 0000000..2c4c71f --- /dev/null +++ b/src/qt/signverifymessagedialog.h~ @@ -0,0 +1,52 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 SignVerifyMessageDialog : public QDialog +{ + Q_OBJECT + +public: + explicit SignVerifyMessageDialog(QWidget *parent); + ~SignVerifyMessageDialog(); + + void setModel(WalletModel *model); + void setAddress_SM(const QString &address); + void setAddress_VM(const QString &address); + + void showTab_SM(bool fShow); + void showTab_VM(bool fShow); + +protected: + bool eventFilter(QObject *object, QEvent *event); + +private: + Ui::SignVerifyMessageDialog *ui; + WalletModel *model; + +private slots: + /* sign message */ + void on_addressBookButton_SM_clicked(); + void on_pasteButton_SM_clicked(); + void on_signMessageButton_SM_clicked(); + void on_copySignatureButton_SM_clicked(); + void on_clearButton_SM_clicked(); + /* verify message */ + void on_addressBookButton_VM_clicked(); + void on_verifyMessageButton_VM_clicked(); + void on_clearButton_VM_clicked(); +}; + +#endif // SIGNVERIFYMESSAGEDIALOG_H diff --git a/src/qt/splashscreen.cpp b/src/qt/splashscreen.cpp index 97d0631..d483ea1 100644 --- a/src/qt/splashscreen.cpp +++ b/src/qt/splashscreen.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -30,10 +30,10 @@ SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTest float fontFactor = 1.0; // define text to place - QString titleText = tr("Pfennig Core"); + QString titleText = tr("pfennig Core"); QString versionText = QString("Version %1").arg(QString::fromStdString(FormatFullVersion())); - QString copyrightTextBTM = QChar(0xA9)+QString(" 2009-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The Bitcoin Core Developers")); - QString copyrightText = QChar(0xA9) + QString(tr(" 2014 The Bitmark Core Developers")); + QString copyrightTextBTM = QChar(0xA9) + QString(" 2009-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The Bitcoin Core Developers")); + QString copyrightText = QChar(0xA9) + QString(" %1 ").arg(COPYRIGHT_YEAR) + QString(tr("The pfennig Foundation")); QString testnetAddText = QString(tr("[testnet]")); // define text to place as single text object QString font = "Arial"; diff --git a/src/qt/splashscreen.cpp~ b/src/qt/splashscreen.cpp~ new file mode 100644 index 0000000..d593b7a --- /dev/null +++ b/src/qt/splashscreen.cpp~ @@ -0,0 +1,148 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 +#include + +SplashScreen::SplashScreen(const QPixmap &pixmap, Qt::WindowFlags f, bool isTestNet) : + QSplashScreen(pixmap, f) +{ + setAutoFillBackground(true); + + // set reference point, paddings + int paddingRight = 25; + int paddingTop = 35; + int titleVersionVSpace = 17; + int titleCopyrightVSpace = 40; + + float fontFactor = 1.0; + + // define text to place + QString titleText = tr("pfennig Core"); + QString versionText = QString("Version %1").arg(QString::fromStdString(FormatFullVersion())); + QString copyrightTextBTM = QChar(0xA9) + QString(" 2009-%1 ").arg(COPYRIGHT_YEAR) + QString(tr("The Bitcoin Core Developers")); + QString copyrightText = QChar(0xA9) + QString(" %1 ").arg(COPYRIGHT_YEAR) + QString(tr("The pfennig Foundation")); + 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(isTestNet) { + newPixmap = QPixmap(":/images/splash_testnet"); + } + else { + newPixmap = QPixmap(":/images/splash"); + } + + QPainter pixPaint(&newPixmap); + pixPaint.setPen(QColor(100,100,100)); + + // check font size and drawing with + pixPaint.setFont(QFont(font, 33*fontFactor)); + QFontMetrics fm = pixPaint.fontMetrics(); + int titleTextWidth = fm.width(titleText); + if(titleTextWidth > 160) { + // strange font rendering, Arial probably not found + fontFactor = 0.75; + } + + pixPaint.setFont(QFont(font, 33*fontFactor)); + fm = pixPaint.fontMetrics(); + titleTextWidth = fm.width(titleText); + pixPaint.drawText(newPixmap.width()-titleTextWidth-paddingRight,paddingTop,titleText); + + pixPaint.setFont(QFont(font, 15*fontFactor)); + + // if the version string is to long, reduce size + fm = pixPaint.fontMetrics(); + int versionTextWidth = fm.width(versionText); + if(versionTextWidth > titleTextWidth+paddingRight-10) { + pixPaint.setFont(QFont(font, 10*fontFactor)); + titleVersionVSpace -= 5; + } + pixPaint.drawText(newPixmap.width()-titleTextWidth-paddingRight+2,paddingTop+titleVersionVSpace,versionText); + + // 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+titleCopyrightVSpace+14,copyrightTextBTM); + + // draw testnet string if testnet is on + if(isTestNet) { + QFont boldFont = QFont(font, 10*fontFactor); + boldFont.setWeight(QFont::Bold); + pixPaint.setFont(boldFont); + fm = pixPaint.fontMetrics(); + int testnetAddTextWidth = fm.width(testnetAddText); + pixPaint.drawText(newPixmap.width()-testnetAddTextWidth-10,15,testnetAddText); + } + + 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::AlignRight), + 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 2ff09e9..32c3118 100644 --- a/src/qt/splashscreen.h +++ b/src/qt/splashscreen.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/splashscreen.h~ b/src/qt/splashscreen.h~ new file mode 100644 index 0000000..f662f95 --- /dev/null +++ b/src/qt/splashscreen.h~ @@ -0,0 +1,32 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +#include + +/** class for the splashscreen with information of the running client + */ +class SplashScreen : public QSplashScreen +{ + Q_OBJECT + +public: + 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 0000000..3ab875b --- /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_gamecredits-qt +TESTS = test_gamecredits-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_gamecredits_qt_CPPFLAGS = $(AM_CPPFLAGS) $(QT_INCLUDES) $(QT_TEST_INCLUDES) + +test_gamecredits_qt_SOURCES = \ + test_main.cpp \ + uritests.cpp \ + $(TEST_QT_H) +if ENABLE_WALLET +test_gamecredits_qt_SOURCES += \ + paymentservertests.cpp +endif + +nodist_test_gamecredits_qt_SOURCES = $(TEST_QT_MOC_CPP) + +test_gamecredits_qt_LDADD = $(LIBBITMARKQT) $(LIBBITMARK_SERVER) +if ENABLE_WALLET +test_gamecredits_qt_LDADD += $(LIBBITMARK_WALLET) +endif +test_gamecredits_qt_LDADD += $(LIBBITMARK_CLI) $(LIBBITMARK_COMMON) $(LIBLEVELDB) \ + $(LIBMEMENV) $(BOOST_LIBS) $(QT_DBUS_LIBS) $(QT_TEST_LIBS) $(QT_LIBS) \ + $(QR_LIBS) $(PROTOBUF_LIBS) $(BDB_LIBS) +test_gamecredits_qt_LDFLAGS = $(QT_LDFLAGS) + +CLEANFILES = $(BUILT_SOURCES) *.gcda *.gcno diff --git a/src/qt/test/paymentrequestdata.h b/src/qt/test/paymentrequestdata.h index 4955816..1502cba 100644 --- a/src/qt/test/paymentrequestdata.h +++ b/src/qt/test/paymentrequestdata.h @@ -136,7 +136,7 @@ OVoXDTIzMDIyMTIyNDIyOVowPzEUMBIGA1UEAwwLdGVzdGNhNC5vcmcxJzAlBgNV\ BAoMHlBheW1lbnQgUmVxdWVzdCBJbnRlcm1lZGlhdGUgNDCBnzANBgkqhkiG9w0B\ AQEFAAOBjQAwgYkCgYEAxYYo3w2UXiYg6O8b4QgwN/vgreTkiW122Ep/z2TiDrhV\ MhfOOiKdwYESPflfnXnVaQQzCGexYTQqsvqvzHSyna5hL0zPTRJxSKmTVrXRsWtp\ -dCRhjxCGipS3tlQBDi7vb+7SNRIBK4dBjjGzALNk7gMCpy+yM8f6I043jTlmGb0C\ +dCRhjxCGipS3tlQBDi7vb+7SNRIBK4dBjjGzALNk7pfgpy+yM8f6I043jTlmGb0C\ AwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOBgQDU+IQxt3Oh\ KqaUYWC23+cB2gekvWqwMBnrCNrX/Dp+kjoJKUoR2Fs3qw53raHES4SIhpGT9l9l\ rppNQgFe/JMHeYqOZMZO+6kuU0olJanBJ14tPIc7zlMTQ9OfmZ6v07IpyFbsQDtR\ @@ -245,7 +245,7 @@ dGVzdGNhNC5vcmcxJzAlBgNVBAoMHlBheW1lbnQgUmVxdWVzdCBJbnRlcm1lZGlh\ dGUgNDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAxYYo3w2UXiYg6O8b4Qgw\ N/vgreTkiW122Ep/z2TiDrhVMhfOOiKdwYESPflfnXnVaQQzCGexYTQqsvqvzHSy\ na5hL0zPTRJxSKmTVrXRsWtpdCRhjxCGipS3tlQBDi7vb+7SNRIBK4dBjjGzALNk\ -7gMCpy+yM8f6I043jTlmGb0CAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG\ +7pfgpy+yM8f6I043jTlmGb0CAwEAAaMQMA4wDAYDVR0TBAUwAwEB/zANBgkqhkiG\ 9w0BAQsFAAOBgQDU+IQxt3OhKqaUYWC23+cB2gekvWqwMBnrCNrX/Dp+kjoJKUoR\ 2Fs3qw53raHES4SIhpGT9l9lrppNQgFe/JMHeYqOZMZO+6kuU0olJanBJ14tPIc7\ zlMTQ9OfmZ6v07IpyFbsQDtRhpe80DpuvSFPfJ4fh0WrQf6kn3KDVpGDnAqIBDCC\ diff --git a/src/qt/test/paymentrequestdata.h~ b/src/qt/test/paymentrequestdata.h~ new file mode 100644 index 0000000..4955816 --- /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/test_main.cpp b/src/qt/test/test_main.cpp index 74a9dd9..f6ce23d 100644 --- a/src/qt/test/test_main.cpp +++ b/src/qt/test/test_main.cpp @@ -28,7 +28,7 @@ int main(int argc, char *argv[]) // Don't remove this, it's needed to access // QCoreApplication:: in the tests QCoreApplication app(argc, argv); - app.setApplicationName("Pfennig-Qt-test"); + app.setApplicationName("pfennig-Qt-test"); URITests test1; if (QTest::qExec(&test1) != 0) diff --git a/src/qt/test/test_main.cpp~ b/src/qt/test/test_main.cpp~ new file mode 100644 index 0000000..5474d8c --- /dev/null +++ b/src/qt/test/test_main.cpp~ @@ -0,0 +1,43 @@ +#include "bitmark-config.h" +#if defined(HAVE_CONFIG_H) +#include "bitmark-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("GameCredits-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/trafficgraphwidget.cpp b/src/qt/trafficgraphwidget.cpp index fe57188..e9d05f5 100644 --- a/src/qt/trafficgraphwidget.cpp +++ b/src/qt/trafficgraphwidget.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/trafficgraphwidget.cpp~ b/src/qt/trafficgraphwidget.cpp~ new file mode 100644 index 0000000..ed4597c --- /dev/null +++ b/src/qt/trafficgraphwidget.cpp~ @@ -0,0 +1,174 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 index 9d79298..4b3b067 100644 --- a/src/qt/trafficgraphwidget.h +++ b/src/qt/trafficgraphwidget.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/trafficgraphwidget.h~ b/src/qt/trafficgraphwidget.h~ new file mode 100644 index 0000000..b6e3541 --- /dev/null +++ b/src/qt/trafficgraphwidget.h~ @@ -0,0 +1,49 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 5802e97..9014c97 100644 --- a/src/qt/transactiondesc.cpp +++ b/src/qt/transactiondesc.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/transactiondesc.cpp~ b/src/qt/transactiondesc.cpp~ new file mode 100644 index 0000000..8cd70a2 --- /dev/null +++ b/src/qt/transactiondesc.cpp~ @@ -0,0 +1,304 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmarkunits.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) +{ + AssertLockHeld(cs_main); + if (!IsFinalTx(wtx, chainActive.Height() + 1)) + { + if (wtx.nLockTime < LOCKTIME_THRESHOLD) + 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 (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); + else + return tr("%1 confirmations").arg(nDepth); + } +} + +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) + { + 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(CBitmarkAddress(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 += "
"; + } + } + break; + } + } + } + } + + // + // To + // + if (wtx.mapValue.count("to") && !wtx.mapValue["to"].empty()) + { + // Online transaction + std::string strAddress = wtx.mapValue["to"]; + strHTML += "" + tr("To") + ": "; + CTxDestination dest = CBitmarkAddress(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) + { + // + // Coinbase + // + int64_t nUnmatured = 0; + BOOST_FOREACH(const CTxOut& txout, wtx.vout) + nUnmatured += wallet->GetCredit(txout); + strHTML += "" + tr("Credit") + ": "; + if (wtx.IsInMainChain()) + strHTML += BitmarkUnits::formatWithUnit(unit, nUnmatured)+ " (" + tr("matures in %n more block(s)", "", wtx.GetBlocksToMaturity()) + ")"; + else + strHTML += "(" + tr("not accepted") + ")"; + strHTML += "
"; + } + else if (nNet > 0) + { + // + // Credit + // + strHTML += "" + tr("Credit") + ": " + BitmarkUnits::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) + { + // + // Debit + // + BOOST_FOREACH(const CTxOut& txout, wtx.vout) + { + if (wallet->IsMine(txout)) + continue; + + if (!wtx.mapValue.count("to") || wtx.mapValue["to"].empty()) + { + // Offline transaction + CTxDestination address; + if (ExtractDestination(txout.scriptPubKey, address)) + { + strHTML += "" + tr("To") + ": "; + if (wallet->mapAddressBook.count(address) && !wallet->mapAddressBook[address].name.empty()) + strHTML += GUIUtil::HtmlEscape(wallet->mapAddressBook[address].name) + " "; + strHTML += GUIUtil::HtmlEscape(CBitmarkAddress(address).ToString()); + strHTML += "
"; + } + } + + strHTML += "" + tr("Debit") + ": " + BitmarkUnits::formatWithUnit(unit, -txout.nValue) + "
"; + } + + if (fAllToMe) + { + // Payment to self + int64_t nChange = wtx.GetChange(); + int64_t nValue = nCredit - nChange; + strHTML += "" + tr("Debit") + ": " + BitmarkUnits::formatWithUnit(unit, -nValue) + "
"; + strHTML += "" + tr("Credit") + ": " + BitmarkUnits::formatWithUnit(unit, nValue) + "
"; + } + + int64_t nTxFee = nDebit - wtx.GetValueOut(); + if (nTxFee > 0) + strHTML += "" + tr("Transaction fee") + ": " + BitmarkUnits::formatWithUnit(unit, -nTxFee) + "
"; + } + else + { + // + // Mixed debit transaction + // + BOOST_FOREACH(const CTxIn& txin, wtx.vin) + if (wallet->IsMine(txin)) + strHTML += "" + tr("Debit") + ": " + BitmarkUnits::formatWithUnit(unit, -wallet->GetDebit(txin)) + "
"; + BOOST_FOREACH(const CTxOut& txout, wtx.vout) + if (wallet->IsMine(txout)) + strHTML += "" + tr("Credit") + ": " + BitmarkUnits::formatWithUnit(unit, wallet->GetCredit(txout)) + "
"; + } + } + + strHTML += "" + tr("Net amount") + ": " + BitmarkUnits::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 bitmark:URI (bitmark: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") + ": " + BitmarkUnits::formatWithUnit(unit, -wallet->GetDebit(txin)) + "
"; + BOOST_FOREACH(const CTxOut& txout, wtx.vout) + if(wallet->IsMine(txout)) + strHTML += "" + tr("Credit") + ": " + BitmarkUnits::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(CBitmarkAddress(address).ToString()); + } + strHTML = strHTML + " " + tr("Amount") + "=" + BitmarkUnits::formatWithUnit(unit, vout.nValue); + strHTML = strHTML + " IsMine=" + (wallet->IsMine(vout) ? tr("true") : tr("false")) + "
  • "; + } + } + } + + strHTML += "
"; + } + + strHTML += "
"; + return strHTML; +} diff --git a/src/qt/transactiondesc.h b/src/qt/transactiondesc.h index ff7b70c..f84b4cb 100644 --- a/src/qt/transactiondesc.h +++ b/src/qt/transactiondesc.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/transactiondesc.h~ b/src/qt/transactiondesc.h~ new file mode 100644 index 0000000..9244fc5 --- /dev/null +++ b/src/qt/transactiondesc.h~ @@ -0,0 +1,30 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +class CWallet; +class CWalletTx; + +/** Provide a human-readable extended HTML description of a transaction. + */ +class TransactionDesc: public QObject +{ + Q_OBJECT + +public: + static QString toHTML(CWallet *wallet, CWalletTx &wtx, int vout, int unit); + +private: + TransactionDesc() {} + + static QString FormatTxStatus(const CWalletTx& wtx); +}; + +#endif // TRANSACTIONDESC_H diff --git a/src/qt/transactiondescdialog.cpp b/src/qt/transactiondescdialog.cpp index 3efa409..ad2640e 100644 --- a/src/qt/transactiondescdialog.cpp +++ b/src/qt/transactiondescdialog.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/transactiondescdialog.cpp~ b/src/qt/transactiondescdialog.cpp~ new file mode 100644 index 0000000..ac00ada --- /dev/null +++ b/src/qt/transactiondescdialog.cpp~ @@ -0,0 +1,25 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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" + +#include "transactiontablemodel.h" + +#include + +TransactionDescDialog::TransactionDescDialog(const QModelIndex &idx, QWidget *parent) : + QDialog(parent), + ui(new Ui::TransactionDescDialog) +{ + ui->setupUi(this); + QString desc = idx.data(TransactionTableModel::LongDescriptionRole).toString(); + ui->detailText->setHtml(desc); +} + +TransactionDescDialog::~TransactionDescDialog() +{ + delete ui; +} diff --git a/src/qt/transactiondescdialog.h b/src/qt/transactiondescdialog.h index 10ca756..3266af1 100644 --- a/src/qt/transactiondescdialog.h +++ b/src/qt/transactiondescdialog.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/transactiondescdialog.h~ b/src/qt/transactiondescdialog.h~ new file mode 100644 index 0000000..d509de5 --- /dev/null +++ b/src/qt/transactiondescdialog.h~ @@ -0,0 +1,32 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +#include + +namespace Ui { + class TransactionDescDialog; +} + +QT_BEGIN_NAMESPACE +class QModelIndex; +QT_END_NAMESPACE + +/** Dialog showing transaction details. */ +class TransactionDescDialog : public QDialog +{ + Q_OBJECT + +public: + explicit TransactionDescDialog(const QModelIndex &idx, QWidget *parent = 0); + ~TransactionDescDialog(); + +private: + Ui::TransactionDescDialog *ui; +}; + +#endif // TRANSACTIONDESCDIALOG_H diff --git a/src/qt/transactionfilterproxy.cpp b/src/qt/transactionfilterproxy.cpp index 711ee65..c5d0a1d 100644 --- a/src/qt/transactionfilterproxy.cpp +++ b/src/qt/transactionfilterproxy.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/transactionfilterproxy.cpp~ b/src/qt/transactionfilterproxy.cpp~ new file mode 100644 index 0000000..5ac92cd --- /dev/null +++ b/src/qt/transactionfilterproxy.cpp~ @@ -0,0 +1,103 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "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) +const QDateTime TransactionFilterProxy::MAX_DATE = QDateTime::fromTime_t(0xFFFFFFFF); + +TransactionFilterProxy::TransactionFilterProxy(QObject *parent) : + QSortFilterProxyModel(parent), + dateFrom(MIN_DATE), + dateTo(MAX_DATE), + addrPrefix(), + typeFilter(ALL_TYPES), + minAmount(0), + limitRows(-1), + showInactive(true) +{ +} + +bool TransactionFilterProxy::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const +{ + QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); + + int type = index.data(TransactionTableModel::TypeRole).toInt(); + QDateTime datetime = index.data(TransactionTableModel::DateRole).toDateTime(); + 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) + return false; + if (!address.contains(addrPrefix, Qt::CaseInsensitive) && !label.contains(addrPrefix, Qt::CaseInsensitive)) + return false; + if(amount < minAmount) + return false; + + return true; +} + +void TransactionFilterProxy::setDateRange(const QDateTime &from, const QDateTime &to) +{ + this->dateFrom = from; + this->dateTo = to; + invalidateFilter(); +} + +void TransactionFilterProxy::setAddressPrefix(const QString &addrPrefix) +{ + this->addrPrefix = addrPrefix; + invalidateFilter(); +} + +void TransactionFilterProxy::setTypeFilter(quint32 modes) +{ + this->typeFilter = modes; + invalidateFilter(); +} + +void TransactionFilterProxy::setMinAmount(qint64 minimum) +{ + this->minAmount = minimum; + invalidateFilter(); +} + +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) + { + return std::min(QSortFilterProxyModel::rowCount(parent), limitRows); + } + else + { + return QSortFilterProxyModel::rowCount(parent); + } +} diff --git a/src/qt/transactionfilterproxy.h b/src/qt/transactionfilterproxy.h index 91b22ff..9cc7c47 100644 --- a/src/qt/transactionfilterproxy.h +++ b/src/qt/transactionfilterproxy.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/transactionfilterproxy.h~ b/src/qt/transactionfilterproxy.h~ new file mode 100644 index 0000000..8410a0c --- /dev/null +++ b/src/qt/transactionfilterproxy.h~ @@ -0,0 +1,58 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +/** Filter the transaction list according to pre-specified rules. */ +class TransactionFilterProxy : public QSortFilterProxyModel +{ + Q_OBJECT + +public: + explicit TransactionFilterProxy(QObject *parent = 0); + + /** Earliest date that can be represented (far in the past) */ + static const QDateTime MIN_DATE; + /** Last date that can be represented (far in the future) */ + static const QDateTime MAX_DATE; + /** Type filter bit field (all types) */ + static const quint32 ALL_TYPES = 0xFFFFFFFF; + + static quint32 TYPE(int type) { return 1< TransactionRecord::decomposeTransaction(const CWallet * sub.credit = txout.nValue; if (ExtractDestination(txout.scriptPubKey, address) && IsMine(*wallet, address)) { - // Received by Pfennig Address + // Received by pfennig Address sub.type = TransactionRecord::RecvWithAddress; sub.address = CBitmarkAddress(address).ToString(); } @@ -114,7 +114,7 @@ QList TransactionRecord::decomposeTransaction(const CWallet * CTxDestination address; if (ExtractDestination(txout.scriptPubKey, address)) { - // Sent to Pfennig Address + // Sent to pfennig Address sub.type = TransactionRecord::SendToAddress; sub.address = CBitmarkAddress(address).ToString(); } diff --git a/src/qt/transactionrecord.cpp~ b/src/qt/transactionrecord.cpp~ new file mode 100644 index 0000000..eb67198 --- /dev/null +++ b/src/qt/transactionrecord.cpp~ @@ -0,0 +1,252 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "base58.h" +#include "wallet.h" + +#include + +/* Return positive answer if transaction should be shown in list. + */ +bool TransactionRecord::showTransaction(const CWalletTx &wtx) +{ + if (wtx.IsCoinBase()) + { + // Ensures we show generated coins / mined transactions at depth 1 + if (!wtx.IsInMainChain()) + { + return false; + } + } + return true; +} + +/* + * Decompose CWallet transaction to model transaction records. + */ +QList TransactionRecord::decomposeTransaction(const CWallet *wallet, const CWalletTx &wtx) +{ + QList parts; + 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; + + if (nNet > 0 || wtx.IsCoinBase()) + { + // + // Credit + // + BOOST_FOREACH(const CTxOut& txout, wtx.vout) + { + if(wallet->IsMine(txout)) + { + TransactionRecord sub(hash, nTime); + CTxDestination address; + sub.idx = parts.size(); // sequence number + sub.credit = txout.nValue; + if (ExtractDestination(txout.scriptPubKey, address) && IsMine(*wallet, address)) + { + // Received by pfennig Address + sub.type = TransactionRecord::RecvWithAddress; + sub.address = CBitmarkAddress(address).ToString(); + } + else + { + // Received by IP connection (deprecated features), or a multisignature or other non-simple transaction + sub.type = TransactionRecord::RecvFromOther; + sub.address = mapValue["from"]; + } + if (wtx.IsCoinBase()) + { + // Generated + sub.type = TransactionRecord::Generated; + } + + parts.append(sub); + } + } + } + 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 && fAllToMe) + { + // Payment to self + int64_t nChange = wtx.GetChange(); + + parts.append(TransactionRecord(hash, nTime, TransactionRecord::SendToSelf, "", + -(nDebit - nChange), nCredit - nChange)); + } + else if (fAllFromMe) + { + // + // Debit + // + int64_t nTxFee = nDebit - wtx.GetValueOut(); + + for (unsigned int nOut = 0; nOut < wtx.vout.size(); nOut++) + { + const CTxOut& txout = wtx.vout[nOut]; + TransactionRecord sub(hash, nTime); + sub.idx = parts.size(); + + if(wallet->IsMine(txout)) + { + // Ignore parts sent to self, as this is usually the change + // from a transaction sent back to our own address. + continue; + } + + CTxDestination address; + if (ExtractDestination(txout.scriptPubKey, address)) + { + // Sent to pfennig Address + sub.type = TransactionRecord::SendToAddress; + sub.address = CBitmarkAddress(address).ToString(); + } + else + { + // Sent to IP, or other non-address transaction like OP_EVAL + sub.type = TransactionRecord::SendToOther; + sub.address = mapValue["to"]; + } + + int64_t nValue = txout.nValue; + /* Add fee to first output */ + if (nTxFee > 0) + { + nValue += nTxFee; + nTxFee = 0; + } + sub.debit = -nValue; + + parts.append(sub); + } + } + else + { + // + // Mixed debit transaction, can't break down payees + // + parts.append(TransactionRecord(hash, nTime, TransactionRecord::Other, "", nNet, 0)); + } + } + + return parts; +} + +void TransactionRecord::updateStatus(const CWalletTx &wtx) +{ + AssertLockHeld(cs_main); + // Determine transaction status + + // Find the block the tx is in + CBlockIndex* pindex = NULL; + std::map::iterator mi = mapBlockIndex.find(wtx.hashBlock); + if (mi != mapBlockIndex.end()) + pindex = (*mi).second; + + // Sort order, unrecorded transactions sort to the top + status.sortKey = strprintf("%010d-%01d-%010u-%03d", + (pindex ? pindex->nHeight : std::numeric_limits::max()), + (wtx.IsCoinBase() ? 1 : 0), + wtx.nTimeReceived, + idx); + status.countsForBalance = wtx.IsTrusted() && !(wtx.GetBlocksToMaturity() > 0); + status.depth = wtx.GetDepthInMainChain(); + status.cur_num_blocks = chainActive.Height(); + + if (!IsFinalTx(wtx, chainActive.Height() + 1)) + { + if (wtx.nLockTime < LOCKTIME_THRESHOLD) + { + status.status = TransactionStatus::OpenUntilBlock; + status.open_for = wtx.nLockTime - chainActive.Height(); + } + else + { + status.status = TransactionStatus::OpenUntilDate; + status.open_for = wtx.nLockTime; + } + } + // For generated transactions, determine maturity + else if(type == TransactionRecord::Generated) + { + if (wtx.GetBlocksToMaturity() > 0) + { + status.status = TransactionStatus::Immature; + + if (wtx.IsInMainChain()) + { + status.matures_in = wtx.GetBlocksToMaturity(); + + // Check if the block was requested by anyone + if (GetAdjustedTime() - wtx.nTimeReceived > 2 * 60 && wtx.GetRequestCount() == 0) + status.status = TransactionStatus::MaturesWarning; + } + else + { + status.status = TransactionStatus::NotAccepted; + } + } + else + { + 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() +{ + AssertLockHeld(cs_main); + return status.cur_num_blocks != chainActive.Height(); +} + +QString TransactionRecord::getTxID() const +{ + 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 dc63a7b..fb2e467 100644 --- a/src/qt/transactionrecord.h +++ b/src/qt/transactionrecord.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/transactionrecord.h~ b/src/qt/transactionrecord.h~ new file mode 100644 index 0000000..0644921 --- /dev/null +++ b/src/qt/transactionrecord.h~ @@ -0,0 +1,140 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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; + +/** UI model for transaction status. The transaction status is the part of a transaction that will change over time. + */ +class TransactionStatus +{ +public: + TransactionStatus(): + countsForBalance(false), sortKey(""), + matures_in(0), status(Offline), depth(0), open_for(0), cur_num_blocks(-1) + { } + + enum Status { + 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 */ + }; + + /// Transaction counts towards available balance + bool countsForBalance; + /// Sorting key based on status + std::string sortKey; + + /** @name Generated (mined) transactions + @{*/ + int matures_in; + /**@}*/ + + /** @name Reported status + @{*/ + Status status; + qint64 depth; + qint64 open_for; /**< Timestamp if status==OpenUntilDate, otherwise number + of additional blocks that need to be mined before + finalization */ + /**@}*/ + + /** Current number of blocks (to know whether cached status is still valid) */ + int cur_num_blocks; +}; + +/** UI model for a transaction. A core transaction can be represented by multiple UI transactions if it has + multiple outputs. + */ +class TransactionRecord +{ +public: + enum Type + { + Other, + Generated, + SendToAddress, + SendToOther, + RecvWithAddress, + RecvFromOther, + SendToSelf + }; + + /** 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, qint64 time): + hash(hash), time(time), type(Other), address(""), debit(0), + credit(0), idx(0) + { + } + + TransactionRecord(uint256 hash, qint64 time, + Type type, const std::string &address, + qint64 debit, qint64 credit): + hash(hash), time(time), type(type), address(address), debit(debit), credit(credit), + idx(0) + { + } + + /** Decompose CWallet transaction to model transaction records. + */ + static bool showTransaction(const CWalletTx &wtx); + static QList decomposeTransaction(const CWallet *wallet, const CWalletTx &wtx); + + /** @name Immutable transaction attributes + @{*/ + uint256 hash; + qint64 time; + Type type; + std::string address; + qint64 debit; + qint64 credit; + /**@}*/ + + /** Subtransaction index, for sort key */ + int idx; + + /** Status: can change with block chain update */ + TransactionStatus status; + + /** Return the unique identifier for this transaction (part) */ + QString getTxID() const; + + /** Format subtransaction id */ + static QString formatSubTxId(const uint256 &hash, int vout); + + /** Update status from core wallet tx. + */ + void updateStatus(const CWalletTx &wtx); + + /** Return whether a status update is needed. + */ + bool statusUpdateNeeded(); +}; + +#endif // TRANSACTIONRECORD_H diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp index 1956dd9..83a67dc 100644 --- a/src/qt/transactiontablemodel.cpp +++ b/src/qt/transactiontablemodel.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/transactiontablemodel.cpp~ b/src/qt/transactiontablemodel.cpp~ new file mode 100644 index 0000000..3bf8237 --- /dev/null +++ b/src/qt/transactiontablemodel.cpp~ @@ -0,0 +1,629 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "addresstablemodel.h" +#include "bitmarkunits.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 +#include +#include +#include +#include + +// Amount column is right-aligned it contains numbers +static int column_alignments[] = { + 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 +struct TxLessThan +{ + bool operator()(const TransactionRecord &a, const TransactionRecord &b) const + { + return a.hash < b.hash; + } + bool operator()(const TransactionRecord &a, const uint256 &b) const + { + return a.hash < b; + } + bool operator()(const uint256 &a, const TransactionRecord &b) const + { + return a < b.hash; + } +}; + +// Private implementation +class TransactionTablePriv +{ +public: + TransactionTablePriv(CWallet *wallet, TransactionTableModel *parent) : + wallet(wallet), + parent(parent) + { + } + + CWallet *wallet; + TransactionTableModel *parent; + + /* Local cache of wallet. + * As it is in the same order as the CWallet, by definition + * this is sorted by sha256. + */ + QList cachedWallet; + + /* Query entire wallet anew from core. + */ + void refreshWallet() + { + qDebug() << "TransactionTablePriv::refreshWallet"; + cachedWallet.clear(); + { + LOCK2(cs_main, wallet->cs_wallet); + for(std::map::iterator it = wallet->mapWallet.begin(); it != wallet->mapWallet.end(); ++it) + { + if(TransactionRecord::showTransaction(it->second)) + cachedWallet.append(TransactionRecord::decomposeTransaction(wallet, it->second)); + } + } + } + + /* Update our model of the wallet incrementally, to synchronize our model of the wallet + with that of the core. + + Call with transaction that was added, removed or changed. + */ + void updateWallet(const uint256 &hash, int status) + { + qDebug() << "TransactionTablePriv::updateWallet : " + QString::fromStdString(hash.ToString()) + " " + QString::number(status); + { + LOCK2(cs_main, wallet->cs_wallet); + + // Find transaction in wallet + std::map::iterator mi = wallet->mapWallet.find(hash); + bool inWallet = mi != wallet->mapWallet.end(); + + // Find bounds of this transaction in model + QList::iterator lower = qLowerBound( + cachedWallet.begin(), cachedWallet.end(), hash, TxLessThan()); + QList::iterator upper = qUpperBound( + cachedWallet.begin(), cachedWallet.end(), hash, TxLessThan()); + int lowerIndex = (lower - cachedWallet.begin()); + int upperIndex = (upper - cachedWallet.begin()); + bool inModel = (lower != upper); + + // Determine whether to show transaction or not + bool showTransaction = (inWallet && TransactionRecord::showTransaction(mi->second)); + + if(status == CT_UPDATED) + { + if(showTransaction && !inModel) + status = CT_NEW; /* Not in model, but want to show, treat as new */ + if(!showTransaction && inModel) + status = CT_DELETED; /* In model, but want to hide, treat as deleted */ + } + + 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) + { + qDebug() << "TransactionTablePriv::updateWallet : Warning: Got CT_NEW, but transaction is already in model"; + break; + } + if(!inWallet) + { + qDebug() << "TransactionTablePriv::updateWallet : Warning: Got CT_NEW, but transaction is not in wallet"; + break; + } + if(showTransaction) + { + // Added -- insert at the right position + QList toInsert = + TransactionRecord::decomposeTransaction(wallet, mi->second); + if(!toInsert.isEmpty()) /* only if something to insert */ + { + parent->beginInsertRows(QModelIndex(), lowerIndex, lowerIndex+toInsert.size()-1); + int insert_idx = lowerIndex; + foreach(const TransactionRecord &rec, toInsert) + { + cachedWallet.insert(insert_idx, rec); + insert_idx += 1; + } + parent->endInsertRows(); + } + } + break; + case CT_DELETED: + if(!inModel) + { + qDebug() << "TransactionTablePriv::updateWallet : Warning: Got CT_DELETED, but transaction is not in model"; + break; + } + // Removed -- remove entire transaction from table + parent->beginRemoveRows(QModelIndex(), lowerIndex, upperIndex-1); + cachedWallet.erase(lower, upper); + parent->endRemoveRows(); + break; + case CT_UPDATED: + // Miscellaneous updates -- nothing to do, status update will take care of this, and is only computed for + // visible transactions. + break; + } + } + } + + int size() + { + return cachedWallet.size(); + } + + TransactionRecord *index(int idx) + { + if(idx >= 0 && idx < cachedWallet.size()) + { + 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. + TRY_LOCK(cs_main, lockMain); + if(lockMain) + { + TRY_LOCK(wallet->cs_wallet, lockWallet); + if(lockWallet && rec->statusUpdateNeeded()) + { + std::map::iterator mi = wallet->mapWallet.find(rec->hash); + + if(mi != wallet->mapWallet.end()) + { + rec->updateStatus(mi->second); + } + } + } + return rec; + } + else + { + return 0; + } + } + + QString describe(TransactionRecord *rec, int unit) + { + { + 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, rec->idx, unit); + } + } + return QString(""); + } +}; + +TransactionTableModel::TransactionTableModel(CWallet* wallet, WalletModel *parent): + QAbstractTableModel(parent), + wallet(wallet), + walletModel(parent), + priv(new TransactionTablePriv(wallet, this)) +{ + columns << QString() << tr("Date") << tr("Type") << tr("Address") << tr("Amount"); + + priv->refreshWallet(); + + connect(walletModel->getOptionsModel(), SIGNAL(displayUnitChanged(int)), this, SLOT(updateDisplayUnit())); +} + +TransactionTableModel::~TransactionTableModel() +{ + delete priv; +} + +void TransactionTableModel::updateTransaction(const QString &hash, int status) +{ + uint256 updated; + updated.SetHex(hash.toStdString()); + + priv->updateWallet(updated, status); +} + +void TransactionTableModel::updateConfirmations() +{ + // 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 +{ + Q_UNUSED(parent); + return priv->size(); +} + +int TransactionTableModel::columnCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent); + return columns.length(); +} + +QString TransactionTableModel::formatTxStatus(const TransactionRecord *wtx) const +{ + QString status; + + switch(wtx->status.status) + { + case TransactionStatus::OpenUntilBlock: + status = tr("Open for %n more block(s)","",wtx->status.open_for); + break; + case TransactionStatus::OpenUntilDate: + status = tr("Open until %1").arg(GUIUtil::dateTimeStr(wtx->status.open_for)); + break; + case TransactionStatus::Offline: + status = tr("Offline"); + break; + case TransactionStatus::Unconfirmed: + status = tr("Unconfirmed"); + break; + 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; + 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; +} + +QString TransactionTableModel::formatTxDate(const TransactionRecord *wtx) const +{ + if(wtx->time) + { + return GUIUtil::dateTimeStr(wtx->time); + } + else + { + return QString(); + } +} + +/* Look up address in address book, if found return label (address) + otherwise just return (address) + */ +QString TransactionTableModel::lookupAddress(const std::string &address, bool tooltip) const +{ + QString label = walletModel->getAddressTableModel()->labelForAddress(QString::fromStdString(address)); + QString description; + if(!label.isEmpty()) + { + description += label + QString(" "); + } + if(label.isEmpty() || walletModel->getOptionsModel()->getDisplayAddresses() || tooltip) + { + description += QString("(") + QString::fromStdString(address) + QString(")"); + } + return description; +} + +QString TransactionTableModel::formatTxType(const TransactionRecord *wtx) const +{ + switch(wtx->type) + { + case TransactionRecord::RecvWithAddress: + return tr("Received with"); + case TransactionRecord::RecvFromOther: + return tr("Received from"); + case TransactionRecord::SendToAddress: + case TransactionRecord::SendToOther: + return tr("Sent to"); + case TransactionRecord::SendToSelf: + return tr("Payment to yourself"); + case TransactionRecord::Generated: + return tr("Mined"); + default: + return QString(); + } +} + +QVariant TransactionTableModel::txAddressDecoration(const TransactionRecord *wtx) const +{ + switch(wtx->type) + { + case TransactionRecord::Generated: + return QIcon(":/icons/tx_mined"); + case TransactionRecord::RecvWithAddress: + case TransactionRecord::RecvFromOther: + return QIcon(":/icons/tx_input"); + case TransactionRecord::SendToAddress: + case TransactionRecord::SendToOther: + return QIcon(":/icons/tx_output"); + default: + return QIcon(":/icons/tx_inout"); + } + return QVariant(); +} + +QString TransactionTableModel::formatTxToAddress(const TransactionRecord *wtx, bool tooltip) const +{ + switch(wtx->type) + { + case TransactionRecord::RecvFromOther: + return QString::fromStdString(wtx->address); + case TransactionRecord::RecvWithAddress: + case TransactionRecord::SendToAddress: + case TransactionRecord::Generated: + return lookupAddress(wtx->address, tooltip); + case TransactionRecord::SendToOther: + return QString::fromStdString(wtx->address); + case TransactionRecord::SendToSelf: + default: + return tr("(n/a)"); + } +} + +QVariant TransactionTableModel::addressColor(const TransactionRecord *wtx) const +{ + // Show addresses without label in a less visible color + switch(wtx->type) + { + case TransactionRecord::RecvWithAddress: + case TransactionRecord::SendToAddress: + case TransactionRecord::Generated: + { + QString label = walletModel->getAddressTableModel()->labelForAddress(QString::fromStdString(wtx->address)); + if(label.isEmpty()) + return COLOR_BAREADDRESS; + } break; + case TransactionRecord::SendToSelf: + return COLOR_BAREADDRESS; + default: + break; + } + return QVariant(); +} + +QString TransactionTableModel::formatTxAmount(const TransactionRecord *wtx, bool showUnconfirmed) const +{ + QString str = BitmarkUnits::format(walletModel->getOptionsModel()->getDisplayUnit(), wtx->credit + wtx->debit); + if(showUnconfirmed) + { + if(!wtx->status.countsForBalance) + { + str = QString("[") + str + QString("]"); + } + } + return QString(str); +} + +QVariant TransactionTableModel::txStatusDecoration(const TransactionRecord *wtx) const +{ + switch(wtx->status.status) + { + 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 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); +} + +QString TransactionTableModel::formatTooltip(const TransactionRecord *rec) const +{ + QString tooltip = formatTxStatus(rec) + QString("\n") + formatTxType(rec); + if(rec->type==TransactionRecord::RecvFromOther || rec->type==TransactionRecord::SendToOther || + rec->type==TransactionRecord::SendToAddress || rec->type==TransactionRecord::RecvWithAddress) + { + tooltip += QString(" ") + formatTxToAddress(rec, true); + } + return tooltip; +} + +QVariant TransactionTableModel::data(const QModelIndex &index, int role) const +{ + if(!index.isValid()) + return QVariant(); + TransactionRecord *rec = static_cast(index.internalPointer()); + + switch(role) + { + case Qt::DecorationRole: + switch(index.column()) + { + case Status: + return txStatusDecoration(rec); + case ToAddress: + return txAddressDecoration(rec); + } + break; + case Qt::DisplayRole: + switch(index.column()) + { + case Date: + return formatTxDate(rec); + case Type: + return formatTxType(rec); + case ToAddress: + return formatTxToAddress(rec, false); + case Amount: + return formatTxAmount(rec); + } + break; + case Qt::EditRole: + // Edit role is used for sorting, so return the unformatted values + switch(index.column()) + { + case Status: + return QString::fromStdString(rec->status.sortKey); + case Date: + return rec->time; + case Type: + return formatTxType(rec); + case ToAddress: + return formatTxToAddress(rec, true); + case Amount: + return rec->credit + rec->debit; + } + break; + case Qt::ToolTipRole: + return formatTooltip(rec); + case Qt::TextAlignmentRole: + return column_alignments[index.column()]; + case Qt::ForegroundRole: + // Non-confirmed (but not immature) as transactions are grey + if(!rec->status.countsForBalance && rec->status.status != TransactionStatus::Immature) + { + return COLOR_UNCONFIRMED; + } + if(index.column() == Amount && (rec->credit+rec->debit) < 0) + { + return COLOR_NEGATIVE; + } + if(index.column() == ToAddress) + { + return addressColor(rec); + } + break; + case TypeRole: + return rec->type; + case DateRole: + return QDateTime::fromTime_t(static_cast(rec->time)); + case LongDescriptionRole: + return priv->describe(rec, walletModel->getOptionsModel()->getDisplayUnit()); + case AddressRole: + return QString::fromStdString(rec->address); + case LabelRole: + return walletModel->getAddressTableModel()->labelForAddress(QString::fromStdString(rec->address)); + case AmountRole: + return rec->credit + rec->debit; + case TxIDRole: + return rec->getTxID(); + case TxHashRole: + return QString::fromStdString(rec->hash.ToString()); + case ConfirmedRole: + return rec->status.countsForBalance; + case FormattedAmountRole: + return formatTxAmount(rec, false); + case StatusRole: + return rec->status.status; + } + return QVariant(); +} + +QVariant TransactionTableModel::headerData(int section, Qt::Orientation orientation, int role) const +{ + if(orientation == Qt::Horizontal) + { + if(role == Qt::DisplayRole) + { + return columns[section]; + } + else if (role == Qt::TextAlignmentRole) + { + return column_alignments[section]; + } else if (role == Qt::ToolTipRole) + { + switch(section) + { + case Status: + return tr("Transaction status. Hover over this field to show number of confirmations."); + case Date: + return tr("Date and time that the transaction was received."); + case Type: + return tr("Type of transaction."); + case ToAddress: + return tr("Destination address of transaction."); + case Amount: + return tr("Amount removed from or added to balance."); + } + } + } + return QVariant(); +} + +QModelIndex TransactionTableModel::index(int row, int column, const QModelIndex &parent) const +{ + Q_UNUSED(parent); + TransactionRecord *data = priv->index(row); + if(data) + { + return createIndex(row, column, priv->index(row)); + } + else + { + return QModelIndex(); + } +} + +void TransactionTableModel::updateDisplayUnit() +{ + // emit dataChanged to update Amount column with the current unit + emit dataChanged(index(0, Amount), index(priv->size()-1, Amount)); +} diff --git a/src/qt/transactiontablemodel.h b/src/qt/transactiontablemodel.h index 185f2a3..7d98304 100644 --- a/src/qt/transactiontablemodel.h +++ b/src/qt/transactiontablemodel.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/transactiontablemodel.h~ b/src/qt/transactiontablemodel.h~ new file mode 100644 index 0000000..c8c8329 --- /dev/null +++ b/src/qt/transactiontablemodel.h~ @@ -0,0 +1,95 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 TransactionRecord; +class TransactionTablePriv; +class WalletModel; + +class CWallet; + +/** UI model for the transaction table of a wallet. + */ +class TransactionTableModel : public QAbstractTableModel +{ + Q_OBJECT + +public: + explicit TransactionTableModel(CWallet* wallet, WalletModel *parent = 0); + ~TransactionTableModel(); + + enum ColumnIndex { + Status = 0, + Date = 1, + Type = 2, + ToAddress = 3, + Amount = 4 + }; + + /** Roles to get specific information from a transaction row. + These are independent of column. + */ + enum RoleIndex { + /** Type of transaction */ + TypeRole = Qt::UserRole, + /** Date and time this transaction was created */ + DateRole, + /** Long description (HTML format) */ + LongDescriptionRole, + /** Address of transaction */ + AddressRole, + /** Label of address related to transaction */ + LabelRole, + /** Net amount of transaction */ + AmountRole, + /** Unique identifier */ + TxIDRole, + /** Transaction hash */ + TxHashRole, + /** Is transaction confirmed? */ + ConfirmedRole, + /** Formatted amount, without brackets when unconfirmed */ + FormattedAmountRole, + /** Transaction status (TransactionRecord::Status) */ + StatusRole + }; + + int rowCount(const QModelIndex &parent) const; + int columnCount(const QModelIndex &parent) const; + QVariant data(const QModelIndex &index, int role) const; + QVariant headerData(int section, Qt::Orientation orientation, int role) const; + QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const; + +private: + CWallet* wallet; + WalletModel *walletModel; + QStringList columns; + TransactionTablePriv *priv; + + QString lookupAddress(const std::string &address, bool tooltip) const; + QVariant addressColor(const TransactionRecord *wtx) const; + QString formatTxStatus(const TransactionRecord *wtx) const; + QString formatTxDate(const TransactionRecord *wtx) const; + QString formatTxType(const TransactionRecord *wtx) const; + QString formatTxToAddress(const TransactionRecord *wtx, bool tooltip) const; + QString formatTxAmount(const TransactionRecord *wtx, bool showUnconfirmed=true) const; + QString formatTooltip(const TransactionRecord *rec) const; + QVariant txStatusDecoration(const TransactionRecord *wtx) const; + QVariant txAddressDecoration(const TransactionRecord *wtx) const; + +public slots: + void updateTransaction(const QString &hash, int status); + void updateConfirmations(); + void updateDisplayUnit(); + + friend class TransactionTablePriv; +}; + +#endif // TRANSACTIONTABLEMODEL_H diff --git a/src/qt/transactionview.cpp b/src/qt/transactionview.cpp index fb07ab8..609d315 100644 --- a/src/qt/transactionview.cpp +++ b/src/qt/transactionview.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/transactionview.cpp~ b/src/qt/transactionview.cpp~ new file mode 100644 index 0000000..9bb73ce --- /dev/null +++ b/src/qt/transactionview.cpp~ @@ -0,0 +1,483 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "addresstablemodel.h" +#include "bitmarkunits.h" +#include "csvmodelwriter.h" +#include "editaddressdialog.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 + +TransactionView::TransactionView(QWidget *parent) : + QWidget(parent), model(0), transactionProxyModel(0), + transactionView(0) +{ + // Build filter row + setContentsMargins(0,0,0,0); + + QHBoxLayout *hlayout = new QHBoxLayout(); + hlayout->setContentsMargins(0,0,0,0); +#ifdef Q_OS_MAC + hlayout->setSpacing(5); + hlayout->addSpacing(26); +#else + hlayout->setSpacing(0); + hlayout->addSpacing(23); +#endif + + dateWidget = new QComboBox(this); +#ifdef Q_OS_MAC + dateWidget->setFixedWidth(121); +#else + dateWidget->setFixedWidth(120); +#endif + dateWidget->addItem(tr("All"), All); + dateWidget->addItem(tr("Today"), Today); + dateWidget->addItem(tr("This week"), ThisWeek); + dateWidget->addItem(tr("This month"), ThisMonth); + dateWidget->addItem(tr("Last month"), LastMonth); + dateWidget->addItem(tr("This year"), ThisYear); + dateWidget->addItem(tr("Range..."), Range); + hlayout->addWidget(dateWidget); + + typeWidget = new QComboBox(this); +#ifdef Q_OS_MAC + typeWidget->setFixedWidth(121); +#else + typeWidget->setFixedWidth(120); +#endif + + typeWidget->addItem(tr("All"), TransactionFilterProxy::ALL_TYPES); + typeWidget->addItem(tr("Received with"), TransactionFilterProxy::TYPE(TransactionRecord::RecvWithAddress) | + TransactionFilterProxy::TYPE(TransactionRecord::RecvFromOther)); + typeWidget->addItem(tr("Sent to"), TransactionFilterProxy::TYPE(TransactionRecord::SendToAddress) | + TransactionFilterProxy::TYPE(TransactionRecord::SendToOther)); + typeWidget->addItem(tr("To yourself"), TransactionFilterProxy::TYPE(TransactionRecord::SendToSelf)); + typeWidget->addItem(tr("Mined"), TransactionFilterProxy::TYPE(TransactionRecord::Generated)); + typeWidget->addItem(tr("Other"), TransactionFilterProxy::TYPE(TransactionRecord::Other)); + + hlayout->addWidget(typeWidget); + + addressWidget = new QLineEdit(this); +#if QT_VERSION >= 0x040700 + addressWidget->setPlaceholderText(tr("Enter address or label to search")); +#endif + hlayout->addWidget(addressWidget); + + amountWidget = new QLineEdit(this); +#if QT_VERSION >= 0x040700 + amountWidget->setPlaceholderText(tr("Min amount")); +#endif +#ifdef Q_OS_MAC + amountWidget->setFixedWidth(97); +#else + amountWidget->setFixedWidth(100); +#endif + amountWidget->setValidator(new QDoubleValidator(0, 1e20, 8, this)); + hlayout->addWidget(amountWidget); + + QVBoxLayout *vlayout = new QVBoxLayout(this); + vlayout->setContentsMargins(0,0,0,0); + vlayout->setSpacing(0); + + QTableView *view = new QTableView(this); + vlayout->addLayout(hlayout); + vlayout->addWidget(createDateRangeWidget()); + vlayout->addWidget(view); + vlayout->setSpacing(0); + int width = view->verticalScrollBar()->sizeHint().width(); + // Cover scroll bar width with spacing +#ifdef Q_OS_MAC + hlayout->addSpacing(width+2); +#else + hlayout->addSpacing(width); +#endif + // Always show scroll bar + view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); + view->setTabKeyNavigation(false); + view->setContextMenuPolicy(Qt::CustomContextMenu); + + transactionView = view; + + // 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); + QAction *copyTxIDAction = new QAction(tr("Copy transaction ID"), this); + QAction *editLabelAction = new QAction(tr("Edit label"), this); + QAction *showDetailsAction = new QAction(tr("Show transaction details"), this); + + contextMenu = new QMenu(); + contextMenu->addAction(copyAddressAction); + contextMenu->addAction(copyLabelAction); + contextMenu->addAction(copyAmountAction); + contextMenu->addAction(copyTxIDAction); + 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))); + connect(amountWidget, SIGNAL(textChanged(QString)), this, SLOT(changedAmount(QString))); + + connect(view, SIGNAL(doubleClicked(QModelIndex)), this, SIGNAL(doubleClicked(QModelIndex))); + connect(view, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(contextualMenu(QPoint))); + + connect(copyAddressAction, SIGNAL(triggered()), this, SLOT(copyAddress())); + connect(copyLabelAction, SIGNAL(triggered()), this, SLOT(copyLabel())); + connect(copyAmountAction, SIGNAL(triggered()), this, SLOT(copyAmount())); + connect(copyTxIDAction, SIGNAL(triggered()), this, SLOT(copyTxID())); + connect(editLabelAction, SIGNAL(triggered()), this, SLOT(editLabel())); + connect(showDetailsAction, SIGNAL(triggered()), this, SLOT(showDetails())); +} + +void TransactionView::setModel(WalletModel *model) +{ + this->model = model; + if(model) + { + transactionProxyModel = new TransactionFilterProxy(this); + transactionProxyModel->setSourceModel(model->getTransactionTableModel()); + transactionProxyModel->setDynamicSortFilter(true); + transactionProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); + transactionProxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive); + + transactionProxyModel->setSortRole(Qt::EditRole); + + transactionView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + transactionView->setModel(transactionProxyModel); + transactionView->setAlternatingRowColors(true); + transactionView->setSelectionBehavior(QAbstractItemView::SelectRows); + transactionView->setSelectionMode(QAbstractItemView::ExtendedSelection); + transactionView->setSortingEnabled(true); + transactionView->sortByColumn(TransactionTableModel::Status, Qt::DescendingOrder); + transactionView->verticalHeader()->hide(); + + 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()); + } + } + } + } +} + +void TransactionView::chooseDate(int idx) +{ + if(!transactionProxyModel) + return; + QDate current = QDate::currentDate(); + dateRangeWidget->setVisible(false); + switch(dateWidget->itemData(idx).toInt()) + { + case All: + transactionProxyModel->setDateRange( + TransactionFilterProxy::MIN_DATE, + TransactionFilterProxy::MAX_DATE); + break; + case Today: + transactionProxyModel->setDateRange( + QDateTime(current), + TransactionFilterProxy::MAX_DATE); + break; + case ThisWeek: { + // Find last Monday + QDate startOfWeek = current.addDays(-(current.dayOfWeek()-1)); + transactionProxyModel->setDateRange( + QDateTime(startOfWeek), + TransactionFilterProxy::MAX_DATE); + + } break; + case ThisMonth: + transactionProxyModel->setDateRange( + QDateTime(QDate(current.year(), current.month(), 1)), + TransactionFilterProxy::MAX_DATE); + break; + case LastMonth: + transactionProxyModel->setDateRange( + QDateTime(QDate(current.year(), current.month()-1, 1)), + QDateTime(QDate(current.year(), current.month(), 1))); + break; + case ThisYear: + transactionProxyModel->setDateRange( + QDateTime(QDate(current.year(), 1, 1)), + TransactionFilterProxy::MAX_DATE); + break; + case Range: + dateRangeWidget->setVisible(true); + dateRangeChanged(); + break; + } +} + +void TransactionView::chooseType(int idx) +{ + if(!transactionProxyModel) + return; + transactionProxyModel->setTypeFilter( + typeWidget->itemData(idx).toInt()); +} + +void TransactionView::changedPrefix(const QString &prefix) +{ + if(!transactionProxyModel) + return; + transactionProxyModel->setAddressPrefix(prefix); +} + +void TransactionView::changedAmount(const QString &amount) +{ + if(!transactionProxyModel) + return; + qint64 amount_parsed = 0; + if(BitmarkUnits::parse(model->getOptionsModel()->getDisplayUnit(), amount, &amount_parsed)) + { + transactionProxyModel->setMinAmount(amount_parsed); + } + else + { + transactionProxyModel->setMinAmount(0); + } +} + +void TransactionView::exportClicked() +{ + // CSV is currently the only supported format + QString filename = GUIUtil::getSaveFileName(this, + tr("Export Transaction History"), QString(), + tr("Comma separated file (*.csv)"), NULL); + + if (filename.isNull()) + return; + + CSVModelWriter writer(filename); + + // name, column, role + writer.setModel(transactionProxyModel); + writer.addColumn(tr("Confirmed"), 0, TransactionTableModel::ConfirmedRole); + writer.addColumn(tr("Date"), 0, TransactionTableModel::DateRole); + writer.addColumn(tr("Type"), TransactionTableModel::Type, Qt::EditRole); + writer.addColumn(tr("Label"), 0, TransactionTableModel::LabelRole); + writer.addColumn(tr("Address"), 0, TransactionTableModel::AddressRole); + writer.addColumn(tr("Amount"), 0, TransactionTableModel::FormattedAmountRole); + writer.addColumn(tr("ID"), 0, TransactionTableModel::TxIDRole); + + 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); + } +} + +void TransactionView::contextualMenu(const QPoint &point) +{ + QModelIndex index = transactionView->indexAt(point); + if(index.isValid()) + { + contextMenu->exec(QCursor::pos()); + } +} + +void TransactionView::copyAddress() +{ + GUIUtil::copyEntryData(transactionView, 0, TransactionTableModel::AddressRole); +} + +void TransactionView::copyLabel() +{ + GUIUtil::copyEntryData(transactionView, 0, TransactionTableModel::LabelRole); +} + +void TransactionView::copyAmount() +{ + GUIUtil::copyEntryData(transactionView, 0, TransactionTableModel::FormattedAmountRole); +} + +void TransactionView::copyTxID() +{ + GUIUtil::copyEntryData(transactionView, 0, TransactionTableModel::TxIDRole); +} + +void TransactionView::editLabel() +{ + if(!transactionView->selectionModel() ||!model) + return; + QModelIndexList selection = transactionView->selectionModel()->selectedRows(); + if(!selection.isEmpty()) + { + AddressTableModel *addressBook = model->getAddressTableModel(); + if(!addressBook) + return; + QString address = selection.at(0).data(TransactionTableModel::AddressRole).toString(); + if(address.isEmpty()) + { + // If this transaction has no associated address, exit + return; + } + // Is address in address book? Address book can miss address when a transaction is + // sent from outside the UI. + int idx = addressBook->lookupAddress(address); + if(idx != -1) + { + // Edit sending / receiving address + QModelIndex modelIdx = addressBook->index(idx, 0, QModelIndex()); + // 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); + dlg.setModel(addressBook); + dlg.loadRow(idx); + dlg.exec(); + } + else + { + // Add sending address + EditAddressDialog dlg(EditAddressDialog::NewSendingAddress, + this); + dlg.setModel(addressBook); + dlg.setAddress(address); + dlg.exec(); + } + } +} + +void TransactionView::showDetails() +{ + if(!transactionView->selectionModel()) + return; + QModelIndexList selection = transactionView->selectionModel()->selectedRows(); + if(!selection.isEmpty()) + { + TransactionDescDialog dlg(selection.at(0)); + dlg.exec(); + } +} + +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(); + dateRangeWidget->setFrameStyle(QFrame::Panel | QFrame::Raised); + dateRangeWidget->setContentsMargins(1,1,1,1); + QHBoxLayout *layout = new QHBoxLayout(dateRangeWidget); + layout->setContentsMargins(0,0,0,0); + layout->addSpacing(23); + layout->addWidget(new QLabel(tr("Range:"))); + + dateFrom = new QDateTimeEdit(this); + dateFrom->setDisplayFormat("dd/MM/yy"); + dateFrom->setCalendarPopup(true); + dateFrom->setMinimumWidth(100); + dateFrom->setDate(QDate::currentDate().addDays(-7)); + layout->addWidget(dateFrom); + layout->addWidget(new QLabel(tr("to"))); + + dateTo = new QDateTimeEdit(this); + dateTo->setDisplayFormat("dd/MM/yy"); + dateTo->setCalendarPopup(true); + dateTo->setMinimumWidth(100); + dateTo->setDate(QDate::currentDate()); + layout->addWidget(dateTo); + layout->addStretch(); + + // Hide by default + dateRangeWidget->setVisible(false); + + // Notify on change + connect(dateFrom, SIGNAL(dateChanged(QDate)), this, SLOT(dateRangeChanged())); + connect(dateTo, SIGNAL(dateChanged(QDate)), this, SLOT(dateRangeChanged())); + + return dateRangeWidget; +} + +void TransactionView::dateRangeChanged() +{ + if(!transactionProxyModel) + return; + transactionProxyModel->setDateRange( + QDateTime(dateFrom->date()), + QDateTime(dateTo->date()).addDays(1)); +} + +void TransactionView::focusTransaction(const QModelIndex &idx) +{ + if(!transactionProxyModel) + return; + QModelIndex targetIdx = transactionProxyModel->mapFromSource(idx); + transactionView->scrollTo(targetIdx); + 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 59ed54d..658750b 100644 --- a/src/qt/transactionview.h +++ b/src/qt/transactionview.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/transactionview.h~ b/src/qt/transactionview.h~ new file mode 100644 index 0000000..306c229 --- /dev/null +++ b/src/qt/transactionview.h~ @@ -0,0 +1,109 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 TransactionFilterProxy; +class WalletModel; + +QT_BEGIN_NAMESPACE +class QComboBox; +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. + Using the filter row, the user can view or export a subset of the transactions. + */ +class TransactionView : public QWidget +{ + Q_OBJECT + +public: + explicit TransactionView(QWidget *parent = 0); + + void setModel(WalletModel *model); + + // Date ranges for filter + enum DateEnum + { + All, + Today, + ThisWeek, + ThisMonth, + LastMonth, + ThisYear, + 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; + QTableView *transactionView; + + QComboBox *dateWidget; + QComboBox *typeWidget; + QLineEdit *addressWidget; + QLineEdit *amountWidget; + + QMenu *contextMenu; + QSignalMapper *mapperThirdPartyTxUrls; + + QFrame *dateRangeWidget; + QDateTimeEdit *dateFrom; + QDateTimeEdit *dateTo; + + QWidget *createDateRangeWidget(); + + GUIUtil::TableViewLastColumnResizingFixer *columnResizingFixer; + + virtual void resizeEvent(QResizeEvent* event); + +private slots: + void contextualMenu(const QPoint &); + void dateRangeChanged(); + void showDetails(); + void copyAddress(); + void editLabel(); + 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); + void changedPrefix(const QString &prefix); + void changedAmount(const QString &amount); + void exportClicked(); + void focusTransaction(const QModelIndex&); + +}; + +#endif // TRANSACTIONVIEW_H diff --git a/src/qt/utilitydialog.cpp b/src/qt/utilitydialog.cpp index 1dd4ffe..f6aa153 100644 --- a/src/qt/utilitydialog.cpp +++ b/src/qt/utilitydialog.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -27,7 +27,7 @@ AboutDialog::AboutDialog(QWidget *parent) : ui->setupUi(this); // Set current copyright year - ui->copyrightLabel->setText(tr("Copyright") + QString(" © %1 ").arg(COPYRIGHT_YEAR) + tr("Project Bitmark")); + ui->copyrightLabel->setText(tr("Copyright") + QString(" © %1 ").arg(COPYRIGHT_YEAR) + tr("The pfennig Foundation")); ui->copyrightLabelTwo->setText(tr("Copyright") + QString(" © 2009-%1 ").arg(COPYRIGHT_YEAR) + tr("The Bitcoin Core Developers")); } @@ -66,7 +66,7 @@ HelpMessageDialog::HelpMessageDialog(QWidget *parent) : ui->setupUi(this); GUIUtil::restoreWindowGeometry("nHelpMessageDialogWindow", this->size(), this); - header = tr("Pfennig Core") + " " + tr("version") + " " + + header = tr("pfennig Core") + " " + tr("version") + " " + QString::fromStdString(FormatFullVersion()) + "\n\n" + tr("Usage:") + "\n" + " pfennig-qt [" + tr("command-line options") + "] " + "\n"; @@ -126,7 +126,7 @@ void ShutdownWindow::showShutdownWindow(BitmarkGUI *window) QWidget *shutdownWindow = new QWidget(); QVBoxLayout *layout = new QVBoxLayout(); layout->addWidget(new QLabel( - tr("Pfennig Core is shutting down...") + "

" + + tr("pfennig Core is shutting down...") + "

" + tr("Do not shut down the computer until this window disappears."))); shutdownWindow->setLayout(layout); diff --git a/src/qt/utilitydialog.cpp~ b/src/qt/utilitydialog.cpp~ new file mode 100644 index 0000000..dfe0609 --- /dev/null +++ b/src/qt/utilitydialog.cpp~ @@ -0,0 +1,137 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmarkgui.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(" © %1 ").arg(COPYRIGHT_YEAR) + tr("The pfennig Foundation")); + ui->copyrightLabelTwo->setText(tr("Copyright") + QString(" © 2009-%1 ").arg(COPYRIGHT_YEAR) + tr("The Bitcoin 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("pfennig Core") + " " + tr("version") + " " + + QString::fromStdString(FormatFullVersion()) + "\n\n" + + tr("Usage:") + "\n" + + " pfennig-qt [" + tr("command-line options") + "] " + "\n"; + + coreOptions = QString::fromStdString(HelpMessage(HMM_BITMARK_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::bitmarkAddressFont()); + + // 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(BitmarkGUI *window) +{ + if (!window) + return; + + // Show a simple window indicating shutdown status + QWidget *shutdownWindow = new QWidget(); + QVBoxLayout *layout = new QVBoxLayout(); + layout->addWidget(new QLabel( + tr("pfennig 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 index 34b1dfd..fecbe8d 100644 --- a/src/qt/utilitydialog.h +++ b/src/qt/utilitydialog.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/utilitydialog.h~ b/src/qt/utilitydialog.h~ new file mode 100644 index 0000000..04d9316 --- /dev/null +++ b/src/qt/utilitydialog.h~ @@ -0,0 +1,70 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 BitmarkGUI; +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(BitmarkGUI *window); +}; + +#endif // UTILITYDIALOG_H diff --git a/src/qt/walletframe.cpp b/src/qt/walletframe.cpp index a75c6ea..f2ea9b2 100644 --- a/src/qt/walletframe.cpp +++ b/src/qt/walletframe.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/walletframe.cpp~ b/src/qt/walletframe.cpp~ new file mode 100644 index 0000000..a6b800b --- /dev/null +++ b/src/qt/walletframe.cpp~ @@ -0,0 +1,197 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bitmarkgui.h" +#include "walletview.h" + +#include + +#include +#include + +WalletFrame::WalletFrame(BitmarkGUI *_gui) : + QFrame(_gui), + gui(_gui) +{ + // Leave HBox hook for adding a list view later + QHBoxLayout *walletFrameLayout = new QHBoxLayout(this); + setContentsMargins(0,0,0,0); + 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() +{ +} + +void WalletFrame::setClientModel(ClientModel *clientModel) +{ + this->clientModel = clientModel; +} + +bool WalletFrame::addWallet(const QString& name, WalletModel *walletModel) +{ + if (!gui || !clientModel || !walletModel || mapWalletViews.count(name) > 0) + return false; + + WalletView *walletView = new WalletView(this); + walletView->setBitmarkGUI(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) +{ + 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() +{ + QMap::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + walletStack->removeWidget(i.value()); + mapWalletViews.clear(); +} + +bool WalletFrame::handlePaymentRequest(const SendCoinsRecipient &recipient) +{ + WalletView *walletView = currentWalletView(); + if (!walletView) + return false; + + return walletView->handlePaymentRequest(recipient); +} + +void WalletFrame::showOutOfSyncWarning(bool fShow) +{ + bOutOfSync = fShow; + QMap::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + i.value()->showOutOfSyncWarning(fShow); +} + +void WalletFrame::gotoOverviewPage() +{ + QMap::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + i.value()->gotoOverviewPage(); +} + +void WalletFrame::gotoHistoryPage() +{ + QMap::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + i.value()->gotoHistoryPage(); +} + +void WalletFrame::gotoReceiveCoinsPage() +{ + QMap::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + i.value()->gotoReceiveCoinsPage(); +} + +void WalletFrame::gotoSendCoinsPage(QString addr) +{ + QMap::const_iterator i; + for (i = mapWalletViews.constBegin(); i != mapWalletViews.constEnd(); ++i) + i.value()->gotoSendCoinsPage(addr); +} + +void WalletFrame::gotoSignMessageTab(QString addr) +{ + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->gotoSignMessageTab(addr); +} + +void WalletFrame::gotoVerifyMessageTab(QString addr) +{ + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->gotoVerifyMessageTab(addr); +} + +void WalletFrame::encryptWallet(bool status) +{ + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->encryptWallet(status); +} + +void WalletFrame::backupWallet() +{ + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->backupWallet(); +} + +void WalletFrame::changePassphrase() +{ + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->changePassphrase(); +} + +void WalletFrame::unlockWallet() +{ + WalletView *walletView = currentWalletView(); + if (walletView) + walletView->unlockWallet(); +} + +void WalletFrame::usedSendingAddresses() +{ + 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 fe244aa..37f106c 100644 --- a/src/qt/walletframe.h +++ b/src/qt/walletframe.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/walletframe.h~ b/src/qt/walletframe.h~ new file mode 100644 index 0000000..a5f132d --- /dev/null +++ b/src/qt/walletframe.h~ @@ -0,0 +1,81 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 BitmarkGUI; +class ClientModel; +class SendCoinsRecipient; +class WalletModel; +class WalletView; + +QT_BEGIN_NAMESPACE +class QStackedWidget; +QT_END_NAMESPACE + +class WalletFrame : public QFrame +{ + Q_OBJECT + +public: + explicit WalletFrame(BitmarkGUI *_gui = 0); + ~WalletFrame(); + + void setClientModel(ClientModel *clientModel); + + bool addWallet(const QString& name, WalletModel *walletModel); + bool setCurrentWallet(const QString& name); + bool removeWallet(const QString &name); + void removeAllWallets(); + + bool handlePaymentRequest(const SendCoinsRecipient& recipient); + + void showOutOfSyncWarning(bool fShow); + +private: + QStackedWidget *walletStack; + BitmarkGUI *gui; + ClientModel *clientModel; + QMap mapWalletViews; + + bool bOutOfSync; + + WalletView *currentWalletView(); + +public slots: + /** Switch to overview (home) page */ + void gotoOverviewPage(); + /** Switch to history (transactions) page */ + void gotoHistoryPage(); + /** 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(); + + /** Show used sending addresses */ + void usedSendingAddresses(); + /** Show used receiving addresses */ + void usedReceivingAddresses(); +}; + +#endif // WALLETFRAME_H diff --git a/src/qt/walletmodel.cpp b/src/qt/walletmodel.cpp index b1ba271..9ec47f6 100644 --- a/src/qt/walletmodel.cpp +++ b/src/qt/walletmodel.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/walletmodel.cpp~ b/src/qt/walletmodel.cpp~ new file mode 100644 index 0000000..4bf921a --- /dev/null +++ b/src/qt/walletmodel.cpp~ @@ -0,0 +1,636 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "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 + +#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), + cachedNumBlocks(0) +{ + 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); + connect(pollTimer, SIGNAL(timeout()), this, SLOT(pollBalanceChanged())); + pollTimer->start(MODEL_UPDATE_DELAY); + + subscribeToCoreSignals(); +} + +WalletModel::~WalletModel() +{ + unsubscribeFromCoreSignals(); +} + +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(); +} + +qint64 WalletModel::getUnconfirmedBalance() const +{ + return wallet->GetUnconfirmedBalance(); +} + +qint64 WalletModel::getImmatureBalance() const +{ + return wallet->GetImmatureBalance(); +} + +int WalletModel::getNumTransactions() const +{ + int numTransactions = 0; + { + LOCK(wallet->cs_wallet); + // the size of mapWallet contains the number of unique transaction IDs + // (e.g. payments to yourself generate 2 transactions, but both share the same transaction ID) + numTransactions = wallet->mapWallet.size(); + } + return numTransactions; +} + +void WalletModel::updateStatus() +{ + EncryptionStatus newEncryptionStatus = getEncryptionStatus(); + + if(cachedEncryptionStatus != newEncryptionStatus) + emit encryptionStatusChanged(newEncryptionStatus); +} + +void WalletModel::pollBalanceChanged() +{ + // 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 = chainActive.Height(); + + checkBalanceChanged(); + if(transactionTableModel) + transactionTableModel->updateConfirmations(); + } +} + +void WalletModel::checkBalanceChanged() +{ + qint64 newBalance = getBalance(); + qint64 newUnconfirmedBalance = getUnconfirmedBalance(); + qint64 newImmatureBalance = getImmatureBalance(); + + if(cachedBalance != newBalance || cachedUnconfirmedBalance != newUnconfirmedBalance || cachedImmatureBalance != newImmatureBalance) + { + cachedBalance = newBalance; + cachedUnconfirmedBalance = newUnconfirmedBalance; + cachedImmatureBalance = newImmatureBalance; + emit balanceChanged(newBalance, newUnconfirmedBalance, newImmatureBalance); + } +} + +void WalletModel::updateTransaction(const QString &hash, int status) +{ + if(transactionTableModel) + transactionTableModel->updateTransaction(hash, status); + + // Balance and number of transactions might have changed + checkBalanceChanged(); + + int newNumTransactions = getNumTransactions(); + if(cachedNumTransactions != newNumTransactions) + { + cachedNumTransactions = newNumTransactions; + emit numTransactionsChanged(newNumTransactions); + } +} + +void WalletModel::updateAddressBook(const QString &address, const QString &label, + bool isMine, const QString &purpose, int status) +{ + if(addressTableModel) + addressTableModel->updateEntry(address, label, isMine, purpose, status); +} + +bool WalletModel::validateAddress(const QString &address) +{ + CBitmarkAddress addressParsed(address.toStdString()); + return addressParsed.IsValid(); +} + +WalletModel::SendCoinsReturn WalletModel::prepareTransaction(WalletModelTransaction &transaction, const CCoinControl *coinControl) +{ + qint64 total = 0; + 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 (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; + } + else + { // User-entered bitmark address / amount: + if(!validateAddress(rcp.address)) + { + return InvalidAddress; + } + if(rcp.amount <= 0) + { + return InvalidAmount; + } + setAddress.insert(rcp.address); + ++nAddresses; + + CScript scriptPubKey; + scriptPubKey.SetDestination(CBitmarkAddress(rcp.address.toStdString()).Get()); + vecSend.push_back(std::pair(scriptPubKey, rcp.amount)); + + total += rcp.amount; + } + } + if(setAddress.size() != nAddresses) + { + return DuplicateAddress; + } + + qint64 nBalance = getBalance(coinControl); + + if(total > nBalance) + { + return AmountExceedsBalance; + } + + if((total + nTransactionFee) > nBalance) + { + transaction.setTransactionFee(nTransactionFee); + return SendCoinsReturn(AmountWithFeeExceedsBalance); + } + + { + LOCK2(cs_main, wallet->cs_wallet); + + transaction.newPossibleKeyChange(wallet); + int64_t nFeeRequired = 0; + std::string 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) > nBalance) + { + return SendCoinsReturn(AmountWithFeeExceedsBalance); + } + emit message(tr("Send Coins"), QString::fromStdString(strFailReason), + CClientUIInterface::MSG_ERROR); + return TransactionCreationFailed; + } + } + + return SendCoinsReturn(OK); +} + +WalletModel::SendCoinsReturn WalletModel::sendCoins(WalletModelTransaction &transaction) +{ + QByteArray transaction_array; /* store serialized transaction */ + + { + LOCK2(cs_main, wallet->cs_wallet); + CWalletTx *newTx = transaction.getTransaction(); + + // Store PaymentRequests in wtx.vOrderForm in wallet. + foreach(const SendCoinsRecipient &rcp, transaction.getRecipients()) + { + if (rcp.paymentRequest.IsInitialized()) + { + 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 bitmark:URI (bitmark: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 = CBitmarkAddress(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); +} + +OptionsModel *WalletModel::getOptionsModel() +{ + return optionsModel; +} + +AddressTableModel *WalletModel::getAddressTableModel() +{ + return addressTableModel; +} + +TransactionTableModel *WalletModel::getTransactionTableModel() +{ + return transactionTableModel; +} + +RecentRequestsTableModel *WalletModel::getRecentRequestsTableModel() +{ + return recentRequestsTableModel; +} + +WalletModel::EncryptionStatus WalletModel::getEncryptionStatus() const +{ + if(!wallet->IsCrypted()) + { + return Unencrypted; + } + else if(wallet->IsLocked()) + { + return Locked; + } + else + { + return Unlocked; + } +} + +bool WalletModel::setWalletEncrypted(bool encrypted, const SecureString &passphrase) +{ + if(encrypted) + { + // Encrypt + return wallet->EncryptWallet(passphrase); + } + else + { + // Decrypt -- TODO; not supported yet + return false; + } +} + +bool WalletModel::setWalletLocked(bool locked, const SecureString &passPhrase) +{ + if(locked) + { + // Lock + return wallet->Lock(); + } + else + { + // Unlock + return wallet->Unlock(passPhrase); + } +} + +bool WalletModel::changePassphrase(const SecureString &oldPass, const SecureString &newPass) +{ + bool retval; + { + LOCK(wallet->cs_wallet); + wallet->Lock(); // Make sure wallet is locked before attempting pass change + retval = wallet->ChangeWalletPassphrase(oldPass, newPass); + } + return retval; +} + +bool WalletModel::backupWallet(const QString &filename) +{ + return BackupWallet(*wallet, filename.toLocal8Bit().data()); +} + +// Handlers for core signals +static void NotifyKeyStoreStatusChanged(WalletModel *walletmodel, CCryptoKeyStore *wallet) +{ + qDebug() << "NotifyKeyStoreStatusChanged"; + QMetaObject::invokeMethod(walletmodel, "updateStatus", Qt::QueuedConnection); +} + +static void NotifyAddressBookChanged(WalletModel *walletmodel, CWallet *wallet, + const CTxDestination &address, const std::string &label, bool isMine, + const std::string &purpose, ChangeType status) +{ + QString strAddress = QString::fromStdString(CBitmarkAddress(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, 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) +{ + 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, 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, _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, _6)); + wallet->NotifyTransactionChanged.disconnect(boost::bind(NotifyTransactionChanged, this, _1, _2, _3)); + wallet->ShowProgress.disconnect(boost::bind(ShowProgress, this, _1, _2)); +} + +// WalletModel::UnlockContext implementation +WalletModel::UnlockContext WalletModel::requestUnlock() +{ + bool was_locked = getEncryptionStatus() == Locked; + if(was_locked) + { + // Request UI to unlock wallet + emit requireUnlock(); + } + // If wallet is still locked, unlock was failed or cancelled, mark context as invalid + bool valid = getEncryptionStatus() != Locked; + + return UnlockContext(this, valid, was_locked); +} + +WalletModel::UnlockContext::UnlockContext(WalletModel *wallet, bool valid, bool relock): + wallet(wallet), + valid(valid), + relock(relock) +{ +} + +WalletModel::UnlockContext::~UnlockContext() +{ + if(valid && relock) + { + wallet->setWalletLocked(true); + } +} + +void WalletModel::UnlockContext::CopyFrom(const UnlockContext& rhs) +{ + // Transfer context; old object no longer relocks wallet + *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[CBitmarkAddress(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 = CBitmarkAddress(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 5b6426f..014ecc3 100644 --- a/src/qt/walletmodel.h +++ b/src/qt/walletmodel.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -93,7 +93,7 @@ class SendCoinsRecipient ) }; -/** Interface to Pfennig wallet from Qt view code. */ +/** Interface to pfennig wallet from Qt view code. */ class WalletModel : public QObject { Q_OBJECT diff --git a/src/qt/walletmodel.h~ b/src/qt/walletmodel.h~ new file mode 100644 index 0000000..5e43af8 --- /dev/null +++ b/src/qt/walletmodel.h~ @@ -0,0 +1,255 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "paymentrequestplus.h" +#include "walletmodeltransaction.h" + +#include "allocators.h" /* for SecureString */ + +#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; +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 pfennig wallet from Qt view code. */ +class WalletModel : public QObject +{ + Q_OBJECT + +public: + explicit WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *parent = 0); + ~WalletModel(); + + enum StatusCode // Returned by sendCoins + { + OK, + InvalidAmount, + InvalidAddress, + AmountExceedsBalance, + AmountWithFeeExceedsBalance, + DuplicateAddress, + TransactionCreationFailed, // Error returned when wallet is still locked + TransactionCommitFailed + }; + + enum EncryptionStatus + { + Unencrypted, // !wallet->IsCrypted() + Locked, // wallet->IsCrypted() && wallet->IsLocked() + Unlocked // wallet->IsCrypted() && !wallet->IsLocked() + }; + + OptionsModel *getOptionsModel(); + AddressTableModel *getAddressTableModel(); + TransactionTableModel *getTransactionTableModel(); + RecentRequestsTableModel *getRecentRequestsTableModel(); + + qint64 getBalance(const CCoinControl *coinControl = NULL) const; + qint64 getUnconfirmedBalance() const; + qint64 getImmatureBalance() const; + int getNumTransactions() const; + EncryptionStatus getEncryptionStatus() const; + + // Check address for validity + bool validateAddress(const QString &address); + + // Return status record for SendCoins, contains error id + information + struct SendCoinsReturn + { + SendCoinsReturn(StatusCode status = OK): + status(status) {} + StatusCode status; + }; + + // 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(WalletModelTransaction &transaction); + + // Wallet encryption + bool setWalletEncrypted(bool encrypted, const SecureString &passphrase); + // Passphrase only needed when unlocking + bool setWalletLocked(bool locked, const SecureString &passPhrase=SecureString()); + bool changePassphrase(const SecureString &oldPass, const SecureString &newPass); + // Wallet backup + bool backupWallet(const QString &filename); + + // RAI object for unlocking wallet, returned by requestUnlock() + class UnlockContext + { + public: + UnlockContext(WalletModel *wallet, bool valid, bool relock); + ~UnlockContext(); + + bool isValid() const { return valid; } + + // Copy operator and constructor transfer the context + UnlockContext(const UnlockContext& obj) { CopyFrom(obj); } + UnlockContext& operator=(const UnlockContext& rhs) { CopyFrom(rhs); return *this; } + private: + WalletModel *wallet; + bool valid; + mutable bool relock; // mutable, as it can be set to false by copying + + void CopyFrom(const UnlockContext& rhs); + }; + + 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; + + // Wallet has an options model for wallet-specific options + // (transaction fee, for example) + OptionsModel *optionsModel; + + AddressTableModel *addressTableModel; + TransactionTableModel *transactionTableModel; + RecentRequestsTableModel *recentRequestsTableModel; + + // Cache some values to be able to detect changes + qint64 cachedBalance; + qint64 cachedUnconfirmedBalance; + qint64 cachedImmatureBalance; + qint64 cachedNumTransactions; + EncryptionStatus cachedEncryptionStatus; + int cachedNumBlocks; + + QTimer *pollTimer; + + void subscribeToCoreSignals(); + void unsubscribeFromCoreSignals(); + void checkBalanceChanged(); + +signals: + // Signal that balance in wallet changed + void balanceChanged(qint64 balance, qint64 unconfirmedBalance, qint64 immatureBalance); + + // Number of transactions in wallet changed + void numTransactionsChanged(int count); + + // Encryption status of wallet changed + void encryptionStatusChanged(int status); + + // Signal emitted when wallet needs to be unlocked + // It is valid behaviour for listeners to keep the wallet locked after this signal; + // this means that the unlocking failed or was cancelled. + void requireUnlock(); + + // 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, const QString &purpose, int status); + /* Current, immature or unconfirmed balance might have changed - emit 'balanceChanged' if so */ + void pollBalanceChanged(); +}; + +#endif // WALLETMODEL_H diff --git a/src/qt/walletmodeltransaction.cpp b/src/qt/walletmodeltransaction.cpp index 9939dbb..340a953 100644 --- a/src/qt/walletmodeltransaction.cpp +++ b/src/qt/walletmodeltransaction.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/walletmodeltransaction.cpp~ b/src/qt/walletmodeltransaction.cpp~ new file mode 100644 index 0000000..d3c5504 --- /dev/null +++ b/src/qt/walletmodeltransaction.cpp~ @@ -0,0 +1,63 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 index 14ae9f6..69aea06 100644 --- a/src/qt/walletmodeltransaction.h +++ b/src/qt/walletmodeltransaction.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/walletmodeltransaction.h~ b/src/qt/walletmodeltransaction.h~ new file mode 100644 index 0000000..2ccdac6 --- /dev/null +++ b/src/qt/walletmodeltransaction.h~ @@ -0,0 +1,45 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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/walletview.cpp b/src/qt/walletview.cpp index 61c4086..7392b54 100644 --- a/src/qt/walletview.cpp +++ b/src/qt/walletview.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/walletview.cpp~ b/src/qt/walletview.cpp~ new file mode 100644 index 0000000..4bce830 --- /dev/null +++ b/src/qt/walletview.cpp~ @@ -0,0 +1,307 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "addressbookpage.h" +#include "askpassphrasedialog.h" +#include "bitmarkgui.h" +#include "clientmodel.h" +#include "guiutil.h" +#include "optionsmodel.h" +#include "overviewpage.h" +#include "receivecoinsdialog.h" +#include "sendcoinsdialog.h" +#include "signverifymessagedialog.h" +#include "transactiontablemodel.h" +#include "transactionview.h" +#include "walletmodel.h" + +#include "ui_interface.h" + +#include +#include +#include +#include +#include +#include +#include + +WalletView::WalletView(QWidget *parent): + QStackedWidget(parent), + clientModel(0), + walletModel(0) +{ + // Create tabs + overviewPage = new OverviewPage(); + + transactionsPage = new QWidget(this); + QVBoxLayout *vbox = new QVBoxLayout(); + QHBoxLayout *hbox_buttons = new QHBoxLayout(); + transactionView = new TransactionView(this); + vbox->addWidget(transactionView); + QPushButton *exportButton = new QPushButton(tr("&Export"), this); + exportButton->setToolTip(tr("Export the data in the current tab to a file")); +#ifndef Q_OS_MAC // Icons on push buttons are very uncommon on Mac + exportButton->setIcon(QIcon(":/icons/export")); +#endif + hbox_buttons->addStretch(); + hbox_buttons->addWidget(exportButton); + vbox->addLayout(hbox_buttons); + transactionsPage->setLayout(vbox); + + receiveCoinsPage = new ReceiveCoinsDialog(); + sendCoinsPage = new SendCoinsDialog(); + + addWidget(overviewPage); + addWidget(transactionsPage); + addWidget(receiveCoinsPage); + addWidget(sendCoinsPage); + + // 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 "Export" allows to export the transaction list + connect(exportButton, SIGNAL(clicked()), transactionView, SLOT(exportClicked())); + + // 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() +{ +} + +void WalletView::setBitmarkGUI(BitmarkGUI *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; + + 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 pass through messages from wallet model + connect(walletModel, SIGNAL(message(QString,QString,unsigned int)), this, SIGNAL(message(QString,QString,unsigned 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(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::processNewTransaction(const QModelIndex& parent, int start, int /*end*/) +{ + // Prevent balloon-spam when initial block download is in progress + if (!walletModel || !clientModel || clientModel->inInitialBlockDownload()) + return; + + TransactionTableModel *ttm = walletModel->getTransactionTableModel(); + + QString date = ttm->index(start, TransactionTableModel::Date, parent).data().toString(); + qint64 amount = ttm->index(start, TransactionTableModel::Amount, parent).data(Qt::EditRole).toULongLong(); + QString type = ttm->index(start, TransactionTableModel::Type, parent).data().toString(); + QString address = ttm->index(start, TransactionTableModel::ToAddress, parent).data().toString(); + + emit incomingTransaction(date, walletModel->getOptionsModel()->getDisplayUnit(), amount, type, address); +} + +void WalletView::gotoOverviewPage() +{ + setCurrentWidget(overviewPage); +} + +void WalletView::gotoHistoryPage() +{ + setCurrentWidget(transactionsPage); +} + +void WalletView::gotoReceiveCoinsPage() +{ + setCurrentWidget(receiveCoinsPage); +} + +void WalletView::gotoSendCoinsPage(QString addr) +{ + setCurrentWidget(sendCoinsPage); + + if (!addr.isEmpty()) + sendCoinsPage->setAddress(addr); +} + +void WalletView::gotoSignMessageTab(QString addr) +{ + // 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()) + signVerifyMessageDialog->setAddress_SM(addr); +} + +void WalletView::gotoVerifyMessageTab(QString addr) +{ + // 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::handlePaymentRequest(const SendCoinsRecipient& recipient) +{ + return sendCoinsPage->handlePaymentRequest(recipient); +} + +void WalletView::showOutOfSyncWarning(bool fShow) +{ + overviewPage->showOutOfSyncWarning(fShow); +} + +void WalletView::updateEncryptionStatus() +{ + emit encryptionStatusChanged(walletModel->getEncryptionStatus()); +} + +void WalletView::encryptWallet(bool status) +{ + if(!walletModel) + return; + AskPassphraseDialog dlg(status ? AskPassphraseDialog::Encrypt : AskPassphraseDialog::Decrypt, this); + dlg.setModel(walletModel); + dlg.exec(); + + updateEncryptionStatus(); +} + +void WalletView::backupWallet() +{ + 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 { + emit message(tr("Backup Successful"), tr("The wallet data was successfully saved to %1.").arg(filename), + CClientUIInterface::MSG_INFORMATION); + } +} + +void WalletView::changePassphrase() +{ + AskPassphraseDialog dlg(AskPassphraseDialog::ChangePass, this); + dlg.setModel(walletModel); + dlg.exec(); +} + +void WalletView::unlockWallet() +{ + if(!walletModel) + return; + // Unlock wallet when requested by wallet model + if (walletModel->getEncryptionStatus() == WalletModel::Locked) + { + AskPassphraseDialog dlg(AskPassphraseDialog::Unlock, this); + dlg.setModel(walletModel); + 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 3c41b1f..9e51a45 100644 --- a/src/qt/walletview.h +++ b/src/qt/walletview.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/walletview.h~ b/src/qt/walletview.h~ new file mode 100644 index 0000000..211a007 --- /dev/null +++ b/src/qt/walletview.h~ @@ -0,0 +1,118 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +#include + +class BitmarkGUI; +class ClientModel; +class OverviewPage; +class ReceiveCoinsDialog; +class SendCoinsDialog; +class SendCoinsRecipient; +class TransactionView; +class WalletModel; + +QT_BEGIN_NAMESPACE +class QModelIndex; +class QProgressDialog; +QT_END_NAMESPACE + +/* + WalletView class. This class represents the view to a single wallet. + It was added to support multiple wallet functionality. Each wallet gets its own WalletView instance. + It communicates with both the client and the wallet models to give the user an up-to-date view of the + current core state. +*/ +class WalletView : public QStackedWidget +{ + Q_OBJECT + +public: + explicit WalletView(QWidget *parent); + ~WalletView(); + + void setBitmarkGUI(BitmarkGUI *gui); + /** Set the client model. + The client model represents the part of the core that communicates with the P2P network, and is wallet-agnostic. + */ + void setClientModel(ClientModel *clientModel); + /** Set the wallet model. + The wallet model represents a bitmark wallet, and offers access to the list of transactions, address book and sending + functionality. + */ + void setWalletModel(WalletModel *walletModel); + + bool handlePaymentRequest(const SendCoinsRecipient& recipient); + + void showOutOfSyncWarning(bool fShow); + +private: + ClientModel *clientModel; + WalletModel *walletModel; + + OverviewPage *overviewPage; + QWidget *transactionsPage; + ReceiveCoinsDialog *receiveCoinsPage; + SendCoinsDialog *sendCoinsPage; + + TransactionView *transactionView; + + QProgressDialog *progressDialog; + +public slots: + /** Switch to overview (home) page */ + void gotoOverviewPage(); + /** Switch to history (transactions) page */ + void gotoHistoryPage(); + /** 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 = ""); + + /** Show incoming transaction notification for new transactions. + + The new items are those between start and end inclusive, under the given parent item. + */ + void processNewTransaction(const QModelIndex& parent, int start, int /*end*/); + /** 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(); + + /** 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 index ee68553..5c99c59 100644 --- a/src/qt/winshutdownmonitor.cpp +++ b/src/qt/winshutdownmonitor.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/winshutdownmonitor.cpp~ b/src/qt/winshutdownmonitor.cpp~ new file mode 100644 index 0000000..f573358 --- /dev/null +++ b/src/qt/winshutdownmonitor.cpp~ @@ -0,0 +1,58 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 index c9639f8..d67840f 100644 --- a/src/qt/winshutdownmonitor.h +++ b/src/qt/winshutdownmonitor.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/qt/winshutdownmonitor.h~ b/src/qt/winshutdownmonitor.h~ new file mode 100644 index 0000000..ca81cac --- /dev/null +++ b/src/qt/winshutdownmonitor.h~ @@ -0,0 +1,30 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 142eff8..dd8e616 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -146,7 +146,7 @@ Value getrawmempool(const Array& params, bool fHelp) "{ (json object)\n" " \"transactionid\" : { (json object)\n" " \"size\" : n, (numeric) transaction size in bytes\n" - " \"fee\" : n, (numeric) transaction fee in bitmarks\n" + " \"fee\" : n, (numeric) transaction fee in pfennigs\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" @@ -348,8 +348,8 @@ Value gettxout(const Array& params, bool fHelp) " \"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 bitmark addresses\n" - " \"bitmarkaddress\" (string) bitmark address\n" + " \"addresses\" : [ (array of string) array of pfennig addresses\n" + " \"pfennigaddress\" (string) pfennig address\n" " ,...\n" " ]\n" " },\n" diff --git a/src/rpcblockchain.cpp~ b/src/rpcblockchain.cpp~ new file mode 100644 index 0000000..b2c8922 --- /dev/null +++ b/src/rpcblockchain.cpp~ @@ -0,0 +1,469 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "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, bool fIncludeHex); + +double GetDifficulty(const CBlockIndex* blockindex) +{ + // Floating point number that is a multiple of the minimum difficulty, + // minimum difficulty = 1.0. + if (blockindex == NULL) + { + if (chainActive.Tip() == NULL) + return 1.0; + else + blockindex = chainActive.Tip(); + } + + int nShift = (blockindex->nBits >> 24) & 0xff; + + double dDiff = + (double)0x0000ffff / (double)(blockindex->nBits & 0x00ffffff); + + while (nShift < 29) + { + dDiff *= 256.0; + nShift++; + } + while (nShift > 29) + { + dDiff /= 256.0; + nShift--; + } + + return dDiff; +} + + +Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex) +{ + Object result; + result.push_back(Pair("hash", block.GetHash().GetHex())); + CMerkleTx txGen(block.vtx[0]); + txGen.SetMerkleBranch(&block); + result.push_back(Pair("confirmations", (int)txGen.GetDepthInMainChain())); + result.push_back(Pair("size", (int)::GetSerializeSize(block, SER_NETWORK, PROTOCOL_VERSION))); + result.push_back(Pair("height", blockindex->nHeight)); + result.push_back(Pair("version", block.nVersion)); + result.push_back(Pair("merkleroot", block.hashMerkleRoot.GetHex())); + Array txs; + BOOST_FOREACH(const CTransaction&tx, block.vtx) + txs.push_back(tx.GetHash().GetHex()); + result.push_back(Pair("tx", txs)); + 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))); + result.push_back(Pair("chainwork", blockindex->nChainWork.GetHex())); + + if (blockindex->pprev) + result.push_back(Pair("previousblockhash", blockindex->pprev->GetBlockHash().GetHex())); + CBlockIndex *pnext = chainActive.Next(blockindex); + if (pnext) + result.push_back(Pair("nextblockhash", pnext->GetBlockHash().GetHex())); + return result; +} + + +Value getblockcount(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "getblockcount\n" + "\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 chainActive.Height(); +} + +Value getbestblockhash(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "getbestblockhash\n" + "\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 chainActive.Tip()->GetBlockHash().GetHex(); +} + +Value getdifficulty(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "getdifficulty\n" + "\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(); +} + + +Value getrawmempool(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 1) + throw runtime_error( + "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 pfennigs\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") + ); + + bool fVerbose = false; + if (params.size() > 0) + fVerbose = params[0].get_bool(); + + 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); + + 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 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 > chainActive.Height()) + throw runtime_error("Block number out of range."); + + 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 \"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(); + uint256 hash(strHash); + + bool fVerbose = true; + if (params.size() > 1) + fVerbose = params[1].get_bool(); + + if (mapBlockIndex.count(hash) == 0) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Block not found"); + + CBlock block; + CBlockIndex* pblockindex = mapBlockIndex[hash]; + if(!ReadBlockFromDisk(block, pblockindex)) + throw JSONRPCError(RPC_INTERNAL_ERROR, "Can't read block from disk"); + + if (!fVerbose) + { + CDataStream ssBlock(SER_NETWORK, PROTOCOL_VERSION); + ssBlock << block; + std::string strHex = HexStr(ssBlock.begin(), ssBlock.end()); + return strHex; + } + + return blockToJSON(block, pblockindex); +} + +Value gettxoutsetinfo(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "gettxoutsetinfo\n" + "\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", (int64_t)stats.nHeight)); + ret.push_back(Pair("bestblock", stats.hashBlock.GetHex())); + 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))); + } + return ret; +} + +Value gettxout(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 2 || params.size() > 3) + throw runtime_error( + "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 PFG\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 pfennig addresses\n" + " \"pfennigaddress\" (string) pfennig 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; + + std::string strHash = params[0].get_str(); + uint256 hash(strHash); + int n = params[1].get_int(); + bool fMempool = true; + if (params.size() > 2) + fMempool = params[2].get_bool(); + + CCoins coins; + if (fMempool) { + LOCK(mempool.cs); + CCoinsViewMemPool view(*pcoinsTip, mempool); + if (!view.GetCoins(hash, coins)) + return Value::null; + mempool.pruneSpent(hash, coins); // TODO: this should be done by the CCoinsViewMemPool + } else { + if (!pcoinsTip->GetCoins(hash, coins)) + return Value::null; + } + if (n<0 || (unsigned int)n>=coins.vout.size() || coins.vout[n].IsNull()) + return Value::null; + + 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", pindex->nHeight - coins.nHeight + 1)); + ret.push_back(Pair("value", ValueFromAmount(coins.vout[n].nValue))); + Object 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)); + + return ret; +} + +Value verifychain(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 2) + throw runtime_error( + "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); + if (params.size() > 0) + nCheckLevel = params[0].get_int(); + if (params.size() > 1) + nCheckDepth = params[1].get_int(); + + 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())); + 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 index af355b2..e7f7001 100644 --- a/src/rpcclient.cpp +++ b/src/rpcclient.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -260,7 +260,7 @@ std::string HelpMessageCli(bool mainProgram) { strUsage += _("Options:") + "\n"; strUsage += " -? " + _("This help message") + "\n"; - strUsage += " -conf= " + _("Specify configuration file (default: bitmark.conf)") + "\n"; + strUsage += " -conf= " + _("Specify configuration file (default: pfennig.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 " @@ -270,7 +270,7 @@ std::string HelpMessageCli(bool mainProgram) } strUsage += " -rpcconnect= " + _("Send commands to node running on (default: 127.0.0.1)") + "\n"; - strUsage += " -rpcport= " + _("Connect to JSON-RPC on (default: RPCPORT or testnet: 1RPCPORT)") + "\n"; + strUsage += " -rpcport= " + _("Connect to JSON-RPC on (default: 40001 or testnet: 50000)") + "\n"; strUsage += " -rpcwait " + _("Wait for RPC server to start") + "\n"; if(mainProgram) @@ -278,7 +278,7 @@ std::string HelpMessageCli(bool mainProgram) strUsage += " -rpcuser= " + _("Username for JSON-RPC connections") + "\n"; strUsage += " -rpcpassword= " + _("Password for JSON-RPC connections") + "\n"; - strUsage += "\n" + _("SSL options: (see the Bitmark Wiki for SSL setup instructions)") + "\n"; + strUsage += "\n" + _("SSL options: (see the Pfennig Wiki for SSL setup instructions)") + "\n"; strUsage += " -rpcssl " + _("Use OpenSSL (https) for JSON-RPC connections") + "\n"; } diff --git a/src/rpcclient.cpp~ b/src/rpcclient.cpp~ new file mode 100644 index 0000000..ba5591a --- /dev/null +++ b/src/rpcclient.cpp~ @@ -0,0 +1,287 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 | ssl::context::no_sslv3); + 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]); + if (strMethod == "sendalert" && n > 2) ConvertTo(params[2]); + if (strMethod == "sendalert" && n > 3) ConvertTo(params[3]); + if (strMethod == "sendalert" && n > 4) ConvertTo(params[4]); + if (strMethod == "sendalert" && n > 5) ConvertTo(params[5]); + if (strMethod == "sendalert" && n > 6) ConvertTo(params[6]); + if (strMethod == "sendalert" && n > 7) ConvertTo(params[7]); + if (strMethod == "sendalert" && n > 8) ConvertTo(params[8]); + 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: pfennig.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: 40001 or testnet: 50000)") + "\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 Pfennig 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 index fd283e7..3ea906b 100644 --- a/src/rpcclient.h +++ b/src/rpcclient.h @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/rpcclient.h~ b/src/rpcclient.h~ new file mode 100644 index 0000000..9b852b3 --- /dev/null +++ b/src/rpcclient.h~ @@ -0,0 +1,26 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef _BITMARKRPC_CLIENT_H_ +#define _BITMARKRPC_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 pfennig-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 pfennig-cli functionality is removed from pfennigd + */ +std::string HelpMessageCli(bool mainProgram); + +#endif diff --git a/src/rpcdump.cpp b/src/rpcdump.cpp index 9b8eaea..416e668 100644 --- a/src/rpcdump.cpp +++ b/src/rpcdump.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -69,10 +69,10 @@ Value importprivkey(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 3) throw runtime_error( - "importprivkey \"bitmarkprivkey\" ( \"label\" rescan )\n" + "importprivkey \"pfennigprivkey\" ( \"label\" rescan )\n" "\nAdds a private key (as returned by dumpprivkey) to your wallet.\n" "\nArguments:\n" - "1. \"bitmarkprivkey\" (string, required) The private key (see dumpprivkey)\n" + "1. \"pfennigprivkey\" (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" @@ -236,11 +236,11 @@ Value dumpprivkey(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "dumpprivkey \"bitmarkaddress\"\n" - "\nReveals the private key corresponding to 'bitmarkaddress'.\n" + "dumpprivkey \"pfennigaddress\"\n" + "\nReveals the private key corresponding to 'pfennigaddress'.\n" "Then the importprivkey can be used with this output\n" "\nArguments:\n" - "1. \"bitmarkaddress\" (string, required) The bitmark address for the private key\n" + "1. \"pfennigaddress\" (string, required) The pfennig address for the private key\n" "\nResult:\n" "\"key\" (string) The private key\n" "\nExamples:\n" @@ -254,7 +254,7 @@ Value dumpprivkey(const Array& params, bool fHelp) string strAddress = params[0].get_str(); CBitmarkAddress address; if (!address.SetString(strAddress)) - throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Pfennig address"); + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid pfennig address"); CKeyID keyID; if (!address.GetKeyID(keyID)) throw JSONRPCError(RPC_TYPE_ERROR, "Address does not refer to a key"); diff --git a/src/rpcdump.cpp~ b/src/rpcdump.cpp~ new file mode 100644 index 0000000..0c057c7 --- /dev/null +++ b/src/rpcdump.cpp~ @@ -0,0 +1,326 @@ +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "rpcserver.h" +#include "init.h" +#include "main.h" +#include "sync.h" +#include "wallet.h" + +#include +#include + +#include +#include +#include "json/json_spirit_value.h" + +using namespace json_spirit; +using namespace std; + +void EnsureWalletIsUnlocked(); + +std::string static EncodeDumpTime(int64_t nTime) { + return DateTimeStrFormat("%Y-%m-%dT%H:%M:%SZ", nTime); +} + +int64_t static DecodeDumpTime(const std::string &str) { + static const boost::posix_time::ptime epoch = boost::posix_time::from_time_t(0); + 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); + iss >> ptime; + if (ptime.is_not_a_date_time()) + return 0; + return (ptime - epoch).total_seconds(); +} + +std::string static EncodeDumpString(const std::string &str) { + std::stringstream ret; + BOOST_FOREACH(unsigned char c, str) { + if (c <= 32 || c >= 128 || c == '%') { + ret << '%' << HexStr(&c, &c + 1); + } else { + ret << c; + } + } + return ret.str(); +} + +std::string DecodeDumpString(const std::string &str) { + std::stringstream ret; + for (unsigned int pos = 0; pos < str.length(); pos++) { + unsigned char c = str[pos]; + if (c == '%' && pos+2 < str.length()) { + c = (((str[pos+1]>>6)*9+((str[pos+1]-'0')&15)) << 4) | + ((str[pos+2]>>6)*9+((str[pos+2]-'0')&15)); + pos += 2; + } + ret << c; + } + return ret.str(); +} + +Value importprivkey(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 1 || params.size() > 3) + throw runtime_error( + "importprivkey \"pfennigprivkey\" ( \"label\" rescan )\n" + "\nAdds a private key (as returned by dumpprivkey) to your wallet.\n" + "\nArguments:\n" + "1. \"pfennigprivkey\" (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(); + + string strSecret = params[0].get_str(); + string strLabel = ""; + if (params.size() > 1) + strLabel = params[1].get_str(); + + // Whether to perform rescan after import + bool fRescan = true; + if (params.size() > 2) + fRescan = params[2].get_bool(); + + CBitmarkSecret vchSecret; + bool fGood = vchSecret.SetString(strSecret); + + 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->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(chainActive.Genesis(), true); + } + } + + return Value::null; +} + +Value importwallet(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "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(), std::ios::in | std::ios::ate); + if (!file.is_open()) + throw JSONRPCError(RPC_INVALID_PARAMETER, "Cannot open wallet dump file"); + + 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] == '#') + continue; + + std::vector vstr; + boost::split(vstr, line, boost::is_any_of(" ")); + if (vstr.size() < 2) + continue; + CBitmarkSecret vchSecret; + if (!vchSecret.SetString(vstr[0])) + continue; + CKey key = vchSecret.GetKey(); + CPubKey pubkey = key.GetPubKey(); + CKeyID keyid = pubkey.GetID(); + if (pwalletMain->HaveKey(keyid)) { + LogPrintf("Skipping import of %s (key already present)\n", CBitmarkAddress(keyid).ToString()); + continue; + } + int64_t nTime = DecodeDumpTime(vstr[1]); + std::string strLabel; + bool fLabel = true; + for (unsigned int nStr = 2; nStr < vstr.size(); nStr++) { + if (boost::algorithm::starts_with(vstr[nStr], "#")) + break; + if (vstr[nStr] == "change=1") + fLabel = false; + if (vstr[nStr] == "reserve=1") + fLabel = false; + if (boost::algorithm::starts_with(vstr[nStr], "label=")) { + strLabel = DecodeDumpString(vstr[nStr].substr(6)); + fLabel = true; + } + } + LogPrintf("Importing %s...\n", CBitmarkAddress(keyid).ToString()); + if (!pwalletMain->AddKeyPubKey(key, pubkey)) { + fGood = false; + continue; + } + pwalletMain->mapKeyMetadata[keyid].nCreateTime = nTime; + if (fLabel) + pwalletMain->SetAddressBook(keyid, strLabel, "receive"); + nTimeBegin = std::min(nTimeBegin, nTime); + } + file.close(); + pwalletMain->ShowProgress("", 100); // hide progress dialog in GUI + + CBlockIndex *pindex = chainActive.Tip(); + while (pindex && pindex->pprev && pindex->nTime > nTimeBegin - 7200) + pindex = pindex->pprev; + + if (!pwalletMain->nTimeFirstKey || nTimeBegin < pwalletMain->nTimeFirstKey) + pwalletMain->nTimeFirstKey = nTimeBegin; + + LogPrintf("Rescanning last %i blocks\n", chainActive.Height() - pindex->nHeight + 1); + pwalletMain->ScanForWalletTransactions(pindex); + pwalletMain->MarkDirty(); + + if (!fGood) + throw JSONRPCError(RPC_WALLET_ERROR, "Error adding some keys to wallet"); + + return Value::null; +} + +Value dumpprivkey(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "dumpprivkey \"pfennigaddress\"\n" + "\nReveals the private key corresponding to 'pfennigaddress'.\n" + "Then the importprivkey can be used with this output\n" + "\nArguments:\n" + "1. \"pfennigaddress\" (string, required) The pfennig 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(); + + string strAddress = params[0].get_str(); + CBitmarkAddress address; + if (!address.SetString(strAddress)) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid pfennig address"); + CKeyID keyID; + if (!address.GetKeyID(keyID)) + throw JSONRPCError(RPC_TYPE_ERROR, "Address does not refer to a key"); + CKey vchSecret; + if (!pwalletMain->GetKey(keyID, vchSecret)) + throw JSONRPCError(RPC_WALLET_ERROR, "Private key for address " + strAddress + " is not known"); + return CBitmarkSecret(vchSecret).ToString(); +} + + +Value dumpwallet(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "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(); + + ofstream file; + file.open(params[0].get_str().c_str()); + if (!file.is_open()) + throw JSONRPCError(RPC_INVALID_PARAMETER, "Cannot open wallet dump file"); + + 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++) { + 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 Pfennig %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++) { + const CKeyID &keyid = it->second; + std::string strTime = EncodeDumpTime(it->first); + std::string strAddr = CBitmarkAddress(keyid).ToString(); + CKey key; + if (pwalletMain->GetKey(keyid, key)) { + if (pwalletMain->mapAddressBook.count(keyid)) { + file << strprintf("%s %s label=%s # addr=%s\n", CBitmarkSecret(key).ToString(), strTime, EncodeDumpString(pwalletMain->mapAddressBook[keyid].name), strAddr); + } else if (setKeyPool.count(keyid)) { + file << strprintf("%s %s reserve=1 # addr=%s\n", CBitmarkSecret(key).ToString(), strTime, strAddr); + } else { + file << strprintf("%s %s change=1 # addr=%s\n", CBitmarkSecret(key).ToString(), strTime, strAddr); + } + } + } + file << "\n"; + file << "# End of dump\n"; + file.close(); + return Value::null; +} diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp index b895439..19351a5 100644 --- a/src/rpcmining.cpp +++ b/src/rpcmining.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -120,7 +120,7 @@ Value getgenerate(const Array& params, bool fHelp) throw runtime_error( "getgenerate\n" "\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 bitmark.conf setting gen)\n" + "It is set with the command line argument -gen (or pfennig.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" diff --git a/src/rpcmining.cpp~ b/src/rpcmining.cpp~ new file mode 100644 index 0000000..4e99aca --- /dev/null +++ b/src/rpcmining.cpp~ @@ -0,0 +1,629 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "init.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; + +#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" + "\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 pfennig.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); +} + + +Value setgenerate(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 1 || params.size() > 2) + throw runtime_error( + "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) + { + nGenProcLimit = params[1].get_int(); + if (nGenProcLimit == 0) + fGenerate = false; + } + + // -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; + GenerateBitmarks(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); + GenerateBitmarks(fGenerate, pwalletMain, nGenProcLimit); + } + + return Value::null; +} + +Value gethashespersec(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "gethashespersec\n" + "\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 (int64_t)0; + return (int64_t)dHashesPerSec; +} +#endif + + +Value getmininginfo(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "getmininginfo\n" + "\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)chainActive.Height())); + obj.push_back(Pair("currentblocksize", (uint64_t)nLastBlockSize)); + obj.push_back(Pair("currentblocktx", (uint64_t)nLastBlockTx)); + obj.push_back(Pair("difficulty", (double)GetDifficulty())); + 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" + "\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, "Pfennig is not connected!"); + + if (IsInitialBlockDownload()) + throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "Pfennig is downloading blocks..."); + + typedef map > mapNewBlock_t; + static mapNewBlock_t mapNewBlock; // FIXME: thread safety + static vector vNewBlockTemplate; + + if (params.size() == 0) + { + // Update block + static unsigned int nTransactionsUpdatedLast; + static CBlockIndex* pindexPrev; + static int64_t nStart; + static CBlockTemplate* pblocktemplate; + if (pindexPrev != chainActive.Tip() || + (mempool.GetTransactionsUpdated() != nTransactionsUpdatedLast && GetTime() - nStart > 60)) + { + if (pindexPrev != chainActive.Tip()) + { + // Deallocate old blocks since they're obsolete now + mapNewBlock.clear(); + BOOST_FOREACH(CBlockTemplate* pblocktemplate, vNewBlockTemplate) + delete pblocktemplate; + vNewBlockTemplate.clear(); + } + + // Clear pindexPrev so future getworks make a new block, despite any failures from here on + pindexPrev = NULL; + + // Store the pindexBest used before CreateNewBlock, to avoid races + nTransactionsUpdatedLast = mempool.GetTransactionsUpdated(); + CBlockIndex* pindexPrevNew = chainActive.Tip(); + nStart = GetTime(); + + // Create new block + pblocktemplate = CreateNewBlockWithKey(*pMiningKey); + if (!pblocktemplate) + throw JSONRPCError(RPC_OUT_OF_MEMORY, "Out of memory"); + vNewBlockTemplate.push_back(pblocktemplate); + + // Need to update only after we know CreateNewBlock succeeded + pindexPrev = pindexPrevNew; + } + CBlock* pblock = &pblocktemplate->block; // pointer for convenience + + // Update nTime + UpdateTime(*pblock, pindexPrev); + pblock->nNonce = 0; + + // Update nExtraNonce + static unsigned int nExtraNonce = 0; + IncrementExtraNonce(pblock, pindexPrev, nExtraNonce); + + // Save + mapNewBlock[pblock->hashMerkleRoot] = make_pair(pblock, pblock->vtx[0].vin[0].scriptSig); + + // Pre-build hash buffers + char pmidstate[32]; + char pdata[128]; + char phash1[64]; + FormatHashBuffers(pblock, pmidstate, pdata, phash1); + + uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); + + Object result; + result.push_back(Pair("midstate", HexStr(BEGIN(pmidstate), END(pmidstate)))); // deprecated + result.push_back(Pair("data", HexStr(BEGIN(pdata), END(pdata)))); + result.push_back(Pair("hash1", HexStr(BEGIN(phash1), END(phash1)))); // deprecated + result.push_back(Pair("target", HexStr(BEGIN(hashTarget), END(hashTarget)))); + return result; + } + else + { + // Parse parameters + vector vchData = ParseHex(params[0].get_str()); + if (vchData.size() != 128) + throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter"); + CBlock* pdata = (CBlock*)&vchData[0]; + + // Byte reverse + for (int i = 0; i < 128/4; i++) + ((unsigned int*)pdata)[i] = ByteReverse(((unsigned int*)pdata)[i]); + + // Get saved block + if (!mapNewBlock.count(pdata->hashMerkleRoot)) + return false; + CBlock* pblock = mapNewBlock[pdata->hashMerkleRoot].first; + + pblock->nTime = pdata->nTime; + pblock->nNonce = pdata->nNonce; + 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 ( \"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) + { + const Object& oparam = params[0].get_obj(); + const Value& modeval = find_value(oparam, "mode"); + if (modeval.type() == str_type) + strMode = modeval.get_str(); + else if (modeval.type() == null_type) + { + /* Do nothing */ + } + else + throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid mode"); + } + + if (strMode != "template") + throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid mode"); + + if (vNodes.empty()) + throw JSONRPCError(RPC_CLIENT_NOT_CONNECTED, "Pfennig is not connected!"); + + if (IsInitialBlockDownload()) + throw JSONRPCError(RPC_CLIENT_IN_INITIAL_DOWNLOAD, "Pfennig is downloading blocks..."); + + // Update block + static unsigned int nTransactionsUpdatedLast; + static CBlockIndex* pindexPrev; + static int64_t nStart; + static CBlockTemplate* pblocktemplate; + 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 = mempool.GetTransactionsUpdated(); + CBlockIndex* pindexPrevNew = chainActive.Tip(); + nStart = GetTime(); + + // Create new block + if(pblocktemplate) + { + delete pblocktemplate; + pblocktemplate = NULL; + } + CScript scriptDummy = CScript() << OP_TRUE; + pblocktemplate = CreateNewBlock(scriptDummy); + if (!pblocktemplate) + throw JSONRPCError(RPC_OUT_OF_MEMORY, "Out of memory"); + + // Need to update only after we know CreateNewBlock succeeded + pindexPrev = pindexPrevNew; + } + CBlock* pblock = &pblocktemplate->block; // pointer for convenience + + // Update nTime + UpdateTime(*pblock, pindexPrev); + pblock->nNonce = 0; + + Array transactions; + map setTxIndex; + int i = 0; + BOOST_FOREACH (CTransaction& tx, pblock->vtx) + { + uint256 txHash = tx.GetHash(); + setTxIndex[txHash] = i++; + + if (tx.IsCoinBase()) + continue; + + Object entry; + + CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); + ssTx << tx; + entry.push_back(Pair("data", HexStr(ssTx.begin(), ssTx.end()))); + + entry.push_back(Pair("hash", txHash.GetHex())); + + Array deps; + BOOST_FOREACH (const CTxIn &in, tx.vin) + { + if (setTxIndex.count(in.prevout.hash)) + deps.push_back(setTxIndex[in.prevout.hash]); + } + entry.push_back(Pair("depends", deps)); + + int index_in_template = i - 1; + entry.push_back(Pair("fee", pblocktemplate->vTxFees[index_in_template])); + entry.push_back(Pair("sigops", pblocktemplate->vTxSigOps[index_in_template])); + + transactions.push_back(entry); + } + + Object aux; + aux.push_back(Pair("flags", HexStr(COINBASE_FLAGS.begin(), COINBASE_FLAGS.end()))); + + uint256 hashTarget = CBigNum().SetCompact(pblock->nBits).getuint256(); + + static Array aMutable; + if (aMutable.empty()) + { + aMutable.push_back("time"); + aMutable.push_back("transactions"); + aMutable.push_back("prevblock"); + } + + Object result; + result.push_back(Pair("version", pblock->nVersion)); + result.push_back(Pair("previousblockhash", pblock->hashPrevBlock.GetHex())); + result.push_back(Pair("transactions", transactions)); + result.push_back(Pair("coinbaseaux", aux)); + result.push_back(Pair("coinbasevalue", (int64_t)pblock->vtx[0].vout[0].nValue)); + result.push_back(Pair("target", hashTarget.GetHex())); + result.push_back(Pair("mintime", (int64_t)pindexPrev->GetMedianTimePast()+1)); + result.push_back(Pair("mutable", aMutable)); + result.push_back(Pair("noncerange", "00000000ffffffff")); + result.push_back(Pair("sigoplimit", (int64_t)MAX_BLOCK_SIGOPS)); + result.push_back(Pair("sizelimit", (int64_t)MAX_BLOCK_SIZE)); + result.push_back(Pair("curtime", (int64_t)pblock->nTime)); + result.push_back(Pair("bits", HexBits(pblock->nBits))); + result.push_back(Pair("height", (int64_t)(pindexPrev->nHeight+1))); + + return result; +} + +Value submitblock(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 1 || params.size() > 2) + throw runtime_error( + "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); + CBlock pblock; + try { + ssBlock >> pblock; + } + catch (std::exception &e) { + throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Block decode failed"); + } + + CValidationState state; + bool fAccepted = ProcessBlock(state, NULL, &pblock); + if (!fAccepted) + return "rejected"; // TODO: report validation state + + return Value::null; +} diff --git a/src/rpcmisc.cpp b/src/rpcmisc.cpp index 3b5ce69..6b4f529 100644 --- a/src/rpcmisc.cpp +++ b/src/rpcmisc.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -39,7 +39,7 @@ Value getinfo(const Array& params, bool fHelp) " \"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 bitmark balance of the wallet\n" + " \"balance\": xxxxxxx, (numeric) the total pfennig 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" @@ -132,14 +132,14 @@ Value validateaddress(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "validateaddress \"bitmarkaddress\"\n" - "\nReturn information about the given bitmark address.\n" + "validateaddress \"pfennigaddress\"\n" + "\nReturn information about the given pfennig address.\n" "\nArguments:\n" - "1. \"bitmarkaddress\" (string, required) The bitmark address to validate\n" + "1. \"pfennigaddress\" (string, required) The pfennig 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\" : \"bitmarkaddress\", (string) The bitmark address validated\n" + " \"address\" : \"pfennigaddress\", (string) The pfennig 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" @@ -196,7 +196,7 @@ CScript _createmultisig_redeemScript(const Array& params) { const std::string& ks = keys[i].get_str(); #ifdef ENABLE_WALLET - // Case 1: Bitmark address and we have full public key: + // Case 1: Pfennig address and we have full public key: CBitmarkAddress address(ks); if (pwalletMain && address.IsValid()) { @@ -246,9 +246,9 @@ Value createmultisig(const Array& params, bool fHelp) "\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 bitmark addresses or hex-encoded public keys\n" + "2. \"keys\" (string, required) A json array of keys which are pfennig addresses or hex-encoded public keys\n" " [\n" - " \"key\" (string) bitmark address or hex-encoded public key\n" + " \"key\" (string) pfennig address or hex-encoded public key\n" " ,...\n" " ]\n" @@ -283,10 +283,10 @@ Value verifymessage(const Array& params, bool fHelp) { if (fHelp || params.size() != 3) throw runtime_error( - "verifymessage \"bitmarkaddress\" \"signature\" \"message\"\n" + "verifymessage \"pfennigaddress\" \"signature\" \"message\"\n" "\nVerify a signed message\n" "\nArguments:\n" - "1. \"bitmarkaddress\" (string, required) The bitmark address to use for the signature.\n" + "1. \"pfennigaddress\" (string, required) The pfennig 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" diff --git a/src/rpcmisc.cpp~ b/src/rpcmisc.cpp~ new file mode 100644 index 0000000..56e273b --- /dev/null +++ b/src/rpcmisc.cpp~ @@ -0,0 +1,400 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "alert.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 pfennig 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 PFG/kb\n" + " \"relayfee\": x.xxxx, (numeric) minimum relay fee for non-free transactions in PFG/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())); + 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(CBitmarkAddress(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 \"pfennigaddress\"\n" + "\nReturn information about the given pfennig address.\n" + "\nArguments:\n" + "1. \"pfennigaddress\" (string, required) The pfennig 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\" : \"pfennigaddress\", (string) The pfennig 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\"") + ); + + CBitmarkAddress 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_redeemScript(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: Pfennig address and we have full public key: + CBitmarkAddress 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); + if (result.size() > MAX_SCRIPT_ELEMENT_SIZE) + throw runtime_error(strprintf("redeemScript exceeds size limit: %d > %d", result.size(), MAX_SCRIPT_ELEMENT_SIZE)); + + 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 pfennig addresses or hex-encoded public keys\n" + " [\n" + " \"key\" (string) pfennig 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_redeemScript(params); + CScriptID innerID = inner.GetID(); + CBitmarkAddress 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 \"pfennigaddress\" \"signature\" \"message\"\n" + "\nVerify a signed message\n" + "\nArguments:\n" + "1. \"pfennigaddress\" (string, required) The pfennig 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(); + + CBitmarkAddress 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); +} + +extern CCriticalSection cs_mapAlerts; +extern map mapAlerts; + +// TODO verify and address +// There is a known deadlock situation with ThreadMessageHandler +// ThreadMessageHandler: holds cs_vSend and acquiring cs_main in SendMessages() +// ThreadRPCServer: holds cs_main and acquiring cs_vSend in alert.RelayTo()/PushMessage()/BeginMessage() +Value sendalert(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 8) + throw runtime_error( + "sendalert [cancelupto]\n" + " is the alert text message\n" + " is hex string of alert master private key\n" + " is the minimum applicable internal client version\n" + " is the maximum applicable internal client version\n" + " is integer priority number\n" + " is the alert id\n" + " when should this message be relayed until\n" + " when does this alert expire\n" + "[cancelupto] cancels all alert id's up to this number\n" + "Returns true or false."); + + CAlert alert; + CKey key; + + alert.strStatusBar = params[0].get_str(); + alert.nMinVer = params[2].get_int(); + alert.nMaxVer = params[3].get_int(); + alert.nPriority = params[4].get_int(); + alert.nID = params[5].get_int(); + if (params.size() > 8) + alert.nCancel = params[8].get_int(); + alert.nVersion = PROTOCOL_VERSION; + alert.nRelayUntil = GetAdjustedTime() + params[6].get_int(); + alert.nExpiration = GetAdjustedTime() + params[7].get_int(); + + CDataStream sMsg(SER_NETWORK, PROTOCOL_VERSION); + sMsg << (CUnsignedAlert)alert; + alert.vchMsg = vector(sMsg.begin(), sMsg.end()); + + vector vchPrivKey = ParseHex(params[1].get_str()); + key.SetPrivKey(CPrivKey(vchPrivKey.begin(), vchPrivKey.end()), false); // if key is not correct openssl may crash + if (!key.Sign(Hash(alert.vchMsg.begin(), alert.vchMsg.end()), alert.vchSig)) + throw runtime_error( + "Unable to sign alert, check private key?\n"); + if(!alert.ProcessAlert()) + throw runtime_error( + "Failed to process alert.\n"); + // Relay alert + { + LOCK(cs_vNodes); + BOOST_FOREACH(CNode* pnode, vNodes) + alert.RelayTo(pnode); + } + + Object result; + result.push_back(Pair("strStatusBar", alert.strStatusBar)); + result.push_back(Pair("nVersion", alert.nVersion)); + result.push_back(Pair("nMinVer", alert.nMinVer)); + result.push_back(Pair("nMaxVer", alert.nMaxVer)); + result.push_back(Pair("nPriority", alert.nPriority)); + result.push_back(Pair("nID", alert.nID)); + if (alert.nCancel > 0) + result.push_back(Pair("nCancel", alert.nCancel)); + return result; +} diff --git a/src/rpcnet.cpp b/src/rpcnet.cpp index 3c9ca91..9e2d627 100644 --- a/src/rpcnet.cpp +++ b/src/rpcnet.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -158,8 +158,8 @@ Value addnode(const Array& params, bool fHelp) "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:P2PPORT\" \"onetry\"") - + HelpExampleRpc("addnode", "\"192.168.0.6:P2PPORT\", \"onetry\"") + + HelpExampleCli("addnode", "\"192.168.0.6:40002\" \"onetry\"") + + HelpExampleRpc("addnode", "\"192.168.0.6:40002\", \"onetry\"") ); string strNode = params[0].get_str(); @@ -212,7 +212,7 @@ Value getaddednodeinfo(const Array& params, bool fHelp) " \"connected\" : true|false, (boolean) If connected\n" " \"addresses\" : [\n" " {\n" - " \"address\" : \"192.168.0.201:P2PPORT\", (string) The bitmark server host and port\n" + " \"address\" : \"192.168.0.201:40002\", (string) The pfennig server host and port\n" " \"connected\" : \"outbound\" (string) connection, inbound or outbound\n" " }\n" " ,...\n" diff --git a/src/rpcnet.cpp~ b/src/rpcnet.cpp~ new file mode 100644 index 0000000..06ec092 --- /dev/null +++ b/src/rpcnet.cpp~ @@ -0,0 +1,387 @@ +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "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; + +Value getconnectioncount(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "getconnectioncount\n" + "\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(); + + LOCK(cs_vNodes); + vstats.reserve(vNodes.size()); + BOOST_FOREACH(CNode* pnode, vNodes) { + CNodeStats stats; + pnode->copyStats(stats); + vstats.push_back(stats); + } +} + +Value getpeerinfo(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "getpeerinfo\n" + "\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); + + Array ret; + + BOOST_FOREACH(const CNodeStats& stats, vstats) { + Object obj; + CNodeStateStats statestats; + bool fStateStats = GetNodeStateStats(stats.nodeid, statestats); + obj.push_back(Pair("addr", stats.addrName)); + 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)); + // 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)); + if (fStateStats) { + obj.push_back(Pair("banscore", statestats.nMisbehavior)); + } + obj.push_back(Pair("syncnode", stats.fSyncNode)); + + ret.push_back(obj); + } + + return ret; +} + +Value addnode(const Array& params, bool fHelp) +{ + string strCommand; + if (params.size() == 2) + strCommand = params[1].get_str(); + if (fHelp || params.size() != 2 || + (strCommand != "onetry" && strCommand != "add" && strCommand != "remove")) + throw runtime_error( + "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:40002\" \"onetry\"") + + HelpExampleRpc("addnode", "\"192.168.0.6:40002\", \"onetry\"") + ); + + string strNode = params[0].get_str(); + + if (strCommand == "onetry") + { + CAddress addr; + ConnectNode(addr, strNode.c_str()); + return Value::null; + } + + LOCK(cs_vAddedNodes); + vector::iterator it = vAddedNodes.begin(); + for(; it != vAddedNodes.end(); it++) + if (strNode == *it) + break; + + if (strCommand == "add") + { + if (it != vAddedNodes.end()) + 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(RPC_CLIENT_NODE_NOT_ADDED, "Error: Node has not been added."); + vAddedNodes.erase(it); + } + + return Value::null; +} + +Value getaddednodeinfo(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 1 || params.size() > 2) + throw runtime_error( + "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.\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:40002\", (string) The pfennig 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(); + + list laddedNodes(0); + if (params.size() == 1) + { + LOCK(cs_vAddedNodes); + BOOST_FOREACH(string& strAddNode, vAddedNodes) + laddedNodes.push_back(strAddNode); + } + else + { + string strNode = params[1].get_str(); + LOCK(cs_vAddedNodes); + BOOST_FOREACH(string& strAddNode, vAddedNodes) + if (strAddNode == strNode) + { + laddedNodes.push_back(strAddNode); + break; + } + if (laddedNodes.size() == 0) + 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) + { + vector vservNode(0); + if(Lookup(strAddNode.c_str(), vservNode, Params().GetDefaultPort(), fNameLookup, 0)) + laddedAddreses.push_back(make_pair(strAddNode, vservNode)); + else + { + Object obj; + obj.push_back(Pair("addednode", strAddNode)); + obj.push_back(Pair("connected", false)); + Array addresses; + obj.push_back(Pair("addresses", addresses)); + } + } + + LOCK(cs_vNodes); + for (list > >::iterator it = laddedAddreses.begin(); it != laddedAddreses.end(); it++) + { + Object obj; + obj.push_back(Pair("addednode", it->first)); + + Array addresses; + bool fConnected = false; + BOOST_FOREACH(CService& addrNode, it->second) + { + bool fFound = false; + Object node; + node.push_back(Pair("address", addrNode.ToString())); + BOOST_FOREACH(CNode* pnode, vNodes) + if (pnode->addr == addrNode) + { + fFound = true; + fConnected = true; + node.push_back(Pair("connected", pnode->fInbound ? "inbound" : "outbound")); + break; + } + if (!fFound) + node.push_back(Pair("connected", "false")); + addresses.push_back(node); + } + obj.push_back(Pair("connected", fConnected)); + obj.push_back(Pair("addresses", addresses)); + ret.push_back(obj); + } + + 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 PFG/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 index 7e59ae6..0514c61 100644 --- a/src/rpcprotocol.cpp +++ b/src/rpcprotocol.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -37,7 +37,7 @@ string HTTPPost(const string& strMsg, const map& mapRequestHeader { ostringstream s; s << "POST / HTTP/1.1\r\n" - << "User-Agent: bitmark-json-rpc/" << FormatFullVersion() << "\r\n" + << "User-Agent: pfennig-json-rpc/" << FormatFullVersion() << "\r\n" << "Host: 127.0.0.1\r\n" << "Content-Type: application/json\r\n" << "Content-Length: " << strMsg.size() << "\r\n" @@ -60,7 +60,7 @@ 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: bitmark-json-rpc/%s\r\n" + "Server: pfennig-json-rpc/%s\r\n" "WWW-Authenticate: Basic realm=\"jsonrpc\"\r\n" "Content-Type: text/html\r\n" "Content-Length: 296\r\n" @@ -87,7 +87,7 @@ string HTTPReply(int nStatus, const string& strMsg, bool keepalive) "Connection: %s\r\n" "Content-Length: %u\r\n" "Content-Type: application/json\r\n" - "Server: bitmark-json-rpc/%s\r\n" + "Server: pfennig-json-rpc/%s\r\n" "\r\n" "%s", nStatus, @@ -209,7 +209,7 @@ int ReadHTTPMessage(std::basic_istream& stream, map + +#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: pfennig-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: pfennig-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: pfennig-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. Pfennig 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 index 9252744..75360e1 100644 --- a/src/rpcprotocol.h +++ b/src/rpcprotocol.h @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -31,7 +31,7 @@ enum HTTPStatusCode HTTP_INTERNAL_SERVER_ERROR = 500, }; -// Bitmark RPC error codes +// Pfennig RPC error codes enum RPCErrorCode { // Standard JSON-RPC 2.0 errors @@ -55,7 +55,7 @@ enum RPCErrorCode RPC_TRANSACTION_ALREADY_IN_CHAIN= -27, // Transaction already in chain // P2P client errors - RPC_CLIENT_NOT_CONNECTED = -9, // Bitmark is not connected + RPC_CLIENT_NOT_CONNECTED = -9, // Pfennig 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 diff --git a/src/rpcprotocol.h~ b/src/rpcprotocol.h~ new file mode 100644 index 0000000..14dfd98 --- /dev/null +++ b/src/rpcprotocol.h~ @@ -0,0 +1,141 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef _BITMARKRPC_PROTOCOL_H_ +#define _BITMARKRPC_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, +}; + +// Pfennig 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, // Pfennig 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 004cd1e..6684055 100644 --- a/src/rpcrawtransaction.cpp +++ b/src/rpcrawtransaction.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -153,7 +153,7 @@ Value getrawtransaction(const Array& params, bool fHelp) " \"reqSigs\" : n, (numeric) The required sigs\n" " \"type\" : \"pubkeyhash\", (string) The type, eg 'pubkeyhash'\n" " \"addresses\" : [ (json array of string)\n" - " \"bitmarkaddress\" (string) bitmark address\n" + " \"pfennigaddress\" (string) pfennig address\n" " ,...\n" " ]\n" " }\n" @@ -210,9 +210,9 @@ Value listunspent(const Array& params, bool fHelp) "\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 bitmark addresses to filter\n" + "3. \"addresses\" (string) A json array of pfennig addresses to filter\n" " [\n" - " \"address\" (string) bitmark address\n" + " \"address\" (string) pfennig address\n" " ,...\n" " ]\n" "\nResult\n" @@ -220,7 +220,7 @@ Value listunspent(const Array& params, bool fHelp) " {\n" " \"txid\" : \"txid\", (string) the transaction id \n" " \"vout\" : n, (numeric) the vout value\n" - " \"address\" : \"address\", (string) the bitmark address\n" + " \"address\" : \"address\", (string) the pfennig 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 PFG\n" @@ -333,7 +333,7 @@ Value createrawtransaction(const Array& params, bool fHelp) " ]\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 bitmark address, the value is the PFG amount\n" + " \"address\": x.xxx (numeric, required) The key is the pfennig address, the value is the PFG amount\n" " ,...\n" " }\n" @@ -430,7 +430,7 @@ Value decoderawtransaction(const Array& params, bool fHelp) " \"reqSigs\" : n, (numeric) The required sigs\n" " \"type\" : \"pubkeyhash\", (string) The type, eg 'pubkeyhash'\n" " \"addresses\" : [ (json array of string)\n" - " \"12tvKAXCxZjSmdNbao16dKXC8tRWfcF5oc\" (string) bitmark address\n" + " \"12tvKAXCxZjSmdNbao16dKXC8tRWfcF5oc\" (string) pfennig address\n" " ,...\n" " ]\n" " }\n" @@ -475,7 +475,7 @@ Value decodescript(const Array& params, bool fHelp) " \"type\":\"type\", (string) The output type\n" " \"reqSigs\": n, (numeric) The required signatures\n" " \"addresses\": [ (json array of string)\n" - " \"address\" (string) bitmark address\n" + " \"address\" (string) pfennig address\n" " ,...\n" " ],\n" " \"p2sh\",\"address\" (string) script address\n" diff --git a/src/rpcrawtransaction.cpp~ b/src/rpcrawtransaction.cpp~ new file mode 100644 index 0000000..116355b --- /dev/null +++ b/src/rpcrawtransaction.cpp~ @@ -0,0 +1,797 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "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; + +void ScriptPubKeyToJSON(const CScript& scriptPubKey, Object& out, bool fIncludeHex) +{ + txnouttype type; + vector addresses; + int nRequired; + + out.push_back(Pair("asm", scriptPubKey.ToString())); + if (fIncludeHex) + out.push_back(Pair("hex", HexStr(scriptPubKey.begin(), scriptPubKey.end()))); + + if (!ExtractDestinations(scriptPubKey, type, addresses, nRequired)) + { + out.push_back(Pair("type", GetTxnOutputType(type))); + return; + } + + out.push_back(Pair("reqSigs", nRequired)); + out.push_back(Pair("type", GetTxnOutputType(type))); + + Array a; + BOOST_FOREACH(const CTxDestination& addr, addresses) + a.push_back(CBitmarkAddress(addr).ToString()); + out.push_back(Pair("addresses", a)); +} + +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", (int64_t)tx.nLockTime)); + Array vin; + BOOST_FOREACH(const CTxIn& txin, tx.vin) + { + Object in; + if (tx.IsCoinBase()) + in.push_back(Pair("coinbase", HexStr(txin.scriptSig.begin(), txin.scriptSig.end()))); + else + { + in.push_back(Pair("txid", txin.prevout.hash.GetHex())); + 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", (int64_t)txin.nSequence)); + vin.push_back(in); + } + entry.push_back(Pair("vin", vin)); + Array vout; + for (unsigned int i = 0; i < tx.vout.size(); i++) + { + const CTxOut& txout = tx.vout[i]; + Object out; + out.push_back(Pair("value", ValueFromAmount(txout.nValue))); + out.push_back(Pair("n", (int64_t)i)); + Object o; + ScriptPubKeyToJSON(txout.scriptPubKey, o, true); + out.push_back(Pair("scriptPubKey", o)); + vout.push_back(out); + } + entry.push_back(Pair("vout", vout)); + + if (hashBlock != 0) + { + entry.push_back(Pair("blockhash", hashBlock.GetHex())); + map::iterator mi = mapBlockIndex.find(hashBlock); + if (mi != mapBlockIndex.end() && (*mi).second) + { + CBlockIndex* pindex = (*mi).second; + if (chainActive.Contains(pindex)) + { + 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)); + } + } +} + +Value getrawtransaction(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 1 || params.size() > 2) + throw runtime_error( + "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 PFG\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" + " \"pfennigaddress\" (string) pfennig 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"); + + bool fVerbose = false; + if (params.size() > 1) + fVerbose = (params[1].get_int() != 0); + + CTransaction tx; + uint256 hashBlock = 0; + if (!GetTransaction(hash, tx, hashBlock, true)) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "No information available about transaction"); + + CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); + ssTx << tx; + string strHex = HexStr(ssTx.begin(), ssTx.end()); + + if (!fVerbose) + return strHex; + + Object result; + result.push_back(Pair("hex", strHex)); + TxToJSON(tx, hashBlock, result); + return result; +} + +#ifdef ENABLE_WALLET +Value listunspent(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 3) + throw runtime_error( + "listunspent ( minconf maxconf [\"address\",...] )\n" + "\nReturns array of unspent transaction outputs\n" + "with between minconf and maxconf (inclusive) confirmations.\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}\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 pfennig addresses to filter\n" + " [\n" + " \"address\" (string) pfennig 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 pfennig 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 PFG\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)); + + int nMinDepth = 1; + if (params.size() > 0) + nMinDepth = params[0].get_int(); + + int nMaxDepth = 9999999; + if (params.size() > 1) + nMaxDepth = params[1].get_int(); + + set setAddress; + if (params.size() > 2) + { + Array inputs = params[2].get_array(); + BOOST_FOREACH(Value& input, inputs) + { + CBitmarkAddress address(input.get_str()); + if (!address.IsValid()) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid Pfennig address: ")+input.get_str()); + if (setAddress.count(address)) + throw JSONRPCError(RPC_INVALID_PARAMETER, string("Invalid parameter, duplicated address: ")+input.get_str()); + setAddress.insert(address); + } + } + + Array results; + vector vecOutputs; + assert(pwalletMain != NULL); + pwalletMain->AvailableCoins(vecOutputs, false); + BOOST_FOREACH(const COutput& out, vecOutputs) + { + if (out.nDepth < nMinDepth || out.nDepth > nMaxDepth) + continue; + + if (setAddress.size()) + { + CTxDestination address; + if (!ExtractDestination(out.tx->vout[out.i].scriptPubKey, address)) + continue; + + if (!setAddress.count(address)) + continue; + } + + 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())); + entry.push_back(Pair("vout", out.i)); + CTxDestination address; + if (ExtractDestination(out.tx->vout[out.i].scriptPubKey, address)) + { + entry.push_back(Pair("address", CBitmarkAddress(address).ToString())); + if (pwalletMain->mapAddressBook.count(address)) + entry.push_back(Pair("account", pwalletMain->mapAddressBook[address].name)); + } + entry.push_back(Pair("scriptPubKey", HexStr(pk.begin(), pk.end()))); + if (pk.IsPayToScriptHash()) + { + CTxDestination address; + if (ExtractDestination(pk, address)) + { + const CScriptID& hash = boost::get(address); + CScript redeemScript; + if (pwalletMain->GetCScript(hash, redeemScript)) + entry.push_back(Pair("redeemScript", HexStr(redeemScript.begin(), redeemScript.end()))); + } + } + entry.push_back(Pair("amount",ValueFromAmount(nValue))); + entry.push_back(Pair("confirmations",out.nDepth)); + results.push_back(entry); + } + + return results; +} +#endif + +Value createrawtransaction(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 2) + throw runtime_error( + "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.\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 pfennig address, the value is the PFG 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)); + + Array inputs = params[0].get_array(); + Object sendTo = params[1].get_obj(); + + CTransaction rawTx; + + BOOST_FOREACH(const Value& input, inputs) + { + const Object& o = input.get_obj(); + + uint256 txid = ParseHashO(o, "txid"); + + const Value& vout_v = find_value(o, "vout"); + if (vout_v.type() != int_type) + throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, missing vout key"); + int nOutput = vout_v.get_int(); + if (nOutput < 0) + throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, vout must be positive"); + + CTxIn in(COutPoint(txid, nOutput)); + rawTx.vin.push_back(in); + } + + set setAddress; + BOOST_FOREACH(const Pair& s, sendTo) + { + CBitmarkAddress address(s.name_); + if (!address.IsValid()) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid Pfennig address: ")+s.name_); + + if (setAddress.count(address)) + throw JSONRPCError(RPC_INVALID_PARAMETER, string("Invalid parameter, duplicated address: ")+s.name_); + setAddress.insert(address); + + CScript scriptPubKey; + scriptPubKey.SetDestination(address.Get()); + int64_t nAmount = AmountFromValue(s.value_); + + CTxOut out(nAmount, scriptPubKey); + rawTx.vout.push_back(out); + } + + CDataStream ss(SER_NETWORK, PROTOCOL_VERSION); + ss << rawTx; + return HexStr(ss.begin(), ss.end()); +} + +Value decoderawtransaction(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "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 PFG\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) pfennig 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); + CTransaction tx; + try { + ssData >> tx; + } + catch (std::exception &e) { + throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "TX decode failed"); + } + + Object result; + TxToJSON(tx, 0, result); + + 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) pfennig 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", CBitmarkAddress(script.GetID()).ToString())); + return r; +} + +Value signrawtransaction(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 1 || params.size() > 4) + throw runtime_error( + "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" + "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" +#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 for P2SH) 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); + + vector txData(ParseHexV(params[0], "argument 1")); + CDataStream ssData(txData, SER_NETWORK, PROTOCOL_VERSION); + vector txVariants; + while (!ssData.empty()) + { + try { + CTransaction tx; + ssData >> tx; + txVariants.push_back(tx); + } + catch (std::exception &e) { + throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "TX decode failed"); + } + } + + if (txVariants.empty()) + throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Missing transaction"); + + // mergedTx will end up with all the signatures; it + // starts as a clone of the rawtx: + CTransaction mergedTx(txVariants[0]); + bool fComplete = true; + + // Fetch previous transactions (inputs): + CCoinsView viewDummy; + CCoinsViewCache view(viewDummy); + { + LOCK(mempool.cs); + CCoinsViewCache &viewChain = *pcoinsTip; + CCoinsViewMemPool viewMempool(viewChain, mempool); + view.SetBackend(viewMempool); // temporarily switch cache backend to db+mempool view + + BOOST_FOREACH(const CTxIn& txin, mergedTx.vin) { + const uint256& prevHash = txin.prevout.hash; + CCoins coins; + view.GetCoins(prevHash, coins); // this is certainly allowed to fail + } + + view.SetBackend(viewDummy); // switch back to avoid locking mempool for too long + } + + bool fGivenKeys = false; + CBasicKeyStore tempKeystore; + if (params.size() > 2 && params[2].type() != null_type) + { + fGivenKeys = true; + Array keys = params[2].get_array(); + BOOST_FOREACH(Value k, keys) + { + CBitmarkSecret vchSecret; + bool fGood = vchSecret.SetString(k.get_str()); + if (!fGood) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid private key"); + CKey key = vchSecret.GetKey(); + 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) + { + Array prevTxs = params[1].get_array(); + BOOST_FOREACH(Value& p, prevTxs) + { + if (p.type() != obj_type) + throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "expected object with {\"txid'\",\"vout\",\"scriptPubKey\"}"); + + Object prevOut = p.get_obj(); + + RPCTypeCheck(prevOut, map_list_of("txid", str_type)("vout", int_type)("scriptPubKey", str_type)); + + uint256 txid = ParseHashO(prevOut, "txid"); + + int nOut = find_value(prevOut, "vout").get_int(); + if (nOut < 0) + throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "vout must be positive"); + + vector pkData(ParseHexO(prevOut, "scriptPubKey")); + CScript scriptPubKey(pkData.begin(), pkData.end()); + + CCoins coins; + if (view.GetCoins(txid, coins)) { + if (coins.IsAvailable(nOut) && coins.vout[nOut].scriptPubKey != scriptPubKey) { + string err("Previous output scriptPubKey mismatch:\n"); + err = err + coins.vout[nOut].scriptPubKey.ToString() + "\nvs:\n"+ + scriptPubKey.ToString(); + throw JSONRPCError(RPC_DESERIALIZATION_ERROR, err); + } + // what todo if txid is known, but the actual output isn't? + } + if ((unsigned int)nOut >= coins.vout.size()) + coins.vout.resize(nOut+1); + coins.vout[nOut].scriptPubKey = scriptPubKey; + coins.vout[nOut].nValue = 0; // we don't know the actual output value + view.SetCoins(txid, coins); + + // if redeemScript given and not using the local wallet (private keys + // given), add redeemScript to the tempKeystore so it can be signed: + if (fGivenKeys && scriptPubKey.IsPayToScriptHash()) + { + RPCTypeCheck(prevOut, map_list_of("txid", str_type)("vout", int_type)("scriptPubKey", str_type)("redeemScript",str_type)); + Value v = find_value(prevOut, "redeemScript"); + if (!(v == Value::null)) + { + vector rsData(ParseHexV(v, "redeemScript")); + CScript redeemScript(rsData.begin(), rsData.end()); + tempKeystore.AddCScript(redeemScript); + } + } + } + } + +#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) + { + static map mapSigHashValues = + boost::assign::map_list_of + (string("ALL"), int(SIGHASH_ALL)) + (string("ALL|ANYONECANPAY"), int(SIGHASH_ALL|SIGHASH_ANYONECANPAY)) + (string("NONE"), int(SIGHASH_NONE)) + (string("NONE|ANYONECANPAY"), int(SIGHASH_NONE|SIGHASH_ANYONECANPAY)) + (string("SINGLE"), int(SIGHASH_SINGLE)) + (string("SINGLE|ANYONECANPAY"), int(SIGHASH_SINGLE|SIGHASH_ANYONECANPAY)) + ; + string strHashType = params[3].get_str(); + if (mapSigHashValues.count(strHashType)) + nHashType = mapSigHashValues[strHashType]; + else + throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid sighash param"); + } + + bool fHashSingle = ((nHashType & ~SIGHASH_ANYONECANPAY) == SIGHASH_SINGLE); + + // Sign what we can: + for (unsigned int i = 0; i < mergedTx.vin.size(); i++) + { + CTxIn& txin = mergedTx.vin[i]; + CCoins coins; + if (!view.GetCoins(txin.prevout.hash, coins) || !coins.IsAvailable(txin.prevout.n)) + { + fComplete = false; + continue; + } + const CScript& prevPubKey = coins.vout[txin.prevout.n].scriptPubKey; + + txin.scriptSig.clear(); + // Only sign SIGHASH_SINGLE if there's a corresponding output: + if (!fHashSingle || (i < mergedTx.vout.size())) + SignSignature(keystore, prevPubKey, mergedTx, i, nHashType); + + // ... and merge in other signatures: + BOOST_FOREACH(const CTransaction& txv, txVariants) + { + txin.scriptSig = CombineSignatures(prevPubKey, mergedTx, i, txin.scriptSig, txv.vin[i].scriptSig); + } + if (!VerifyScript(txin.scriptSig, prevPubKey, mergedTx, i, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC, 0)) + fComplete = false; + } + + Object result; + CDataStream ssTx(SER_NETWORK, PROTOCOL_VERSION); + ssTx << mergedTx; + result.push_back(Pair("hex", HexStr(ssTx.begin(), ssTx.end()))); + result.push_back(Pair("complete", fComplete)); + + return result; +} + +Value sendrawtransaction(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 1 || params.size() > 2) + throw runtime_error( + "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; + } + catch (std::exception &e) { + throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "TX decode failed"); + } + uint256 hashTx = tx.GetHash(); + + CCoinsViewCache &view = *pcoinsTip; + CCoins existingCoins; + 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()); + } + } else if (fHaveChain) { + throw JSONRPCError(RPC_TRANSACTION_ALREADY_IN_CHAIN, "transaction already in block chain"); + } + RelayTransaction(tx, hashTx); + + return hashTx.GetHex(); +} diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index 96ea006..e5d464e 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -518,7 +518,7 @@ void StartRPCThreads() _("%s, you must set a rpcpassword in the configuration file:\n" "%s\n" "It is recommended you use the following random password:\n" - "rpcuser=bitmarkrpc\n" + "rpcuser=pfennigrpc\n" "rpcpassword=%s\n" "(you do not need to remember this password)\n" "The username and password MUST NOT be the same.\n" @@ -895,7 +895,7 @@ std::string HelpExampleCli(string methodname, string args){ 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:RPCPORT/\n"; + "\"method\": \"" + methodname + "\", \"params\": [" + args + "] }' -H 'content-type: text/plain;' http://127.0.0.1:40001/\n"; } const CRPCTable tableRPC; diff --git a/src/rpcserver.cpp~ b/src/rpcserver.cpp~ new file mode 100644 index 0000000..d2445e0 --- /dev/null +++ b/src/rpcserver.cpp~ @@ -0,0 +1,901 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "base58.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 "json/json_spirit_writer_template.h" + +using namespace std; +using namespace boost; +using namespace boost::asio; +using namespace json_spirit; + +static std::string strRPCUserColonPass; + +// These are created by StartRPCThreads, destroyed in StopRPCThreads +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; +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, + bool fAllowNull) +{ + unsigned int i = 0; + BOOST_FOREACH(Value_type t, typesExpected) + { + if (params.size() <= i) + break; + + const Value& v = params[i]; + if (!((v.type() == t) || (fAllowNull && (v.type() == null_type)))) + { + string err = strprintf("Expected type %s, got %s", + Value_type_name[t], Value_type_name[v.type()]); + throw JSONRPCError(RPC_TYPE_ERROR, err); + } + i++; + } +} + +void RPCTypeCheck(const Object& o, + const map& typesExpected, + bool fAllowNull) +{ + BOOST_FOREACH(const PAIRTYPE(string, Value_type)& t, typesExpected) + { + const Value& v = find_value(o, t.first); + if (!fAllowNull && v.type() == null_type) + 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, Value_type_name[v.type()]); + throw JSONRPCError(RPC_TYPE_ERROR, err); + } + } +} + +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_t nAmount = roundint64(dAmount * COIN); + if (!MoneyRange(nAmount)) + throw JSONRPCError(RPC_TYPE_ERROR, "Invalid amount"); + return nAmount; +} + +Value ValueFromAmount(int64_t amount) +{ + return (double)amount / (double)COIN; +} + +std::string HexBits(unsigned int nBits) +{ + union { + int32_t nBits; + char cBits[4]; + } uBits; + uBits.nBits = htonl((int32_t)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); +} + + +/// +/// Note: This interface may still be subject to change. +/// + +string CRPCTable::help(string strCommand) const +{ + string strRet; + set setDone; + for (map::const_iterator mi = mapCommands.begin(); mi != mapCommands.end(); ++mi) + { + const CRPCCommand *pcmd = mi->second; + string strMethod = mi->first; + // We already filter duplicates, but these deprecated screw up the sort order + if (strMethod.find("label") != string::npos) + continue; + if (strCommand != "" && strMethod != strCommand) + continue; +#ifdef ENABLE_WALLET + if (pcmd->reqWallet && !pwalletMain) + continue; +#endif + + try + { + Array params; + rpcfn_type pfn = pcmd->actor; + if (setDone.insert(pfn).second) + (*pfn)(params, true); + } + catch (std::exception& e) + { + // Help text is returned in an exception + string strHelp = string(e.what()); + if (strCommand == "") + if (strHelp.find('\n') != string::npos) + strHelp = strHelp.substr(0, strHelp.find('\n')); + strRet += strHelp + "\n"; + } + } + if (strRet == "") + strRet = strprintf("help: unknown command: %s\n", strCommand); + strRet = strRet.substr(0,strRet.size()-1); + return strRet; +} + +Value help(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 1) + throw runtime_error( + "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) + strCommand = params[0].get_str(); + + return tableRPC.help(strCommand); +} + + +Value stop(const Array& params, bool fHelp) +{ + // Accept the deprecated and ignored 'detach' boolean argument + if (fHelp || params.size() > 1) + throw runtime_error( + "stop\n" + "\nStop Pfennig server."); + // Shutdown will take long enough that the response should get back + StartShutdown(); + return "Pfennig server stopping"; +} + + + +// +// Call Table +// + + +static const CRPCCommand vRPCCommands[] = +{ // 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 }, + { "sendalert", &sendalert, false, false, false }, + + /* Block chain and UTXO */ + { "getblockchaininfo", &getblockchaininfo, true, false, false }, + { "getbestblockhash", &getbestblockhash, true, false, false }, + { "getblockcount", &getblockcount, true, false, false }, + { "getblock", &getblock, true, false, false }, + { "getblockhash", &getblockhash, true, 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, true, false, false }, + + /* Raw transactions */ + { "createrawtransaction", &createrawtransaction, true, false, false }, + { "decoderawtransaction", &decoderawtransaction, true, false, false }, + { "decodescript", &decodescript, true, false, false }, + { "getrawtransaction", &getrawtransaction, true, 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, true, false, false }, + +#ifdef ENABLE_WALLET + /* Wallet */ + { "addmultisigaddress", &addmultisigaddress, true, false, true }, + { "backupwallet", &backupwallet, true, false, true }, + { "dumpprivkey", &dumpprivkey, true, false, true }, + { "dumpwallet", &dumpwallet, true, false, true }, + { "encryptwallet", &encryptwallet, true, false, true }, + { "getaccountaddress", &getaccountaddress, true, false, true }, + { "getaccount", &getaccount, true, 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, false, false, true }, + { "importprivkey", &importprivkey, true, false, true }, + { "importwallet", &importwallet, true, 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, true, 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, true, false, true }, + { "signmessage", &signmessage, true, false, true }, + { "walletlock", &walletlock, true, false, true }, + { "walletpassphrasechange", &walletpassphrasechange, true, 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() +{ + unsigned int vcidx; + for (vcidx = 0; vcidx < (sizeof(vRPCCommands) / sizeof(vRPCCommands[0])); vcidx++) + { + const CRPCCommand *pcmd; + + pcmd = &vRPCCommands[vcidx]; + mapCommands[pcmd->name] = pcmd; + } +} + +const CRPCCommand *CRPCTable::operator[](string name) const +{ + map::const_iterator it = mapCommands.find(name); + if (it == mapCommands.end()) + return NULL; + return (*it).second; +} + + +bool HTTPAuthorized(map& mapHeaders) +{ + string strAuth = mapHeaders["authorization"]; + if (strAuth.substr(0,6) != "Basic ") + return false; + string strUserPass64 = strAuth.substr(6); boost::trim(strUserPass64); + string strUserPass = DecodeBase64(strUserPass64); + return TimingResistantEqual(strUserPass, strRPCUserColonPass); +} + +void ErrorReply(std::ostream& stream, const Object& objError, const Value& id) +{ + // Send error reply from json-rpc error object + int nStatus = HTTP_INTERNAL_SERVER_ERROR; + int code = find_value(objError, "code").get_int(); + if (code == RPC_INVALID_REQUEST) nStatus = HTTP_BAD_REQUEST; + else if (code == RPC_METHOD_NOT_FOUND) nStatus = HTTP_NOT_FOUND; + string strReply = JSONRPCReply(Value::null, objError, id); + stream << HTTPReply(nStatus, strReply, false) << std::flush; +} + +bool ClientAllowed(const boost::asio::ip::address& address) +{ + // Make sure that IPv4-compatible and IPv4-mapped IPv6 addresses are treated as IPv4 addresses + if (address.is_v6() + && (address.to_v6().is_v4_compatible() + || address.to_v6().is_v4_mapped())) + return ClientAllowed(address.to_v6().to_v4()); + + if (address == asio::ip::address_v4::loopback() + || address == asio::ip::address_v6::loopback() + || (address.is_v4() + // Check whether IPv4 addresses match 127.0.0.0/8 (loopback subnet) + && (address.to_v4().to_ulong() & 0xff000000) == 0x7f000000)) + return true; + + const string strAddress = address.to_string(); + const vector& vAllow = mapMultiArgs["-rpcallowip"]; + BOOST_FOREACH(string strAllow, vAllow) + if (WildcardMatch(strAddress, strAllow)) + return true; + return false; +} + +class AcceptedConnection +{ +public: + virtual ~AcceptedConnection() {} + + virtual std::iostream& stream() = 0; + virtual std::string peer_address_to_string() const = 0; + virtual void close() = 0; +}; + +template +class AcceptedConnectionImpl : public AcceptedConnection +{ +public: + AcceptedConnectionImpl( + asio::io_service& io_service, + ssl::context &context, + bool fUseSSL) : + sslStream(io_service, context), + _d(sslStream, fUseSSL), + _stream(_d) + { + } + + virtual std::iostream& stream() + { + return _stream; + } + + virtual std::string peer_address_to_string() const + { + return peer.address().to_string(); + } + + virtual void close() + { + _stream.close(); + } + + typename Protocol::endpoint peer; + asio::ssl::stream sslStream; + +private: + SSLIOStreamDevice _d; + iostreams::stream< SSLIOStreamDevice > _stream; +}; + +void ServiceConnection(AcceptedConnection *conn); + +// Forward declaration required for RPCListen +template +static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptor > acceptor, + ssl::context& context, + bool fUseSSL, + boost::shared_ptr< AcceptedConnection > conn, + const boost::system::error_code& error); + +/** + * Sets up I/O resources to accept and handle a new connection. + */ +template +static void RPCListen(boost::shared_ptr< basic_socket_acceptor > acceptor, + ssl::context& context, + const bool fUseSSL) +{ + // Accept connection + boost::shared_ptr< AcceptedConnectionImpl > conn(new AcceptedConnectionImpl(acceptor->get_io_service(), context, fUseSSL)); + + acceptor->async_accept( + conn->sslStream.lowest_layer(), + conn->peer, + boost::bind(&RPCAcceptHandler, + acceptor, + boost::ref(context), + fUseSSL, + conn, + _1)); +} + + +/** + * Accept and handle incoming connection. + */ +template +static void RPCAcceptHandler(boost::shared_ptr< basic_socket_acceptor > acceptor, + ssl::context& context, + const bool fUseSSL, + 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.get()); + + if (error) + { + // 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. + else if (tcp_conn && !ClientAllowed(tcp_conn->peer.address())) + { + // Only send a 403 if we're not using SSL to prevent a DoS during the SSL handshake. + if (!fUseSSL) + conn->stream() << HTTPReply(HTTP_FORBIDDEN, "", false) << std::flush; + conn->close(); + } + else { + ServiceConnection(conn.get()); + conn->close(); + } +} + +void StartRPCThreads() +{ + strRPCUserColonPass = mapArgs["-rpcuser"] + ":" + mapArgs["-rpcpassword"]; + if (((mapArgs["-rpcpassword"] == "") || + (mapArgs["-rpcuser"] == mapArgs["-rpcpassword"])) && Params().RequireRPCPassword()) + { + unsigned char rand_pwd[32]; + RAND_bytes(rand_pwd, 32); + string strWhatAmI = "To use pfennigd"; + if (mapArgs.count("-server")) + strWhatAmI = strprintf(_("To use the %s option"), "\"-server\""); + else if (mapArgs.count("-daemon")) + strWhatAmI = strprintf(_("To use the %s option"), "\"-daemon\""); + uiInterface.ThreadSafeMessageBox(strprintf( + _("%s, you must set a rpcpassword in the configuration file:\n" + "%s\n" + "It is recommended you use the following random password:\n" + "rpcuser=pfennigrpc\n" + "rpcpassword=%s\n" + "(you do not need to remember this password)\n" + "The username and password MUST NOT be the same.\n" + "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 \"Pfennig Alert\" admin@foo.com\n"), + strWhatAmI, + GetConfigFile().string(), + EncodeBase58(&rand_pwd[0],&rand_pwd[0]+32)), + "", CClientUIInterface::MSG_ERROR); + StartShutdown(); + return; + } + + assert(rpc_io_service == NULL); + rpc_io_service = new asio::io_service(); + rpc_ssl_context = new ssl::context(*rpc_io_service, ssl::context::sslv23); + + const bool fUseSSL = GetBoolArg("-rpcssl", false); + + if (fUseSSL) + { + rpc_ssl_context->set_options(ssl::context::no_sslv2 | ssl::context::no_sslv3); + + 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 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 LogPrintf("ThreadRPCServer ERROR: missing server private key file %s\n", pathPKFile.string()); + + 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()); + } + + // Try a dual IPv6/IPv4 socket, falling back to separate IPv4 and IPv6 sockets + const bool loopback = !mapArgs.count("-rpcallowip"); + 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; + + 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)); + + // Try making the socket dual IPv6/IPv4 (if listening on the "any" address) + acceptor->set_option(boost::asio::ip::v6_only(loopback), v6_only_error); + + acceptor->bind(endpoint); + acceptor->listen(socket_base::max_connections); + + 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) + { + bindAddress = loopback ? asio::ip::address_v4::loopback() : asio::ip::address_v4::any(); + endpoint.address(bindAddress); + + 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); + acceptor->listen(socket_base::max_connections); + + 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 IPv4: %s"), endpoint.port(), e.what()); + } + + if (!fListening) { + uiInterface.ThreadSafeMessageBox(strerr, "", CClientUIInterface::MSG_ERROR); + StartShutdown(); + return; + } + + rpc_worker_group = new boost::thread_group(); + for (int i = 0; i < GetArg("-rpcthreads", 4); i++) + 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(); + 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; +} + +void RPCRunHandler(const boost::system::error_code& err, boost::function func) +{ + if (!err) + func(); +} + +void RPCRunLater(const std::string& name, boost::function func, int64_t nSeconds) +{ + assert(rpc_io_service != NULL); + + if (deadlineTimers.count(name) == 0) + { + deadlineTimers.insert(make_pair(name, + boost::shared_ptr(new deadline_timer(*rpc_io_service)))); + } + deadlineTimers[name]->expires_from_now(posix_time::seconds(nSeconds)); + deadlineTimers[name]->async_wait(boost::bind(RPCRunHandler, _1, func)); +} + +class JSONRequest +{ +public: + Value id; + string strMethod; + Array params; + + JSONRequest() { id = Value::null; } + void parse(const Value& valRequest); +}; + +void JSONRequest::parse(const Value& valRequest) +{ + // Parse request + if (valRequest.type() != obj_type) + throw JSONRPCError(RPC_INVALID_REQUEST, "Invalid Request object"); + const Object& request = valRequest.get_obj(); + + // Parse id now so errors from here on will have the id + id = find_value(request, "id"); + + // Parse method + Value valMethod = find_value(request, "method"); + if (valMethod.type() == null_type) + throw JSONRPCError(RPC_INVALID_REQUEST, "Missing method"); + if (valMethod.type() != str_type) + throw JSONRPCError(RPC_INVALID_REQUEST, "Method must be a string"); + strMethod = valMethod.get_str(); + if (strMethod != "getwork" && strMethod != "getblocktemplate") + LogPrint("rpc", "ThreadRPCServer method=%s\n", strMethod); + + // Parse params + Value valParams = find_value(request, "params"); + if (valParams.type() == array_type) + params = valParams.get_array(); + else if (valParams.type() == null_type) + params = Array(); + else + throw JSONRPCError(RPC_INVALID_REQUEST, "Params must be an array"); +} + + +static Object JSONRPCExecOne(const Value& req) +{ + Object rpc_result; + + JSONRequest jreq; + try { + jreq.parse(req); + + Value result = tableRPC.execute(jreq.strMethod, jreq.params); + rpc_result = JSONRPCReplyObj(result, Value::null, jreq.id); + } + catch (Object& objError) + { + rpc_result = JSONRPCReplyObj(Value::null, objError, jreq.id); + } + catch (std::exception& e) + { + rpc_result = JSONRPCReplyObj(Value::null, + JSONRPCError(RPC_PARSE_ERROR, e.what()), jreq.id); + } + + return rpc_result; +} + +static string JSONRPCExecBatch(const Array& vReq) +{ + Array ret; + for (unsigned int reqIdx = 0; reqIdx < vReq.size(); reqIdx++) + ret.push_back(JSONRPCExecOne(vReq[reqIdx])); + + return write_string(Value(ret), false) + "\n"; +} + +void ServiceConnection(AcceptedConnection *conn) +{ + bool fRun = true; + while (fRun && !ShutdownRequested()) + { + int nProto = 0; + map mapHeaders; + string strRequest, strMethod, strURI; + + // Read HTTP request line + if (!ReadHTTPRequestLine(conn->stream(), nProto, strMethod, strURI)) + break; + + // Read HTTP message headers and body + ReadHTTPMessage(conn->stream(), mapHeaders, strRequest, nProto); + + if (strURI != "/") { + conn->stream() << HTTPReply(HTTP_NOT_FOUND, "", false) << std::flush; + break; + } + + // Check authorization + if (mapHeaders.count("authorization") == 0) + { + conn->stream() << HTTPReply(HTTP_UNAUTHORIZED, "", false) << std::flush; + break; + } + if (!HTTPAuthorized(mapHeaders)) + { + 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 (mapArgs["-rpcpassword"].size() < 20) + MilliSleep(250); + + conn->stream() << HTTPReply(HTTP_UNAUTHORIZED, "", false) << std::flush; + break; + } + if (mapHeaders["connection"] == "close") + fRun = false; + + JSONRequest jreq; + try + { + // Parse request + Value valRequest; + if (!read_string(strRequest, valRequest)) + throw JSONRPCError(RPC_PARSE_ERROR, "Parse error"); + + string strReply; + + // singleton request + if (valRequest.type() == obj_type) { + jreq.parse(valRequest); + + Value result = tableRPC.execute(jreq.strMethod, jreq.params); + + // Send reply + strReply = JSONRPCReply(result, Value::null, jreq.id); + + // array of requests + } else if (valRequest.type() == array_type) + strReply = JSONRPCExecBatch(valRequest.get_array()); + else + throw JSONRPCError(RPC_PARSE_ERROR, "Top-level object parse error"); + + conn->stream() << HTTPReply(HTTP_OK, strReply, fRun) << std::flush; + } + catch (Object& objError) + { + ErrorReply(conn->stream(), objError, jreq.id); + break; + } + catch (std::exception& e) + { + ErrorReply(conn->stream(), JSONRPCError(RPC_PARSE_ERROR, e.what()), jreq.id); + break; + } + } +} + +json_spirit::Value CRPCTable::execute(const std::string &strMethod, const json_spirit::Array ¶ms) const +{ + // Find method + 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"); + if (strWarning != "" && !GetBoolArg("-disablesafemode", false) && + !pcmd->okSafeMode) + throw JSONRPCError(RPC_FORBIDDEN_BY_SAFE_MODE, string("Safe mode: ") + strWarning); + + try + { + // Execute + Value result; + { + if (pcmd->threadSafe) + result = pcmd->actor(params, false); +#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; + } + catch (std::exception& e) + { + throw JSONRPCError(RPC_MISC_ERROR, e.what()); + } +} + +std::string HelpExampleCli(string methodname, string args){ + return "> pfennig-cli " + methodname + " " + args + "\n"; +} + +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:40001/\n"; +} + +const CRPCTable tableRPC; diff --git a/src/rpcserver.h b/src/rpcserver.h index 727255b..01b0ef6 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -64,7 +64,7 @@ class CRPCCommand }; /** - * Bitmark RPC command dispatcher. + * Pfennig RPC command dispatcher. */ class CRPCTable { diff --git a/src/rpcserver.h~ b/src/rpcserver.h~ new file mode 100644 index 0000000..efbc28d --- /dev/null +++ b/src/rpcserver.h~ @@ -0,0 +1,193 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef _BITMARKRPC_SERVER_H_ +#define _BITMARKRPC_SERVER_H_ 1 + +#include "uint256.h" +#include "rpcprotocol.h" + +#include +#include +#include +#include + +#include "json/json_spirit_reader_template.h" +#include "json/json_spirit_utils.h" +#include "json/json_spirit_writer_template.h" + +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(); + +/* + Type-check arguments; throws JSONRPCError if wrong type given. Does not check that + the right number of arguments are passed, just that any passed are the correct type. + Use like: RPCTypeCheck(params, boost::assign::list_of(str_type)(int_type)(obj_type)); +*/ +void RPCTypeCheck(const json_spirit::Array& params, + const std::list& typesExpected, bool fAllowNull=false); +/* + Check for expected keys/value types in an Object. + Use like: RPCTypeCheck(object, boost::assign::map_list_of("name", str_type)("value", int_type)); +*/ +void RPCTypeCheck(const json_spirit::Object& o, + const std::map& typesExpected, bool fAllowNull=false); + +/* + Run func nSeconds from now. Uses boost deadline timers. + Overrides previous timer (if any). + */ +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); + +class CRPCCommand +{ +public: + std::string name; + rpcfn_type actor; + bool okSafeMode; + bool threadSafe; + bool reqWallet; +}; + +/** + * Pfennig RPC command dispatcher. + */ +class CRPCTable +{ +private: + std::map mapCommands; +public: + CRPCTable(); + const CRPCCommand* operator[](std::string name) const; + std::string help(std::string name) const; + + /** + * Execute a method. + * @param method Method to execute + * @param params Array of arguments (JSON objects) + * @returns Result of the call. + * @throws an exception (json_spirit::Value) when an error happens. + */ + json_spirit::Value execute(const std::string &method, const json_spirit::Array ¶ms) const; +}; + +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_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 = NULL); +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); +extern json_spirit::Value dumpwallet(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value importwallet(const json_spirit::Array& params, bool fHelp); + +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); +extern json_spirit::Value getblocktemplate(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value submitblock(const json_spirit::Array& params, bool fHelp); + +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); +extern json_spirit::Value sendtoaddress(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value signmessage(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value verifymessage(const json_spirit::Array& params, bool fHelp); +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); +extern json_spirit::Value addmultisigaddress(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value createmultisig(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value listreceivedbyaddress(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value listreceivedbyaccount(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value listtransactions(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value listaddressgroupings(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value listaccounts(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value listsinceblock(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value gettransaction(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value backupwallet(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value keypoolrefill(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value walletpassphrase(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value walletpassphrasechange(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value walletlock(const json_spirit::Array& params, bool fHelp); +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 sendalert(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); +extern json_spirit::Value lockunspent(const json_spirit::Array& params, bool fHelp); +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); + +extern json_spirit::Value getblockcount(const json_spirit::Array& params, bool fHelp); // in rpcblockchain.cpp +extern json_spirit::Value getbestblockhash(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value getdifficulty(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value settxfee(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value getrawmempool(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value getblockhash(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value getblock(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value gettxoutsetinfo(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value gettxout(const json_spirit::Array& params, bool fHelp); +extern json_spirit::Value verifychain(const json_spirit::Array& params, bool fHelp); + +#endif diff --git a/src/rpcwallet.cpp b/src/rpcwallet.cpp index 3a95ab5..612a849 100644 --- a/src/rpcwallet.cpp +++ b/src/rpcwallet.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -83,7 +83,7 @@ Value getnewaddress(const Array& params, bool fHelp) "\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" - "\"bitmarkaddress\" (string) The new bitmark address\n" + "\"pfennigaddress\" (string) The new pfennig address\n" "\nExamples:\n" + HelpExampleCli("getnewaddress", "") + HelpExampleCli("getnewaddress", "\"\"") @@ -158,7 +158,7 @@ Value getaccountaddress(const Array& params, bool fHelp) "\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" - "\"bitmarkaddress\" (string) The account bitmark address\n" + "\"pfennigaddress\" (string) The account pfennig address\n" "\nExamples:\n" + HelpExampleCli("getaccountaddress", "") + HelpExampleCli("getaccountaddress", "\"\"") @@ -211,10 +211,10 @@ Value setaccount(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "setaccount \"bitmarkaddress\" \"account\"\n" + "setaccount \"pfennigaddress\" \"account\"\n" "\nSets the account associated with the given address.\n" "\nArguments:\n" - "1. \"bitmarkaddress\" (string, required) The bitmark address to be associated with an account.\n" + "1. \"pfennigaddress\" (string, required) The pfennig 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\"") @@ -248,10 +248,10 @@ Value getaccount(const Array& params, bool fHelp) { if (fHelp || params.size() != 1) throw runtime_error( - "getaccount \"bitmarkaddress\"\n" + "getaccount \"pfennigaddress\"\n" "\nReturns the account associated with the given address.\n" "\nArguments:\n" - "1. \"bitmarkaddress\" (string, required) The bitmark address for account lookup.\n" + "1. \"pfennigaddress\" (string, required) The pfennig address for account lookup.\n" "\nResult:\n" "\"accountname\" (string) the account address\n" "\nExamples:\n" @@ -281,7 +281,7 @@ Value getaddressesbyaccount(const Array& params, bool fHelp) "1. \"account\" (string, required) The account name.\n" "\nResult:\n" "[ (json array of string)\n" - " \"bitmarkaddress\" (string) a bitmark address associated with the given account\n" + " \"pfennigaddress\" (string) a pfennig address associated with the given account\n" " ,...\n" "]\n" "\nExamples:\n" @@ -307,11 +307,11 @@ Value sendtoaddress(const Array& params, bool fHelp) { if (fHelp || params.size() < 2 || params.size() > 4) throw runtime_error( - "sendtoaddress \"bitmarkaddress\" amount ( \"comment\" \"comment-to\" )\n" + "sendtoaddress \"pfennigaddress\" 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. \"bitmarkaddress\" (string, required) The bitmark address to send to.\n" + "1. \"pfennigaddress\" (string, required) The pfennig address to send to.\n" "2. \"amount\" (numeric, required) The amount in btm 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" @@ -361,7 +361,7 @@ Value listaddressgroupings(const Array& params, bool fHelp) "[\n" " [\n" " [\n" - " \"bitmarkaddress\", (string) The bitmark address\n" + " \"pfennigaddress\", (string) The pfennig address\n" " amount, (numeric) The amount in btm\n" " \"account\" (string, optional) The account\n" " ]\n" @@ -400,11 +400,11 @@ Value signmessage(const Array& params, bool fHelp) { if (fHelp || params.size() != 2) throw runtime_error( - "signmessage \"bitmarkaddress\" \"message\"\n" + "signmessage \"pfennigaddress\" \"message\"\n" "\nSign a message with the private key of an address" + HelpRequiringPassphrase() + "\n" "\nArguments:\n" - "1. \"bitmarkaddress\" (string, required) The bitmark address to use for the private key.\n" + "1. \"pfennigaddress\" (string, required) The pfennig 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" @@ -451,10 +451,10 @@ Value getreceivedbyaddress(const Array& params, bool fHelp) { if (fHelp || params.size() < 1 || params.size() > 2) throw runtime_error( - "getreceivedbyaddress \"bitmarkaddress\" ( minconf )\n" - "\nReturns the total amount received by the given bitmarkaddress in transactions with at least minconf confirmations.\n" + "getreceivedbyaddress \"pfennigaddress\" ( minconf )\n" + "\nReturns the total amount received by the given pfennigaddress in transactions with at least minconf confirmations.\n" "\nArguments:\n" - "1. \"bitmarkaddress\" (string, required) The bitmark address for transactions.\n" + "1. \"pfennigaddress\" (string, required) The pfennig 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 btm received at this address.\n" @@ -469,7 +469,7 @@ Value getreceivedbyaddress(const Array& params, bool fHelp) + HelpExampleRpc("getreceivedbyaddress", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\", 6") ); - // Bitmark address + // Pfennig address CBitmarkAddress address = CBitmarkAddress(params[0].get_str()); CScript scriptPubKey; if (!address.IsValid()) @@ -733,13 +733,13 @@ Value sendfrom(const Array& params, bool fHelp) { if (fHelp || params.size() < 3 || params.size() > 6) throw runtime_error( - "sendfrom \"fromaccount\" \"tobitmarkaddress\" amount ( minconf \"comment\" \"comment-to\" )\n" - "\nSent an amount from an account to a bitmark address.\n" + "sendfrom \"fromaccount\" \"topfennigaddress\" amount ( minconf \"comment\" \"comment-to\" )\n" + "\nSent an amount from an account to a pfennig 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. \"tobitmarkaddress\" (string, required) The bitmark address to send funds to.\n" + "2. \"topfennigaddress\" (string, required) The pfennig address to send funds to.\n" "3. amount (numeric, required) The amount in btm. (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" @@ -801,7 +801,7 @@ Value sendmany(const Array& params, bool fHelp) "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 bitmark address is the key, the numeric amount in btm is the value\n" + " \"address\":amount (numeric) The pfennig address is the key, the numeric amount in btm is the value\n" " ,...\n" " }\n" "3. minconf (numeric, optional, default=1) Only use the balance confirmed at least this many times.\n" @@ -880,20 +880,20 @@ Value addmultisigaddress(const Array& params, bool fHelp) { string msg = "addmultisigaddress nrequired [\"key\",...] ( \"account\" )\n" "\nAdd a nrequired-to-sign multisignature address to the wallet.\n" - "Each key is a Bitmark address or hex-encoded public key.\n" + "Each key is a Pfennig 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 bitmark addresses or hex-encoded public keys\n" + "2. \"keysobject\" (string, required) A json array of pfennig addresses or hex-encoded public keys\n" " [\n" - " \"address\" (string) bitmark address or hex-encoded public key\n" + " \"address\" (string) pfennig address or hex-encoded public key\n" " ...,\n" " ]\n" "3. \"account\" (string, optional) An account to assign the addresses to.\n" "\nResult:\n" - "\"bitmarkaddress\" (string) A bitmark address associated with the keys.\n" + "\"pfennigaddress\" (string) A pfennig address associated with the keys.\n" "\nExamples:\n" "\nAdd a multisig address from 2 addresses\n" @@ -1193,7 +1193,7 @@ Value listtransactions(const Array& params, bool fHelp) " {\n" " \"account\":\"accountname\", (string) The account name associated with the transaction. \n" " It will be \"\" for the default account.\n" - " \"address\":\"bitmarkaddress\", (string) The bitmark address of the transaction. Not present for \n" + " \"address\":\"pfennigaddress\", (string) The pfennig 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" @@ -1366,7 +1366,7 @@ Value listsinceblock(const Array& params, bool fHelp) "{\n" " \"transactions\": [\n" " \"account\":\"accountname\", (string) The account name associated with the transaction. Will be \"\" for the default account.\n" - " \"address\":\"bitmarkaddress\", (string) The bitmark address of the transaction. Not present for move transactions (category = move).\n" + " \"address\":\"pfennigaddress\", (string) The pfennig 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 btm. 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" @@ -1453,7 +1453,7 @@ Value gettransaction(const Array& params, bool fHelp) " \"details\" : [\n" " {\n" " \"account\" : \"accountname\", (string) The account name involved in the transaction, can be \"\" for the default account.\n" - " \"address\" : \"bitmarkaddress\", (string) The bitmark address involved in the transaction\n" + " \"address\" : \"pfennigaddress\", (string) The pfennig address involved in the transaction\n" " \"category\" : \"send|receive\", (string) The category, either 'send' or 'receive'\n" " \"amount\" : x.xxx (numeric) The amount in btm\n" " }\n" @@ -1565,7 +1565,7 @@ Value walletpassphrase(const Array& params, bool fHelp) throw runtime_error( "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 bitmarks\n" + "This is needed prior to performing transactions related to private keys such as sending pfennigs\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" @@ -1705,10 +1705,10 @@ Value encryptwallet(const Array& params, bool fHelp) "\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 bitmark\n" + "\nNow set the passphrase to use the wallet, such as for signing or sending pfennig\n" + HelpExampleCli("walletpassphrase", "\"my pass phrase\"") + "\nNow we can so something like sign\n" - + HelpExampleCli("signmessage", "\"bitmarkaddress\" \"test message\"") + + + HelpExampleCli("signmessage", "\"pfennigaddress\" \"test message\"") + "\nNow lock the wallet again by removing the passphrase\n" + HelpExampleCli("walletlock", "") + "\nAs a json rpc call\n" @@ -1748,7 +1748,7 @@ Value lockunspent(const Array& params, bool fHelp) "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 bitmarks.\n" + "A locked transaction output will not be chosen by automatic coin selection, when spending pfennigs.\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" @@ -1897,7 +1897,7 @@ Value getwalletinfo(const Array& params, bool fHelp) "\nResult:\n" "{\n" " \"walletversion\": xxxxx, (numeric) the wallet version\n" - " \"balance\": xxxxxxx, (numeric) the total bitmark balance of the wallet\n" + " \"balance\": xxxxxxx, (numeric) the total pfennig 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" diff --git a/src/rpcwallet.cpp~ b/src/rpcwallet.cpp~ new file mode 100644 index 0000000..54bd7ed --- /dev/null +++ b/src/rpcwallet.cpp~ @@ -0,0 +1,1920 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "rpcserver.h" +#include "init.h" +#include "net.h" +#include "netbase.h" +#include "util.h" +#include "wallet.h" +#include "walletdb.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_t nWalletUnlockTime; +static CCriticalSection cs_nWalletUnlockTime; + +std::string HelpRequiringPassphrase() +{ + return pwalletMain && pwalletMain->IsCrypted() + ? "\nRequires wallet passphrase to be set with walletpassphrase call." + : ""; +} + +void EnsureWalletIsUnlocked() +{ + if (pwalletMain->IsLocked()) + throw JSONRPCError(RPC_WALLET_UNLOCK_NEEDED, "Error: Please enter the wallet passphrase with walletpassphrase first."); +} + +void WalletTxToJSON(const CWalletTx& wtx, Object& entry) +{ + int confirms = wtx.GetDepthInMainChain(); + entry.push_back(Pair("confirmations", confirms)); + if (wtx.IsCoinBase()) + entry.push_back(Pair("generated", true)); + if (confirms > 0) + { + entry.push_back(Pair("blockhash", wtx.hashBlock.GetHex())); + entry.push_back(Pair("blockindex", wtx.nIndex)); + entry.push_back(Pair("blocktime", (int64_t)(mapBlockIndex[wtx.hashBlock]->nTime))); + } + 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)); +} + +string AccountFromValue(const Value& value) +{ + string strAccount = value.get_str(); + if (strAccount == "*") + throw JSONRPCError(RPC_WALLET_INVALID_ACCOUNT_NAME, "Invalid account name"); + return strAccount; +} + +Value getnewaddress(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 1) + throw runtime_error( + "getnewaddress ( \"account\" )\n" + "\nReturns a new Pfennig 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" + "\"pfennigaddress\" (string) The new pfennig 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; + if (params.size() > 0) + strAccount = AccountFromValue(params[0]); + + if (!pwalletMain->IsLocked()) + pwalletMain->TopUpKeyPool(); + + // Generate a new key that is added to wallet + CPubKey newKey; + if (!pwalletMain->GetKeyFromPool(newKey)) + throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, "Error: Keypool ran out, please call keypoolrefill first"); + CKeyID keyID = newKey.GetID(); + + pwalletMain->SetAddressBook(keyID, strAccount, "receive"); + + return CBitmarkAddress(keyID).ToString(); +} + + +CBitmarkAddress GetAccountAddress(string strAccount, bool bForceNew=false) +{ + CWalletDB walletdb(pwalletMain->strWalletFile); + + CAccount account; + walletdb.ReadAccount(strAccount, account); + + bool bKeyUsed = false; + + // Check if the current key has been used + if (account.vchPubKey.IsValid()) + { + CScript scriptPubKey; + scriptPubKey.SetDestination(account.vchPubKey.GetID()); + for (map::iterator it = pwalletMain->mapWallet.begin(); + it != pwalletMain->mapWallet.end() && account.vchPubKey.IsValid(); + ++it) + { + const CWalletTx& wtx = (*it).second; + BOOST_FOREACH(const CTxOut& txout, wtx.vout) + if (txout.scriptPubKey == scriptPubKey) + bKeyUsed = true; + } + } + + // Generate a new key + if (!account.vchPubKey.IsValid() || bForceNew || bKeyUsed) + { + if (!pwalletMain->GetKeyFromPool(account.vchPubKey)) + throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, "Error: Keypool ran out, please call keypoolrefill first"); + + pwalletMain->SetAddressBook(account.vchPubKey.GetID(), strAccount, "receive"); + walletdb.WriteAccount(strAccount, account); + } + + return CBitmarkAddress(account.vchPubKey.GetID()); +} + +Value getaccountaddress(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "getaccountaddress \"account\"\n" + "\nReturns the current Pfennig 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" + "\"pfennigaddress\" (string) The account pfennig 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]); + + Value ret; + + ret = GetAccountAddress(strAccount).ToString(); + + return ret; +} + + +Value getrawchangeaddress(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 1) + throw runtime_error( + "getrawchangeaddress\n" + "\nReturns a new Pfennig 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 CBitmarkAddress(keyID).ToString(); +} + + +Value setaccount(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 1 || params.size() > 2) + throw runtime_error( + "setaccount \"pfennigaddress\" \"account\"\n" + "\nSets the account associated with the given address.\n" + "\nArguments:\n" + "1. \"pfennigaddress\" (string, required) The pfennig 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\"") + ); + + CBitmarkAddress address(params[0].get_str()); + if (!address.IsValid()) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Pfennig address"); + + + string strAccount; + if (params.size() > 1) + strAccount = AccountFromValue(params[1]); + + // 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()].name; + if (address == GetAccountAddress(strOldAccount)) + GetAccountAddress(strOldAccount, true); + } + + pwalletMain->SetAddressBook(address.Get(), strAccount, "receive"); + + return Value::null; +} + + +Value getaccount(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "getaccount \"pfennigaddress\"\n" + "\nReturns the account associated with the given address.\n" + "\nArguments:\n" + "1. \"pfennigaddress\" (string, required) The pfennig address for account lookup.\n" + "\nResult:\n" + "\"accountname\" (string) the account address\n" + "\nExamples:\n" + + HelpExampleCli("getaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\"") + + HelpExampleRpc("getaccount", "\"1D1ZrZNe3JUo7ZycKEYQQiQAWd9y54F4XZ\"") + ); + + CBitmarkAddress address(params[0].get_str()); + if (!address.IsValid()) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Pfennig address"); + + string strAccount; + map::iterator mi = pwalletMain->mapAddressBook.find(address.Get()); + if (mi != pwalletMain->mapAddressBook.end() && !(*mi).second.name.empty()) + strAccount = (*mi).second.name; + return strAccount; +} + + +Value getaddressesbyaccount(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "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" + " \"pfennigaddress\" (string) a pfennig 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(CBitmarkAddress, CAddressBookData)& item, pwalletMain->mapAddressBook) + { + const CBitmarkAddress& address = item.first; + const string& strName = item.second.name; + if (strName == strAccount) + ret.push_back(address.ToString()); + } + return ret; +} + +Value sendtoaddress(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 2 || params.size() > 4) + throw runtime_error( + "sendtoaddress \"pfennigaddress\" 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. \"pfennigaddress\" (string, required) The pfennig address to send to.\n" + "2. \"amount\" (numeric, required) The amount in btm 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\"") + ); + + CBitmarkAddress address(params[0].get_str()); + if (!address.IsValid()) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Pfennig address"); + + // Amount + int64_t nAmount = AmountFromValue(params[1]); + + // Wallet comments + CWalletTx wtx; + if (params.size() > 2 && params[2].type() != null_type && !params[2].get_str().empty()) + wtx.mapValue["comment"] = params[2].get_str(); + if (params.size() > 3 && params[3].type() != null_type && !params[3].get_str().empty()) + wtx.mapValue["to"] = params[3].get_str(); + + EnsureWalletIsUnlocked(); + + string strError = pwalletMain->SendMoneyToDestination(address.Get(), nAmount, wtx); + if (strError != "") + throw JSONRPCError(RPC_WALLET_ERROR, strError); + + return wtx.GetHash().GetHex(); +} + +Value listaddressgroupings(const Array& params, bool fHelp) +{ + if (fHelp) + throw runtime_error( + "listaddressgroupings\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\n" + "\nResult:\n" + "[\n" + " [\n" + " [\n" + " \"pfennigaddress\", (string) The pfennig address\n" + " amount, (numeric) The amount in btm\n" + " \"account\" (string, optional) The account\n" + " ]\n" + " ,...\n" + " ]\n" + " ,...\n" + "]\n" + "\nExamples:\n" + + HelpExampleCli("listaddressgroupings", "") + + HelpExampleRpc("listaddressgroupings", "") + ); + + Array jsonGroupings; + map balances = pwalletMain->GetAddressBalances(); + BOOST_FOREACH(set grouping, pwalletMain->GetAddressGroupings()) + { + Array jsonGrouping; + BOOST_FOREACH(CTxDestination address, grouping) + { + Array addressInfo; + addressInfo.push_back(CBitmarkAddress(address).ToString()); + addressInfo.push_back(ValueFromAmount(balances[address])); + { + LOCK(pwalletMain->cs_wallet); + if (pwalletMain->mapAddressBook.find(CBitmarkAddress(address).Get()) != pwalletMain->mapAddressBook.end()) + addressInfo.push_back(pwalletMain->mapAddressBook.find(CBitmarkAddress(address).Get())->second.name); + } + jsonGrouping.push_back(addressInfo); + } + jsonGroupings.push_back(jsonGrouping); + } + return jsonGroupings; +} + +Value signmessage(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 2) + throw runtime_error( + "signmessage \"pfennigaddress\" \"message\"\n" + "\nSign a message with the private key of an address" + + HelpRequiringPassphrase() + "\n" + "\nArguments:\n" + "1. \"pfennigaddress\" (string, required) The pfennig 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(); + + string strAddress = params[0].get_str(); + string strMessage = params[1].get_str(); + + CBitmarkAddress 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"); + + CKey key; + if (!pwalletMain->GetKey(keyID, key)) + throw JSONRPCError(RPC_WALLET_ERROR, "Private key not available"); + + CHashWriter ss(SER_GETHASH, 0); + ss << strMessageMagic; + ss << strMessage; + + vector vchSig; + if (!key.SignCompact(ss.GetHash(), vchSig)) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Sign failed"); + + return EncodeBase64(&vchSig[0], vchSig.size()); +} + +Value getreceivedbyaddress(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 1 || params.size() > 2) + throw runtime_error( + "getreceivedbyaddress \"pfennigaddress\" ( minconf )\n" + "\nReturns the total amount received by the given pfennigaddress in transactions with at least minconf confirmations.\n" + "\nArguments:\n" + "1. \"pfennigaddress\" (string, required) The pfennig 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 btm 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") + ); + + // Pfennig address + CBitmarkAddress address = CBitmarkAddress(params[0].get_str()); + CScript scriptPubKey; + if (!address.IsValid()) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Pfennig address"); + scriptPubKey.SetDestination(address.Get()); + if (!IsMine(*pwalletMain,scriptPubKey)) + return (double)0.0; + + // Minimum confirmations + int nMinDepth = 1; + if (params.size() > 1) + nMinDepth = params[1].get_int(); + + // Tally + int64_t nAmount = 0; + for (map::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) + { + const CWalletTx& wtx = (*it).second; + if (wtx.IsCoinBase() || !IsFinalTx(wtx)) + continue; + + BOOST_FOREACH(const CTxOut& txout, wtx.vout) + if (txout.scriptPubKey == scriptPubKey) + if (wtx.GetDepthInMainChain() >= nMinDepth) + nAmount += txout.nValue; + } + + return ValueFromAmount(nAmount); +} + + +Value getreceivedbyaccount(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 1 || params.size() > 2) + throw runtime_error( + "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 btm 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; + if (params.size() > 1) + nMinDepth = params[1].get_int(); + + // Get the set of pub keys assigned to account + string strAccount = AccountFromValue(params[0]); + set setAddress = pwalletMain->GetAccountAddresses(strAccount); + + // Tally + int64_t nAmount = 0; + for (map::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) + { + const CWalletTx& wtx = (*it).second; + if (wtx.IsCoinBase() || !IsFinalTx(wtx)) + continue; + + BOOST_FOREACH(const CTxOut& txout, wtx.vout) + { + CTxDestination address; + if (ExtractDestination(txout.scriptPubKey, address) && IsMine(*pwalletMain, address) && setAddress.count(address)) + if (wtx.GetDepthInMainChain() >= nMinDepth) + nAmount += txout.nValue; + } + } + + return (double)nAmount / (double)COIN; +} + + +int64_t GetAccountBalance(CWalletDB& walletdb, const string& strAccount, int nMinDepth) +{ + 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) || wtx.GetBlocksToMaturity() > 0 || wtx.GetDepthInMainChain() < 0) + continue; + + int64_t nReceived, nSent, nFee; + wtx.GetAccountAmounts(strAccount, nReceived, nSent, nFee); + + if (nReceived != 0 && wtx.GetDepthInMainChain() >= nMinDepth) + nBalance += nReceived; + nBalance -= nSent + nFee; + } + + // Tally internal accounting entries + nBalance += walletdb.GetAccountCreditDebit(strAccount); + + return nBalance; +} + +int64_t GetAccountBalance(const string& strAccount, int nMinDepth) +{ + CWalletDB walletdb(pwalletMain->strWalletFile); + return GetAccountBalance(walletdb, strAccount, nMinDepth); +} + + +Value getbalance(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 2) + throw runtime_error( + "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 btm 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()); + + int nMinDepth = 1; + if (params.size() > 1) + nMinDepth = params[1].get_int(); + + if (params[0].get_str() == "*") { + // Calculate total balance a different way from GetBalance() + // (GetBalance() sums up all unspent TxOuts) + // getbalance and getbalance '*' 0 should return the same number + int64_t nBalance = 0; + for (map::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) + { + const CWalletTx& wtx = (*it).second; + if (!wtx.IsTrusted() || wtx.GetBlocksToMaturity() > 0) + continue; + + int64_t allFee; + string strSentAccount; + list > listReceived; + list > listSent; + wtx.GetAmounts(listReceived, listSent, allFee, strSentAccount); + if (wtx.GetDepthInMainChain() >= nMinDepth) + { + BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64_t)& r, listReceived) + nBalance += r.second; + } + BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64_t)& r, listSent) + nBalance -= r.second; + nBalance -= allFee; + } + return ValueFromAmount(nBalance); + } + + string strAccount = AccountFromValue(params[0]); + + 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 \"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 btm from the default account to the account named tabby\n" + + HelpExampleCli("move", "\"\" \"tabby\" 0.01") + + "\nMove 0.01 btm 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_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(); + string strComment; + if (params.size() > 4) + strComment = params[4].get_str(); + + CWalletDB walletdb(pwalletMain->strWalletFile); + if (!walletdb.TxnBegin()) + throw JSONRPCError(RPC_DATABASE_ERROR, "database error"); + + int64_t nNow = GetAdjustedTime(); + + // Debit + CAccountingEntry debit; + debit.nOrderPos = pwalletMain->IncOrderPosNext(&walletdb); + debit.strAccount = strFrom; + debit.nCreditDebit = -nAmount; + debit.nTime = nNow; + debit.strOtherAccount = strTo; + debit.strComment = strComment; + walletdb.WriteAccountingEntry(debit); + + // Credit + CAccountingEntry credit; + credit.nOrderPos = pwalletMain->IncOrderPosNext(&walletdb); + credit.strAccount = strTo; + credit.nCreditDebit = nAmount; + credit.nTime = nNow; + credit.strOtherAccount = strFrom; + credit.strComment = strComment; + walletdb.WriteAccountingEntry(credit); + + if (!walletdb.TxnCommit()) + throw JSONRPCError(RPC_DATABASE_ERROR, "database error"); + + return true; +} + + +Value sendfrom(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 3 || params.size() > 6) + throw runtime_error( + "sendfrom \"fromaccount\" \"topfennigaddress\" amount ( minconf \"comment\" \"comment-to\" )\n" + "\nSent an amount from an account to a pfennig 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. \"topfennigaddress\" (string, required) The pfennig address to send funds to.\n" + "3. amount (numeric, required) The amount in btm. (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 btm 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]); + CBitmarkAddress address(params[1].get_str()); + if (!address.IsValid()) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Pfennig address"); + int64_t nAmount = AmountFromValue(params[2]); + int nMinDepth = 1; + if (params.size() > 3) + nMinDepth = params[3].get_int(); + + CWalletTx wtx; + wtx.strFromAccount = strAccount; + if (params.size() > 4 && params[4].type() != null_type && !params[4].get_str().empty()) + wtx.mapValue["comment"] = params[4].get_str(); + if (params.size() > 5 && params[5].type() != null_type && !params[5].get_str().empty()) + wtx.mapValue["to"] = params[5].get_str(); + + EnsureWalletIsUnlocked(); + + // Check funds + int64_t nBalance = GetAccountBalance(strAccount, nMinDepth); + if (nAmount > nBalance) + throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, "Account has insufficient funds"); + + // Send + string strError = pwalletMain->SendMoneyToDestination(address.Get(), nAmount, wtx); + if (strError != "") + throw JSONRPCError(RPC_WALLET_ERROR, strError); + + return wtx.GetHash().GetHex(); +} + + +Value sendmany(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 2 || params.size() > 4) + throw runtime_error( + "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 pfennig address is the key, the numeric amount in btm 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(); + int nMinDepth = 1; + if (params.size() > 2) + nMinDepth = params[2].get_int(); + + CWalletTx wtx; + wtx.strFromAccount = strAccount; + if (params.size() > 3 && params[3].type() != null_type && !params[3].get_str().empty()) + wtx.mapValue["comment"] = params[3].get_str(); + + set setAddress; + vector > vecSend; + + int64_t totalAmount = 0; + BOOST_FOREACH(const Pair& s, sendTo) + { + CBitmarkAddress address(s.name_); + if (!address.IsValid()) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, string("Invalid Pfennig address: ")+s.name_); + + if (setAddress.count(address)) + throw JSONRPCError(RPC_INVALID_PARAMETER, string("Invalid parameter, duplicated address: ")+s.name_); + setAddress.insert(address); + + CScript scriptPubKey; + scriptPubKey.SetDestination(address.Get()); + int64_t nAmount = AmountFromValue(s.value_); + totalAmount += nAmount; + + vecSend.push_back(make_pair(scriptPubKey, nAmount)); + } + + EnsureWalletIsUnlocked(); + + // Check funds + int64_t nBalance = GetAccountBalance(strAccount, nMinDepth); + if (totalAmount > nBalance) + throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, "Account has insufficient funds"); + + // Send + CReserveKey keyChange(pwalletMain); + int64_t nFeeRequired = 0; + string strFailReason; + bool fCreated = pwalletMain->CreateTransaction(vecSend, wtx, keyChange, nFeeRequired, strFailReason); + if (!fCreated) + throw JSONRPCError(RPC_WALLET_INSUFFICIENT_FUNDS, strFailReason); + if (!pwalletMain->CommitTransaction(wtx, keyChange)) + throw JSONRPCError(RPC_WALLET_ERROR, "Transaction commit failed"); + + return wtx.GetHash().GetHex(); +} + +// Defined in rpcmisc.cpp +extern CScript _createmultisig_redeemScript(const Array& params); + +Value addmultisigaddress(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 2 || params.size() > 3) + { + string msg = "addmultisigaddress nrequired [\"key\",...] ( \"account\" )\n" + "\nAdd a nrequired-to-sign multisignature address to the wallet.\n" + "Each key is a Pfennig 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 pfennig addresses or hex-encoded public keys\n" + " [\n" + " \"address\" (string) pfennig address or hex-encoded public key\n" + " ...,\n" + " ]\n" + "3. \"account\" (string, optional) An account to assign the addresses to.\n" + + "\nResult:\n" + "\"pfennigaddress\" (string) A pfennig 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); + } + + string strAccount; + if (params.size() > 2) + strAccount = AccountFromValue(params[2]); + + // Construct using pay-to-script-hash: + CScript inner = _createmultisig_redeemScript(params); + CScriptID innerID = inner.GetID(); + pwalletMain->AddCScript(inner); + + pwalletMain->SetAddressBook(innerID, strAccount, "send"); + return CBitmarkAddress(innerID).ToString(); +} + + +struct tallyitem +{ + int64_t nAmount; + int nConf; + vector txids; + tallyitem() + { + nAmount = 0; + nConf = std::numeric_limits::max(); + } +}; + +Value ListReceived(const Array& params, bool fByAccounts) +{ + // Minimum confirmations + int nMinDepth = 1; + if (params.size() > 0) + nMinDepth = params[0].get_int(); + + // Whether to include empty accounts + bool fIncludeEmpty = false; + if (params.size() > 1) + fIncludeEmpty = params[1].get_bool(); + + // Tally + map mapTally; + for (map::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) + { + const CWalletTx& wtx = (*it).second; + + if (wtx.IsCoinBase() || !IsFinalTx(wtx)) + continue; + + int nDepth = wtx.GetDepthInMainChain(); + if (nDepth < nMinDepth) + continue; + + BOOST_FOREACH(const CTxOut& txout, wtx.vout) + { + CTxDestination address; + if (!ExtractDestination(txout.scriptPubKey, address) || !IsMine(*pwalletMain, address)) + continue; + + tallyitem& item = mapTally[address]; + item.nAmount += txout.nValue; + item.nConf = min(item.nConf, nDepth); + item.txids.push_back(wtx.GetHash()); + } + } + + // Reply + Array ret; + map mapAccountTally; + BOOST_FOREACH(const PAIRTYPE(CBitmarkAddress, CAddressBookData)& item, pwalletMain->mapAddressBook) + { + const CBitmarkAddress& address = item.first; + const string& strAccount = item.second.name; + map::iterator it = mapTally.find(address); + if (it == mapTally.end() && !fIncludeEmpty) + continue; + + int64_t nAmount = 0; + int nConf = std::numeric_limits::max(); + if (it != mapTally.end()) + { + nAmount = (*it).second.nAmount; + nConf = (*it).second.nConf; + } + + if (fByAccounts) + { + tallyitem& item = mapAccountTally[strAccount]; + item.nAmount += nAmount; + item.nConf = min(item.nConf, nConf); + } + else + { + Object obj; + obj.push_back(Pair("address", address.ToString())); + obj.push_back(Pair("account", strAccount)); + obj.push_back(Pair("amount", ValueFromAmount(nAmount))); + obj.push_back(Pair("confirmations", (nConf == std::numeric_limits::max() ? 0 : nConf))); + Array transactions; + if (it != mapTally.end()) + { + BOOST_FOREACH(const uint256& item, (*it).second.txids) + { + transactions.push_back(item.GetHex()); + } + } + obj.push_back(Pair("txids", transactions)); + ret.push_back(obj); + } + } + + if (fByAccounts) + { + for (map::iterator it = mapAccountTally.begin(); it != mapAccountTally.end(); ++it) + { + int64_t nAmount = (*it).second.nAmount; + int nConf = (*it).second.nConf; + Object obj; + obj.push_back(Pair("account", (*it).first)); + obj.push_back(Pair("amount", ValueFromAmount(nAmount))); + obj.push_back(Pair("confirmations", (nConf == std::numeric_limits::max() ? 0 : nConf))); + ret.push_back(obj); + } + } + + return ret; +} + +Value listreceivedbyaddress(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 2) + throw runtime_error( + "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 btm 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); +} + +Value listreceivedbyaccount(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 2) + throw runtime_error( + "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) +{ + CBitmarkAddress 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_t nFee; + string strSentAccount; + list > listReceived; + list > listSent; + + wtx.GetAmounts(listReceived, listSent, nFee, strSentAccount); + + bool fAllAccounts = (strAccount == string("*")); + + // Sent + if ((!listSent.empty() || nFee != 0) && (fAllAccounts || strAccount == strSentAccount)) + { + BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64_t)& s, listSent) + { + Object entry; + entry.push_back(Pair("account", strSentAccount)); + 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))); + if (fLong) + WalletTxToJSON(wtx, entry); + ret.push_back(entry); + } + } + + // Received + if (listReceived.size() > 0 && wtx.GetDepthInMainChain() >= nMinDepth) + { + BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64_t)& r, listReceived) + { + string account; + if (pwalletMain->mapAddressBook.count(r.first)) + account = pwalletMain->mapAddressBook[r.first].name; + if (fAllAccounts || (account == strAccount)) + { + Object entry; + entry.push_back(Pair("account", account)); + MaybePushAddress(entry, r.first); + if (wtx.IsCoinBase()) + { + if (wtx.GetDepthInMainChain() < 1) + entry.push_back(Pair("category", "orphan")); + else if (wtx.GetBlocksToMaturity() > 0) + entry.push_back(Pair("category", "immature")); + else + 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); + ret.push_back(entry); + } + } + } +} + +void AcentryToJSON(const CAccountingEntry& acentry, const string& strAccount, Array& ret) +{ + bool fAllAccounts = (strAccount == string("*")); + + if (fAllAccounts || acentry.strAccount == strAccount) + { + Object entry; + entry.push_back(Pair("account", acentry.strAccount)); + entry.push_back(Pair("category", "move")); + 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)); + ret.push_back(entry); + } +} + +Value listtransactions(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 3) + throw runtime_error( + "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\":\"pfennigaddress\", (string) The pfennig 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 btm. 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 btm. 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) + strAccount = params[0].get_str(); + int nCount = 10; + if (params.size() > 1) + nCount = params[1].get_int(); + int nFrom = 0; + if (params.size() > 2) + nFrom = params[2].get_int(); + + if (nCount < 0) + throw JSONRPCError(RPC_INVALID_PARAMETER, "Negative count"); + if (nFrom < 0) + throw JSONRPCError(RPC_INVALID_PARAMETER, "Negative from"); + + Array ret; + + std::list acentries; + CWallet::TxItems txOrdered = pwalletMain->OrderedTxItems(acentries, strAccount); + + // iterate backwards until we have nCount items to return: + for (CWallet::TxItems::reverse_iterator it = txOrdered.rbegin(); it != txOrdered.rend(); ++it) + { + CWalletTx *const pwtx = (*it).second.first; + if (pwtx != 0) + ListTransactions(*pwtx, strAccount, 0, true, ret); + CAccountingEntry *const pacentry = (*it).second.second; + if (pacentry != 0) + AcentryToJSON(*pacentry, strAccount, ret); + + if ((int)ret.size() >= (nCount+nFrom)) break; + } + // ret is newest to oldest + + if (nFrom > (int)ret.size()) + nFrom = ret.size(); + if ((nFrom + nCount) > (int)ret.size()) + nCount = ret.size() - nFrom; + Array::iterator first = ret.begin(); + std::advance(first, nFrom); + Array::iterator last = ret.begin(); + std::advance(last, nFrom+nCount); + + if (last != ret.end()) ret.erase(last, ret.end()); + if (first != ret.begin()) ret.erase(ret.begin(), first); + + std::reverse(ret.begin(), ret.end()); // Return oldest to newest + + return ret; +} + +Value listaccounts(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 1) + throw runtime_error( + "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, CAddressBookData)& entry, pwalletMain->mapAddressBook) { + if (IsMine(*pwalletMain, entry.first)) // This address belongs to me + mapAccountBalances[entry.second.name] = 0; + } + + for (map::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); ++it) + { + const CWalletTx& wtx = (*it).second; + int64_t nFee; + string strSentAccount; + 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_t)& s, listSent) + mapAccountBalances[strSentAccount] -= s.second; + if (nDepth >= nMinDepth) + { + BOOST_FOREACH(const PAIRTYPE(CTxDestination, int64_t)& r, listReceived) + if (pwalletMain->mapAddressBook.count(r.first)) + mapAccountBalances[pwalletMain->mapAddressBook[r.first].name] += r.second; + else + mapAccountBalances[""] += r.second; + } + } + + list acentries; + CWalletDB(pwalletMain->strWalletFile).ListAccountCreditDebit("*", acentries); + BOOST_FOREACH(const CAccountingEntry& entry, acentries) + mapAccountBalances[entry.strAccount] += entry.nCreditDebit; + + Object ret; + BOOST_FOREACH(const PAIRTYPE(string, int64_t)& accountBalance, mapAccountBalances) { + ret.push_back(Pair(accountBalance.first, ValueFromAmount(accountBalance.second))); + } + return ret; +} + +Value listsinceblock(const Array& params, bool fHelp) +{ + if (fHelp) + throw runtime_error( + "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\":\"pfennigaddress\", (string) The pfennig 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 btm. 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 btm. 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; + + if (params.size() > 0) + { + uint256 blockId = 0; + + blockId.SetHex(params[0].get_str()); + std::map::iterator it = mapBlockIndex.find(blockId); + if (it != mapBlockIndex.end()) + pindex = it->second; + } + + if (params.size() > 1) + { + target_confirms = params[1].get_int(); + + if (target_confirms < 1) + throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter"); + } + + int depth = pindex ? (1 + chainActive.Height() - pindex->nHeight) : -1; + + Array transactions; + + for (map::iterator it = pwalletMain->mapWallet.begin(); it != pwalletMain->mapWallet.end(); it++) + { + CWalletTx tx = (*it).second; + + if (depth == -1 || tx.GetDepthInMainChain() < depth) + ListTransactions(tx, "*", 0, true, transactions); + } + + CBlockIndex *pblockLast = chainActive[chainActive.Height() + 1 - target_confirms]; + uint256 lastblock = pblockLast ? pblockLast->GetBlockHash() : 0; + + Object ret; + ret.push_back(Pair("transactions", transactions)); + ret.push_back(Pair("lastblock", lastblock.GetHex())); + + return ret; +} + +Value gettransaction(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "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 btm\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\" : \"pfennigaddress\", (string) The pfennig address involved in the transaction\n" + " \"category\" : \"send|receive\", (string) The category, either 'send' or 'receive'\n" + " \"amount\" : x.xxx (numeric) The amount in btm\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()); + + Object entry; + if (!pwalletMain->mapWallet.count(hash)) + throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid or non-wallet transaction id"); + const CWalletTx& wtx = pwalletMain->mapWallet[hash]; + + 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()) + entry.push_back(Pair("fee", ValueFromAmount(nFee))); + + WalletTxToJSON(wtx, entry); + + Array details; + 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; +} + + +Value backupwallet(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 1) + throw runtime_error( + "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)) + throw JSONRPCError(RPC_WALLET_ERROR, "Error: Wallet backup failed!"); + + return Value::null; +} + + +Value keypoolrefill(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 1) + throw runtime_error( + "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); + + 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(); +} + +Value walletpassphrase(const Array& params, bool fHelp) +{ + if (pwalletMain->IsCrypted() && (fHelp || params.size() != 2)) + throw runtime_error( + "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 pfennigs\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()) + throw JSONRPCError(RPC_WALLET_WRONG_ENC_STATE, "Error: running with an unencrypted wallet, but walletpassphrase was called."); + + // Note that the walletpassphrase is stored in params[0] which is not mlock()ed + SecureString strWalletPass; + strWalletPass.reserve(100); + // TODO: get rid of this .c_str() by implementing SecureString::operator=(std::string) + // Alternately, find a way to make params[0] mlock()'d to begin with. + strWalletPass = params[0].get_str().c_str(); + + if (strWalletPass.length() > 0) + { + if (!pwalletMain->Unlock(strWalletPass)) + throw JSONRPCError(RPC_WALLET_PASSPHRASE_INCORRECT, "Error: The wallet passphrase entered was incorrect."); + } + else + throw runtime_error( + "walletpassphrase \n" + "Stores the wallet decryption key in memory for seconds."); + + pwalletMain->TopUpKeyPool(); + + int64_t nSleepTime = params[1].get_int64(); + LOCK(cs_nWalletUnlockTime); + nWalletUnlockTime = GetTime() + nSleepTime; + RPCRunLater("lockwallet", boost::bind(LockWallet, pwalletMain), nSleepTime); + + return Value::null; +} + + +Value walletpassphrasechange(const Array& params, bool fHelp) +{ + if (pwalletMain->IsCrypted() && (fHelp || params.size() != 2)) + throw runtime_error( + "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()) + throw JSONRPCError(RPC_WALLET_WRONG_ENC_STATE, "Error: running with an unencrypted wallet, but walletpassphrasechange was called."); + + // TODO: get rid of these .c_str() calls by implementing SecureString::operator=(std::string) + // Alternately, find a way to make params[0] mlock()'d to begin with. + SecureString strOldWalletPass; + strOldWalletPass.reserve(100); + strOldWalletPass = params[0].get_str().c_str(); + + SecureString strNewWalletPass; + strNewWalletPass.reserve(100); + strNewWalletPass = params[1].get_str().c_str(); + + if (strOldWalletPass.length() < 1 || strNewWalletPass.length() < 1) + throw runtime_error( + "walletpassphrasechange \n" + "Changes the wallet passphrase from to ."); + + if (!pwalletMain->ChangeWalletPassphrase(strOldWalletPass, strNewWalletPass)) + throw JSONRPCError(RPC_WALLET_PASSPHRASE_INCORRECT, "Error: The wallet passphrase entered was incorrect."); + + return Value::null; +} + + +Value walletlock(const Array& params, bool fHelp) +{ + if (pwalletMain->IsCrypted() && (fHelp || params.size() != 0)) + throw runtime_error( + "walletlock\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.\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()) + throw JSONRPCError(RPC_WALLET_WRONG_ENC_STATE, "Error: running with an unencrypted wallet, but walletlock was called."); + + { + LOCK(cs_nWalletUnlockTime); + pwalletMain->Lock(); + nWalletUnlockTime = 0; + } + + return Value::null; +} + + +Value encryptwallet(const Array& params, bool fHelp) +{ + if (!pwalletMain->IsCrypted() && (fHelp || params.size() != 1)) + throw runtime_error( + "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 pfennig\n" + + HelpExampleCli("walletpassphrase", "\"my pass phrase\"") + + "\nNow we can so something like sign\n" + + HelpExampleCli("signmessage", "\"pfennigaddress\" \"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()) + throw JSONRPCError(RPC_WALLET_WRONG_ENC_STATE, "Error: running with an encrypted wallet, but encryptwallet was called."); + + // TODO: get rid of this .c_str() by implementing SecureString::operator=(std::string) + // Alternately, find a way to make params[0] mlock()'d to begin with. + SecureString strWalletPass; + strWalletPass.reserve(100); + strWalletPass = params[0].get_str().c_str(); + + if (strWalletPass.length() < 1) + throw runtime_error( + "encryptwallet \n" + "Encrypts the wallet with ."); + + if (!pwalletMain->EncryptWallet(strWalletPass)) + throw JSONRPCError(RPC_WALLET_ENCRYPTION_FAILED, "Error: Failed to encrypt the wallet."); + + // BDB seems to have a bad habit of writing old data into + // slack space in .dat files; that is bad if the old data is + // unencrypted private keys. So: + StartShutdown(); + return "wallet encrypted; Pfennig server stopping, restart to run with encrypted wallet. The keypool has been flushed, you need to make a new backup."; +} + +Value lockunspent(const Array& params, bool fHelp) +{ + if (fHelp || params.size() < 1 || params.size() > 2) + throw runtime_error( + "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 pfennigs.\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)); + else + RPCTypeCheck(params, list_of(bool_type)(array_type)); + + bool fUnlock = params[0].get_bool(); + + if (params.size() == 1) { + if (fUnlock) + pwalletMain->UnlockAllCoins(); + return true; + } + + Array outputs = params[1].get_array(); + BOOST_FOREACH(Value& output, outputs) + { + if (output.type() != obj_type) + 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(RPC_INVALID_PARAMETER, "Invalid parameter, expected hex txid"); + + int nOutput = find_value(o, "vout").get_int(); + if (nOutput < 0) + throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, vout must be positive"); + + COutPoint outpt(uint256(txid), nOutput); + + if (fUnlock) + pwalletMain->UnlockCoin(outpt); + else + pwalletMain->LockCoin(outpt); + } + + return true; +} + +Value listlockunspent(const Array& params, bool fHelp) +{ + if (fHelp || params.size() > 0) + throw runtime_error( + "listlockunspent\n" + "\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); + + Array ret; + + BOOST_FOREACH(COutPoint &outpt, vOutpts) { + Object o; + + o.push_back(Pair("txid", outpt.hash.GetHex())); + o.push_back(Pair("vout", (int)outpt.n)); + ret.push_back(o); + } + + 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 BTM/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 pfennig 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 aafe50d..adcf01a 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -1193,7 +1193,7 @@ bool Solver(const CScript& scriptPubKey, txnouttype& typeRet, vector +#include +#include + +using namespace std; +using namespace boost; + +typedef vector valtype; +static const valtype vchFalse(0); +static const valtype vchZero(0); +static const valtype vchTrue(1, 1); +static const CScriptNum bnZero(0); +static const CScriptNum bnOne(1); +static const CScriptNum bnFalse(0); +static const CScriptNum bnTrue(1); + +bool CheckSig(vector vchSig, const vector &vchPubKey, const CScript &scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType, int flags); + +bool CastToBool(const valtype& vch) +{ + for (unsigned int i = 0; i < vch.size(); i++) + { + if (vch[i] != 0) + { + // Can be negative zero + if (i == vch.size()-1 && vch[i] == 0x80) + return false; + return true; + } + } + return false; +} + + + +// +// Script is a stack machine (like Forth) that evaluates a predicate +// returning a bool indicating valid or not. There are no loops. +// +#define stacktop(i) (stack.at(stack.size()+(i))) +#define altstacktop(i) (altstack.at(altstack.size()+(i))) +static inline void popstack(vector& stack) +{ + if (stack.empty()) + throw runtime_error("popstack() : stack empty"); + stack.pop_back(); +} + + +const char* GetTxnOutputType(txnouttype t) +{ + switch (t) + { + case TX_NONSTANDARD: return "nonstandard"; + case TX_PUBKEY: return "pubkey"; + case TX_PUBKEYHASH: return "pubkeyhash"; + case TX_SCRIPTHASH: return "scripthash"; + case TX_MULTISIG: return "multisig"; + case TX_NULL_DATA: return "nulldata"; + } + return NULL; +} + + +const char* GetOpName(opcodetype opcode) +{ + switch (opcode) + { + // push value + case OP_0 : return "0"; + case OP_PUSHDATA1 : return "OP_PUSHDATA1"; + case OP_PUSHDATA2 : return "OP_PUSHDATA2"; + case OP_PUSHDATA4 : return "OP_PUSHDATA4"; + case OP_1NEGATE : return "-1"; + case OP_RESERVED : return "OP_RESERVED"; + case OP_1 : return "1"; + case OP_2 : return "2"; + case OP_3 : return "3"; + case OP_4 : return "4"; + case OP_5 : return "5"; + case OP_6 : return "6"; + case OP_7 : return "7"; + case OP_8 : return "8"; + case OP_9 : return "9"; + case OP_10 : return "10"; + case OP_11 : return "11"; + case OP_12 : return "12"; + case OP_13 : return "13"; + case OP_14 : return "14"; + case OP_15 : return "15"; + case OP_16 : return "16"; + + // control + case OP_NOP : return "OP_NOP"; + case OP_VER : return "OP_VER"; + case OP_IF : return "OP_IF"; + case OP_NOTIF : return "OP_NOTIF"; + case OP_VERIF : return "OP_VERIF"; + case OP_VERNOTIF : return "OP_VERNOTIF"; + case OP_ELSE : return "OP_ELSE"; + case OP_ENDIF : return "OP_ENDIF"; + case OP_VERIFY : return "OP_VERIFY"; + case OP_RETURN : return "OP_RETURN"; + + // stack ops + case OP_TOALTSTACK : return "OP_TOALTSTACK"; + case OP_FROMALTSTACK : return "OP_FROMALTSTACK"; + case OP_2DROP : return "OP_2DROP"; + case OP_2DUP : return "OP_2DUP"; + case OP_3DUP : return "OP_3DUP"; + case OP_2OVER : return "OP_2OVER"; + case OP_2ROT : return "OP_2ROT"; + case OP_2SWAP : return "OP_2SWAP"; + case OP_IFDUP : return "OP_IFDUP"; + case OP_DEPTH : return "OP_DEPTH"; + case OP_DROP : return "OP_DROP"; + case OP_DUP : return "OP_DUP"; + case OP_NIP : return "OP_NIP"; + case OP_OVER : return "OP_OVER"; + case OP_PICK : return "OP_PICK"; + case OP_ROLL : return "OP_ROLL"; + case OP_ROT : return "OP_ROT"; + case OP_SWAP : return "OP_SWAP"; + case OP_TUCK : return "OP_TUCK"; + + // splice ops + case OP_CAT : return "OP_CAT"; + case OP_SUBSTR : return "OP_SUBSTR"; + case OP_LEFT : return "OP_LEFT"; + case OP_RIGHT : return "OP_RIGHT"; + case OP_SIZE : return "OP_SIZE"; + + // bit logic + case OP_INVERT : return "OP_INVERT"; + case OP_AND : return "OP_AND"; + case OP_OR : return "OP_OR"; + case OP_XOR : return "OP_XOR"; + case OP_EQUAL : return "OP_EQUAL"; + case OP_EQUALVERIFY : return "OP_EQUALVERIFY"; + case OP_RESERVED1 : return "OP_RESERVED1"; + case OP_RESERVED2 : return "OP_RESERVED2"; + + // numeric + case OP_1ADD : return "OP_1ADD"; + case OP_1SUB : return "OP_1SUB"; + case OP_2MUL : return "OP_2MUL"; + case OP_2DIV : return "OP_2DIV"; + case OP_NEGATE : return "OP_NEGATE"; + case OP_ABS : return "OP_ABS"; + case OP_NOT : return "OP_NOT"; + case OP_0NOTEQUAL : return "OP_0NOTEQUAL"; + case OP_ADD : return "OP_ADD"; + case OP_SUB : return "OP_SUB"; + case OP_MUL : return "OP_MUL"; + case OP_DIV : return "OP_DIV"; + case OP_MOD : return "OP_MOD"; + case OP_LSHIFT : return "OP_LSHIFT"; + case OP_RSHIFT : return "OP_RSHIFT"; + case OP_BOOLAND : return "OP_BOOLAND"; + case OP_BOOLOR : return "OP_BOOLOR"; + case OP_NUMEQUAL : return "OP_NUMEQUAL"; + case OP_NUMEQUALVERIFY : return "OP_NUMEQUALVERIFY"; + case OP_NUMNOTEQUAL : return "OP_NUMNOTEQUAL"; + case OP_LESSTHAN : return "OP_LESSTHAN"; + case OP_GREATERTHAN : return "OP_GREATERTHAN"; + case OP_LESSTHANOREQUAL : return "OP_LESSTHANOREQUAL"; + case OP_GREATERTHANOREQUAL : return "OP_GREATERTHANOREQUAL"; + case OP_MIN : return "OP_MIN"; + case OP_MAX : return "OP_MAX"; + case OP_WITHIN : return "OP_WITHIN"; + + // crypto + case OP_RIPEMD160 : return "OP_RIPEMD160"; + case OP_SHA1 : return "OP_SHA1"; + case OP_SHA256 : return "OP_SHA256"; + case OP_HASH160 : return "OP_HASH160"; + case OP_HASH256 : return "OP_HASH256"; + case OP_CODESEPARATOR : return "OP_CODESEPARATOR"; + case OP_CHECKSIG : return "OP_CHECKSIG"; + case OP_CHECKSIGVERIFY : return "OP_CHECKSIGVERIFY"; + case OP_CHECKMULTISIG : return "OP_CHECKMULTISIG"; + case OP_CHECKMULTISIGVERIFY : return "OP_CHECKMULTISIGVERIFY"; + + // expanson + case OP_NOP1 : return "OP_NOP1"; + case OP_NOP2 : return "OP_NOP2"; + case OP_NOP3 : return "OP_NOP3"; + case OP_NOP4 : return "OP_NOP4"; + case OP_NOP5 : return "OP_NOP5"; + case OP_NOP6 : return "OP_NOP6"; + case OP_NOP7 : return "OP_NOP7"; + case OP_NOP8 : return "OP_NOP8"; + case OP_NOP9 : return "OP_NOP9"; + case OP_NOP10 : return "OP_NOP10"; + + + + // 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: + return "OP_UNKNOWN"; + } +} + +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) { + if (vchPubKey.size() != 65) + return error("Non-canonical public key: invalid length for uncompressed key"); + } else if (vchPubKey[0] == 0x02 || vchPubKey[0] == 0x03) { + if (vchPubKey.size() != 33) + return error("Non-canonical public key: invalid length for compressed key"); + } else { + return error("Non-canonical public key: compressed nor uncompressed"); + } + return true; +} + +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 + // excessively padded (do not start with a 0 byte, unless an otherwise negative number follows, + // in which case a single 0 byte is necessary and even required). + if (vchSig.size() < 9) + return error("Non-canonical signature: too short"); + if (vchSig.size() > 73) + return error("Non-canonical signature: too long"); + unsigned char nHashType = vchSig[vchSig.size() - 1] & (~(SIGHASH_ANYONECANPAY)); + if (nHashType < SIGHASH_ALL || nHashType > SIGHASH_SINGLE) + return error("Non-canonical signature: unknown hashtype byte"); + if (vchSig[0] != 0x30) + return error("Non-canonical signature: wrong type"); + if (vchSig[1] != vchSig.size()-3) + return error("Non-canonical signature: wrong length marker"); + unsigned int nLenR = vchSig[3]; + if (5 + nLenR >= vchSig.size()) + return error("Non-canonical signature: S length misplaced"); + unsigned int nLenS = vchSig[5+nLenR]; + if ((unsigned long)(nLenR+nLenS+7) != vchSig.size()) + return error("Non-canonical signature: R+S length mismatch"); + + const unsigned char *R = &vchSig[4]; + if (R[-2] != 0x02) + return error("Non-canonical signature: R value type mismatch"); + if (nLenR == 0) + return error("Non-canonical signature: R length is zero"); + if (R[0] & 0x80) + return error("Non-canonical signature: R value negative"); + if (nLenR > 1 && (R[0] == 0x00) && !(R[1] & 0x80)) + return error("Non-canonical signature: R value excessively padded"); + + const unsigned char *S = &vchSig[6+nLenR]; + if (S[-2] != 0x02) + return error("Non-canonical signature: S value type mismatch"); + if (nLenS == 0) + return error("Non-canonical signature: S length is zero"); + if (S[0] & 0x80) + return error("Non-canonical signature: S value negative"); + 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; +} + +bool EvalScript(vector >& stack, const CScript& script, const CTransaction& txTo, unsigned int nIn, unsigned int flags, int nHashType) +{ + CScript::const_iterator pc = script.begin(); + CScript::const_iterator pend = script.end(); + CScript::const_iterator pbegincodehash = script.begin(); + opcodetype opcode; + valtype vchPushValue; + vector vfExec; + vector altstack; + if (script.size() > 10000) + return false; + int nOpCount = 0; + + try + { + while (pc < pend) + { + bool fExec = !count(vfExec.begin(), vfExec.end(), false); + + // + // Read instruction + // + if (!script.GetOp(pc, opcode, vchPushValue)) + 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; + + if (opcode == OP_CAT || + opcode == OP_SUBSTR || + opcode == OP_LEFT || + opcode == OP_RIGHT || + opcode == OP_INVERT || + opcode == OP_AND || + opcode == OP_OR || + opcode == OP_XOR || + opcode == OP_2MUL || + opcode == OP_2DIV || + opcode == OP_MUL || + opcode == OP_DIV || + opcode == OP_MOD || + opcode == OP_LSHIFT || + opcode == OP_RSHIFT) + return false; // Disabled opcodes. + + if (fExec && 0 <= opcode && opcode <= OP_PUSHDATA4) + stack.push_back(vchPushValue); + else if (fExec || (OP_IF <= opcode && opcode <= OP_ENDIF)) + switch (opcode) + { + // + // Push value + // + case OP_1NEGATE: + case OP_1: + case OP_2: + case OP_3: + case OP_4: + case OP_5: + case OP_6: + case OP_7: + case OP_8: + case OP_9: + case OP_10: + case OP_11: + case OP_12: + case OP_13: + case OP_14: + case OP_15: + case OP_16: + { + // ( -- value) + CScriptNum bn((int)opcode - (int)(OP_1 - 1)); + stack.push_back(bn.getvch()); + } + break; + + + // + // Control + // + case OP_NOP: + case OP_NOP1: case OP_NOP2: case OP_NOP3: case OP_NOP4: case OP_NOP5: + case OP_NOP6: case OP_NOP7: case OP_NOP8: case OP_NOP9: case OP_NOP10: + break; + + case OP_IF: + case OP_NOTIF: + { + // if [statements] [else [statements]] endif + bool fValue = false; + if (fExec) + { + if (stack.size() < 1) + return false; + valtype& vch = stacktop(-1); + fValue = CastToBool(vch); + if (opcode == OP_NOTIF) + fValue = !fValue; + popstack(stack); + } + vfExec.push_back(fValue); + } + break; + + case OP_ELSE: + { + if (vfExec.empty()) + return false; + vfExec.back() = !vfExec.back(); + } + break; + + case OP_ENDIF: + { + if (vfExec.empty()) + return false; + vfExec.pop_back(); + } + break; + + case OP_VERIFY: + { + // (true -- ) or + // (false -- false) and return + if (stack.size() < 1) + return false; + bool fValue = CastToBool(stacktop(-1)); + if (fValue) + popstack(stack); + else + return false; + } + break; + + case OP_RETURN: + { + return false; + } + break; + + + // + // Stack ops + // + case OP_TOALTSTACK: + { + if (stack.size() < 1) + return false; + altstack.push_back(stacktop(-1)); + popstack(stack); + } + break; + + case OP_FROMALTSTACK: + { + if (altstack.size() < 1) + return false; + stack.push_back(altstacktop(-1)); + popstack(altstack); + } + break; + + case OP_2DROP: + { + // (x1 x2 -- ) + if (stack.size() < 2) + return false; + popstack(stack); + popstack(stack); + } + break; + + case OP_2DUP: + { + // (x1 x2 -- x1 x2 x1 x2) + if (stack.size() < 2) + return false; + valtype vch1 = stacktop(-2); + valtype vch2 = stacktop(-1); + stack.push_back(vch1); + stack.push_back(vch2); + } + break; + + case OP_3DUP: + { + // (x1 x2 x3 -- x1 x2 x3 x1 x2 x3) + if (stack.size() < 3) + return false; + valtype vch1 = stacktop(-3); + valtype vch2 = stacktop(-2); + valtype vch3 = stacktop(-1); + stack.push_back(vch1); + stack.push_back(vch2); + stack.push_back(vch3); + } + break; + + case OP_2OVER: + { + // (x1 x2 x3 x4 -- x1 x2 x3 x4 x1 x2) + if (stack.size() < 4) + return false; + valtype vch1 = stacktop(-4); + valtype vch2 = stacktop(-3); + stack.push_back(vch1); + stack.push_back(vch2); + } + break; + + case OP_2ROT: + { + // (x1 x2 x3 x4 x5 x6 -- x3 x4 x5 x6 x1 x2) + if (stack.size() < 6) + return false; + valtype vch1 = stacktop(-6); + valtype vch2 = stacktop(-5); + stack.erase(stack.end()-6, stack.end()-4); + stack.push_back(vch1); + stack.push_back(vch2); + } + break; + + case OP_2SWAP: + { + // (x1 x2 x3 x4 -- x3 x4 x1 x2) + if (stack.size() < 4) + return false; + swap(stacktop(-4), stacktop(-2)); + swap(stacktop(-3), stacktop(-1)); + } + break; + + case OP_IFDUP: + { + // (x - 0 | x x) + if (stack.size() < 1) + return false; + valtype vch = stacktop(-1); + if (CastToBool(vch)) + stack.push_back(vch); + } + break; + + case OP_DEPTH: + { + // -- stacksize + CScriptNum bn(stack.size()); + stack.push_back(bn.getvch()); + } + break; + + case OP_DROP: + { + // (x -- ) + if (stack.size() < 1) + return false; + popstack(stack); + } + break; + + case OP_DUP: + { + // (x -- x x) + if (stack.size() < 1) + return false; + valtype vch = stacktop(-1); + stack.push_back(vch); + } + break; + + case OP_NIP: + { + // (x1 x2 -- x2) + if (stack.size() < 2) + return false; + stack.erase(stack.end() - 2); + } + break; + + case OP_OVER: + { + // (x1 x2 -- x1 x2 x1) + if (stack.size() < 2) + return false; + valtype vch = stacktop(-2); + stack.push_back(vch); + } + break; + + case OP_PICK: + case OP_ROLL: + { + // (xn ... x2 x1 x0 n - xn ... x2 x1 x0 xn) + // (xn ... x2 x1 x0 n - ... x2 x1 x0 xn) + if (stack.size() < 2) + return false; + int n = CScriptNum(stacktop(-1)).getint(); + popstack(stack); + if (n < 0 || n >= (int)stack.size()) + return false; + valtype vch = stacktop(-n-1); + if (opcode == OP_ROLL) + stack.erase(stack.end()-n-1); + stack.push_back(vch); + } + break; + + case OP_ROT: + { + // (x1 x2 x3 -- x2 x3 x1) + // x2 x1 x3 after first swap + // x2 x3 x1 after second swap + if (stack.size() < 3) + return false; + swap(stacktop(-3), stacktop(-2)); + swap(stacktop(-2), stacktop(-1)); + } + break; + + case OP_SWAP: + { + // (x1 x2 -- x2 x1) + if (stack.size() < 2) + return false; + swap(stacktop(-2), stacktop(-1)); + } + break; + + case OP_TUCK: + { + // (x1 x2 -- x2 x1 x2) + if (stack.size() < 2) + return false; + valtype vch = stacktop(-1); + stack.insert(stack.end()-2, vch); + } + break; + + + case OP_SIZE: + { + // (in -- in size) + if (stack.size() < 1) + return false; + CScriptNum bn(stacktop(-1).size()); + stack.push_back(bn.getvch()); + } + break; + + + // + // Bitwise logic + // + case OP_EQUAL: + case OP_EQUALVERIFY: + //case OP_NOTEQUAL: // use OP_NUMNOTEQUAL + { + // (x1 x2 - bool) + if (stack.size() < 2) + return false; + valtype& vch1 = stacktop(-2); + valtype& vch2 = stacktop(-1); + bool fEqual = (vch1 == vch2); + // OP_NOTEQUAL is disabled because it would be too easy to say + // something like n != 1 and have some wiseguy pass in 1 with extra + // zero bytes after it (numerically, 0x01 == 0x0001 == 0x000001) + //if (opcode == OP_NOTEQUAL) + // fEqual = !fEqual; + popstack(stack); + popstack(stack); + stack.push_back(fEqual ? vchTrue : vchFalse); + if (opcode == OP_EQUALVERIFY) + { + if (fEqual) + popstack(stack); + else + return false; + } + } + break; + + + // + // Numeric + // + case OP_1ADD: + case OP_1SUB: + case OP_NEGATE: + case OP_ABS: + case OP_NOT: + case OP_0NOTEQUAL: + { + // (in -- out) + if (stack.size() < 1) + return false; + CScriptNum bn(stacktop(-1)); + switch (opcode) + { + case OP_1ADD: bn += bnOne; break; + case OP_1SUB: bn -= bnOne; break; + case OP_NEGATE: bn = -bn; break; + case OP_ABS: if (bn < bnZero) bn = -bn; break; + case OP_NOT: bn = (bn == bnZero); break; + case OP_0NOTEQUAL: bn = (bn != bnZero); break; + default: assert(!"invalid opcode"); break; + } + popstack(stack); + stack.push_back(bn.getvch()); + } + break; + + case OP_ADD: + case OP_SUB: + case OP_BOOLAND: + case OP_BOOLOR: + case OP_NUMEQUAL: + case OP_NUMEQUALVERIFY: + case OP_NUMNOTEQUAL: + case OP_LESSTHAN: + case OP_GREATERTHAN: + case OP_LESSTHANOREQUAL: + case OP_GREATERTHANOREQUAL: + case OP_MIN: + case OP_MAX: + { + // (x1 x2 -- out) + if (stack.size() < 2) + return false; + CScriptNum bn1(stacktop(-2)); + CScriptNum bn2(stacktop(-1)); + CScriptNum bn(0); + switch (opcode) + { + case OP_ADD: + bn = bn1 + bn2; + break; + + case OP_SUB: + bn = bn1 - bn2; + break; + + case OP_BOOLAND: bn = (bn1 != bnZero && bn2 != bnZero); break; + case OP_BOOLOR: bn = (bn1 != bnZero || bn2 != bnZero); break; + case OP_NUMEQUAL: bn = (bn1 == bn2); break; + case OP_NUMEQUALVERIFY: bn = (bn1 == bn2); break; + case OP_NUMNOTEQUAL: bn = (bn1 != bn2); break; + case OP_LESSTHAN: bn = (bn1 < bn2); break; + case OP_GREATERTHAN: bn = (bn1 > bn2); break; + case OP_LESSTHANOREQUAL: bn = (bn1 <= bn2); break; + case OP_GREATERTHANOREQUAL: bn = (bn1 >= bn2); break; + case OP_MIN: bn = (bn1 < bn2 ? bn1 : bn2); break; + case OP_MAX: bn = (bn1 > bn2 ? bn1 : bn2); break; + default: assert(!"invalid opcode"); break; + } + popstack(stack); + popstack(stack); + stack.push_back(bn.getvch()); + + if (opcode == OP_NUMEQUALVERIFY) + { + if (CastToBool(stacktop(-1))) + popstack(stack); + else + return false; + } + } + break; + + case OP_WITHIN: + { + // (x min max -- out) + if (stack.size() < 3) + return false; + CScriptNum bn1(stacktop(-3)); + CScriptNum bn2(stacktop(-2)); + CScriptNum bn3(stacktop(-1)); + bool fValue = (bn2 <= bn1 && bn1 < bn3); + popstack(stack); + popstack(stack); + popstack(stack); + stack.push_back(fValue ? vchTrue : vchFalse); + } + break; + + + // + // Crypto + // + case OP_RIPEMD160: + case OP_SHA1: + case OP_SHA256: + case OP_HASH160: + case OP_HASH256: + { + // (in -- hash) + if (stack.size() < 1) + return false; + valtype& vch = stacktop(-1); + valtype vchHash((opcode == OP_RIPEMD160 || opcode == OP_SHA1 || opcode == OP_HASH160) ? 20 : 32); + if (opcode == OP_RIPEMD160) + RIPEMD160(&vch[0], vch.size(), &vchHash[0]); + else if (opcode == OP_SHA1) + SHA1(&vch[0], vch.size(), &vchHash[0]); + else if (opcode == OP_SHA256) + SHA256(&vch[0], vch.size(), &vchHash[0]); + else if (opcode == OP_HASH160) + { + uint160 hash160 = Hash160(vch); + memcpy(&vchHash[0], &hash160, sizeof(hash160)); + } + else if (opcode == OP_HASH256) + { + uint256 hash = Hash(vch.begin(), vch.end()); + memcpy(&vchHash[0], &hash, sizeof(hash)); + } + popstack(stack); + stack.push_back(vchHash); + } + break; + + case OP_CODESEPARATOR: + { + // Hash starts after the code separator + pbegincodehash = pc; + } + break; + + case OP_CHECKSIG: + case OP_CHECKSIGVERIFY: + { + // (sig pubkey -- bool) + if (stack.size() < 2) + return false; + + valtype& vchSig = stacktop(-2); + valtype& vchPubKey = stacktop(-1); + + ////// debug print + //PrintHex(vchSig.begin(), vchSig.end(), "sig: %s\n"); + //PrintHex(vchPubKey.begin(), vchPubKey.end(), "pubkey: %s\n"); + + // Subset of script starting at the most recent codeseparator + CScript scriptCode(pbegincodehash, pend); + + // Drop the signature, since there's no way for a signature to sign itself + scriptCode.FindAndDelete(CScript(vchSig)); + + bool fSuccess = IsCanonicalSignature(vchSig, flags) && IsCanonicalPubKey(vchPubKey, flags) && + CheckSig(vchSig, vchPubKey, scriptCode, txTo, nIn, nHashType, flags); + + popstack(stack); + popstack(stack); + stack.push_back(fSuccess ? vchTrue : vchFalse); + if (opcode == OP_CHECKSIGVERIFY) + { + if (fSuccess) + popstack(stack); + else + return false; + } + } + break; + + case OP_CHECKMULTISIG: + case OP_CHECKMULTISIGVERIFY: + { + // ([sig ...] num_of_signatures [pubkey ...] num_of_pubkeys -- bool) + + int i = 1; + if ((int)stack.size() < i) + return false; + + int nKeysCount = CScriptNum(stacktop(-i)).getint(); + if (nKeysCount < 0 || nKeysCount > 20) + return false; + nOpCount += nKeysCount; + if (nOpCount > 201) + return false; + int ikey = ++i; + i += nKeysCount; + if ((int)stack.size() < i) + return false; + + int nSigsCount = CScriptNum(stacktop(-i)).getint(); + if (nSigsCount < 0 || nSigsCount > nKeysCount) + return false; + int isig = ++i; + i += nSigsCount; + if ((int)stack.size() < i) + return false; + + // Subset of script starting at the most recent codeseparator + CScript scriptCode(pbegincodehash, pend); + + // Drop the signatures, since there's no way for a signature to sign itself + for (int k = 0; k < nSigsCount; k++) + { + valtype& vchSig = stacktop(-isig-k); + scriptCode.FindAndDelete(CScript(vchSig)); + } + + bool fSuccess = true; + while (fSuccess && nSigsCount > 0) + { + valtype& vchSig = stacktop(-isig); + valtype& vchPubKey = stacktop(-ikey); + + // Check signature + bool fOk = IsCanonicalSignature(vchSig, flags) && IsCanonicalPubKey(vchPubKey, flags) && + CheckSig(vchSig, vchPubKey, scriptCode, txTo, nIn, nHashType, flags); + + if (fOk) { + isig++; + nSigsCount--; + } + ikey++; + nKeysCount--; + + // If there are more signatures left than keys left, + // then too many signatures have failed + if (nSigsCount > nKeysCount) + fSuccess = false; + } + + while (i-- > 0) + popstack(stack); + stack.push_back(fSuccess ? vchTrue : vchFalse); + + if (opcode == OP_CHECKMULTISIGVERIFY) + { + if (fSuccess) + popstack(stack); + else + return false; + } + } + break; + + default: + return false; + } + + // Size limits + if (stack.size() + altstack.size() > 1000) + return false; + } + } + catch (...) + { + return false; + } + + + if (!vfExec.empty()) + return false; + + return true; +} + + + + + + + +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) {} + + /** 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()) { + LogPrintf("ERROR: SignatureHash() : nIn=%d out of range\n", nIn); + return 1; + } + + // 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; + } + } + + // 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); + ss << txTmp << nHashType; + return ss.GetHash(); +} + + +// Valid signature cache, to avoid doing expensive ECDSA signature checking +// twice for every transaction (once when accepted into memory pool, and +// again when accepted into the block chain) + +class CSignatureCache +{ +private: + // sigdata_type is (signature hash, signature, public key): + typedef boost::tuple, CPubKey> sigdata_type; + std::set< sigdata_type> setValid; + boost::shared_mutex cs_sigcache; + +public: + bool + Get(const uint256 &hash, const std::vector& vchSig, const CPubKey& pubKey) + { + boost::shared_lock lock(cs_sigcache); + + sigdata_type k(hash, vchSig, pubKey); + std::set::iterator mi = setValid.find(k); + if (mi != setValid.end()) + return true; + return false; + } + + void Set(const uint256 &hash, const std::vector& vchSig, const CPubKey& pubKey) + { + // DoS prevention: limit cache size to less than 10MB + // (~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_t nMaxCacheSize = GetArg("-maxsigcachesize", 50000); + if (nMaxCacheSize <= 0) return; + + boost::unique_lock lock(cs_sigcache); + + 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 + // and re-use a set of valid signatures just-slightly-greater + // than our cache size. + uint256 randomHash = GetRandHash(); + std::vector unused; + std::set::iterator it = + setValid.lower_bound(sigdata_type(randomHash, unused, unused)); + if (it == setValid.end()) + it = setValid.begin(); + setValid.erase(*it); + } + + sigdata_type k(hash, vchSig, pubKey); + setValid.insert(k); + } +}; + +bool CheckSig(vector vchSig, const vector &vchPubKey, const CScript &scriptCode, + const CTransaction& txTo, unsigned int nIn, int nHashType, int flags) +{ + static CSignatureCache signatureCache; + + CPubKey pubkey(vchPubKey); + if (!pubkey.IsValid()) + return false; + + // Hash type is one byte tacked on to the end of the signature + if (vchSig.empty()) + return false; + if (nHashType == 0) + nHashType = vchSig.back(); + else if (nHashType != vchSig.back()) + return false; + vchSig.pop_back(); + + uint256 sighash = SignatureHash(scriptCode, txTo, nIn, nHashType); + + if (signatureCache.Get(sighash, vchSig, pubkey)) + return true; + + if (!pubkey.Verify(sighash, vchSig)) + return false; + + if (!(flags & SCRIPT_VERIFY_NOCACHE)) + signatureCache.Set(sighash, vchSig, pubkey); + + return true; +} + + + + + + + + + +// +// Return public keys or hashes from scriptPubKey, for 'standard' transaction types. +// +bool Solver(const CScript& scriptPubKey, txnouttype& typeRet, vector >& vSolutionsRet) +{ + // Templates + static multimap mTemplates; + if (mTemplates.empty()) + { + // Standard tx, sender provides pubkey, receiver adds signature + mTemplates.insert(make_pair(TX_PUBKEY, CScript() << OP_PUBKEY << OP_CHECKSIG)); + + // Pfennig address tx, sender provides hash of pubkey, receiver provides signature and pubkey + mTemplates.insert(make_pair(TX_PUBKEYHASH, CScript() << OP_DUP << OP_HASH160 << OP_PUBKEYHASH << OP_EQUALVERIFY << OP_CHECKSIG)); + + // Sender provides N pubkeys, receivers provides M signatures + mTemplates.insert(make_pair(TX_MULTISIG, CScript() << OP_SMALLINTEGER << OP_PUBKEYS << OP_SMALLINTEGER << OP_CHECKMULTISIG)); + + // Empty, provably prunable, data-carrying output + mTemplates.insert(make_pair(TX_NULL_DATA, CScript() << OP_RETURN << OP_SMALLDATA)); + mTemplates.insert(make_pair(TX_NULL_DATA, CScript() << OP_RETURN)); + } + + // Shortcut for pay-to-script-hash, which are more constrained than the other types: + // it is always OP_HASH160 20 [20 byte hash] OP_EQUAL + if (scriptPubKey.IsPayToScriptHash()) + { + typeRet = TX_SCRIPTHASH; + vector hashBytes(scriptPubKey.begin()+2, scriptPubKey.begin()+22); + vSolutionsRet.push_back(hashBytes); + return true; + } + + // Scan templates + const CScript& script1 = scriptPubKey; + BOOST_FOREACH(const PAIRTYPE(txnouttype, CScript)& tplate, mTemplates) + { + const CScript& script2 = tplate.second; + vSolutionsRet.clear(); + + opcodetype opcode1, opcode2; + vector vch1, vch2; + + // Compare + CScript::const_iterator pc1 = script1.begin(); + CScript::const_iterator pc2 = script2.begin(); + while (true) + { + if (pc1 == script1.end() && pc2 == script2.end()) + { + // Found a match + typeRet = tplate.first; + if (typeRet == TX_MULTISIG) + { + // Additional checks for TX_MULTISIG: + unsigned char m = vSolutionsRet.front()[0]; + unsigned char n = vSolutionsRet.back()[0]; + if (m < 1 || n < 1 || m > n || vSolutionsRet.size()-2 != n) + return false; + } + return true; + } + if (!script1.GetOp(pc1, opcode1, vch1)) + break; + if (!script2.GetOp(pc2, opcode2, vch2)) + break; + + // Template matching opcodes: + if (opcode2 == OP_PUBKEYS) + { + while (vch1.size() >= 33 && vch1.size() <= 65) + { + vSolutionsRet.push_back(vch1); + if (!script1.GetOp(pc1, opcode1, vch1)) + break; + } + if (!script2.GetOp(pc2, opcode2, vch2)) + break; + // Normal situation is to fall through + // to other if/else statements + } + + if (opcode2 == OP_PUBKEY) + { + if (vch1.size() < 33 || vch1.size() > 65) + break; + vSolutionsRet.push_back(vch1); + } + else if (opcode2 == OP_PUBKEYHASH) + { + if (vch1.size() != sizeof(uint160)) + break; + vSolutionsRet.push_back(vch1); + } + else if (opcode2 == OP_SMALLINTEGER) + { // Single-byte small integer pushed onto vSolutions + if (opcode1 == OP_0 || + (opcode1 >= OP_1 && opcode1 <= OP_16)) + { + char n = (char)CScript::DecodeOP_N(opcode1); + vSolutionsRet.push_back(valtype(1, n)); + } + else + break; + } + else if (opcode2 == OP_SMALLDATA) + { + // small pushdata, <= MAX_OP_RETURN_RELAY bytes + if (vch1.size() > MAX_OP_RETURN_RELAY) + break; + } + else if (opcode1 != opcode2 || vch1 != vch2) + { + // Others must match exactly + break; + } + } + } + + vSolutionsRet.clear(); + typeRet = TX_NONSTANDARD; + return false; +} + + +bool Sign1(const CKeyID& address, const CKeyStore& keystore, uint256 hash, int nHashType, CScript& scriptSigRet) +{ + CKey key; + if (!keystore.GetKey(address, key)) + return false; + + vector vchSig; + if (!key.Sign(hash, vchSig)) + return false; + vchSig.push_back((unsigned char)nHashType); + scriptSigRet << vchSig; + + return true; +} + +bool SignN(const vector& multisigdata, const CKeyStore& keystore, uint256 hash, int nHashType, CScript& scriptSigRet) +{ + int nSigned = 0; + int nRequired = multisigdata.front()[0]; + for (unsigned int i = 1; i < multisigdata.size()-1 && nSigned < nRequired; i++) + { + const valtype& pubkey = multisigdata[i]; + CKeyID keyID = CPubKey(pubkey).GetID(); + if (Sign1(keyID, keystore, hash, nHashType, scriptSigRet)) + ++nSigned; + } + return nSigned==nRequired; +} + +// +// Sign scriptPubKey with private keys stored in keystore, given transaction hash and hash type. +// Signatures are returned in scriptSigRet (or returns false if scriptPubKey can't be signed), +// unless whichTypeRet is TX_SCRIPTHASH, in which case scriptSigRet is the redemption script. +// Returns false if scriptPubKey could not be completely satisfied. +// +bool Solver(const CKeyStore& keystore, const CScript& scriptPubKey, uint256 hash, int nHashType, + CScript& scriptSigRet, txnouttype& whichTypeRet) +{ + scriptSigRet.clear(); + + vector vSolutions; + if (!Solver(scriptPubKey, whichTypeRet, vSolutions)) + return false; + + CKeyID keyID; + switch (whichTypeRet) + { + case TX_NONSTANDARD: + case TX_NULL_DATA: + return false; + case TX_PUBKEY: + keyID = CPubKey(vSolutions[0]).GetID(); + return Sign1(keyID, keystore, hash, nHashType, scriptSigRet); + case TX_PUBKEYHASH: + keyID = CKeyID(uint160(vSolutions[0])); + if (!Sign1(keyID, keystore, hash, nHashType, scriptSigRet)) + return false; + else + { + CPubKey vch; + keystore.GetPubKey(keyID, vch); + scriptSigRet << vch; + } + return true; + case TX_SCRIPTHASH: + return keystore.GetCScript(uint160(vSolutions[0]), scriptSigRet); + + case TX_MULTISIG: + scriptSigRet << OP_0; // workaround CHECKMULTISIG bug + return (SignN(vSolutions, keystore, hash, nHashType, scriptSigRet)); + } + return false; +} + +int ScriptSigArgsExpected(txnouttype t, const std::vector >& vSolutions) +{ + switch (t) + { + case TX_NONSTANDARD: + case TX_NULL_DATA: + return -1; + case TX_PUBKEY: + return 1; + case TX_PUBKEYHASH: + return 2; + case TX_MULTISIG: + if (vSolutions.size() < 1 || vSolutions[0].size() < 1) + return -1; + return vSolutions[0][0] + 1; + case TX_SCRIPTHASH: + return 1; // doesn't include args needed by the script + } + return -1; +} + +bool IsStandard(const CScript& scriptPubKey, txnouttype& whichType) +{ + vector vSolutions; + if (!Solver(scriptPubKey, whichType, vSolutions)) + return false; + + if (whichType == TX_MULTISIG) + { + unsigned char m = vSolutions.front()[0]; + unsigned char n = vSolutions.back()[0]; + // Support up to x-of-3 multisig txns as standard + if (n < 1 || n > 3) + return false; + if (m < 1 || m > n) + return false; + } + + return whichType != TX_NONSTANDARD; +} + + +unsigned int HaveKeys(const vector& pubkeys, const CKeyStore& keystore) +{ + unsigned int nResult = 0; + BOOST_FOREACH(const valtype& pubkey, pubkeys) + { + CKeyID keyID = CPubKey(pubkey).GetID(); + if (keystore.HaveKey(keyID)) + ++nResult; + } + return nResult; +} + + +class CKeyStoreIsMineVisitor : public boost::static_visitor +{ +private: + const CKeyStore *keystore; +public: + CKeyStoreIsMineVisitor(const CKeyStore *keystoreIn) : keystore(keystoreIn) { } + bool operator()(const CNoDestination &dest) const { return false; } + bool operator()(const CKeyID &keyID) const { return keystore->HaveKey(keyID); } + bool operator()(const CScriptID &scriptID) const { return keystore->HaveCScript(scriptID); } +}; + +bool IsMine(const CKeyStore &keystore, const CTxDestination &dest) +{ + return boost::apply_visitor(CKeyStoreIsMineVisitor(&keystore), dest); +} + +bool IsMine(const CKeyStore &keystore, const CScript& scriptPubKey) +{ + vector vSolutions; + txnouttype whichType; + if (!Solver(scriptPubKey, whichType, vSolutions)) + return false; + + CKeyID keyID; + switch (whichType) + { + case TX_NONSTANDARD: + case TX_NULL_DATA: + return false; + case TX_PUBKEY: + keyID = CPubKey(vSolutions[0]).GetID(); + return keystore.HaveKey(keyID); + case TX_PUBKEYHASH: + keyID = CKeyID(uint160(vSolutions[0])); + return keystore.HaveKey(keyID); + case TX_SCRIPTHASH: + { + CScript subscript; + if (!keystore.GetCScript(CScriptID(uint160(vSolutions[0])), subscript)) + return false; + return IsMine(keystore, subscript); + } + case TX_MULTISIG: + { + // Only consider transactions "mine" if we own ALL the + // keys involved. multi-signature transactions that are + // partially owned (somebody else has a key that can spend + // them) enable spend-out-from-under-you attacks, especially + // in shared-wallet situations. + vector keys(vSolutions.begin()+1, vSolutions.begin()+vSolutions.size()-1); + return HaveKeys(keys, keystore) == keys.size(); + } + } + return false; +} + +bool ExtractDestination(const CScript& scriptPubKey, CTxDestination& addressRet) +{ + vector vSolutions; + txnouttype whichType; + if (!Solver(scriptPubKey, whichType, vSolutions)) + return false; + + if (whichType == TX_PUBKEY) + { + addressRet = CPubKey(vSolutions[0]).GetID(); + return true; + } + else if (whichType == TX_PUBKEYHASH) + { + addressRet = CKeyID(uint160(vSolutions[0])); + return true; + } + else if (whichType == TX_SCRIPTHASH) + { + addressRet = CScriptID(uint160(vSolutions[0])); + return true; + } + // Multisig txns have more than one address... + return false; +} + +bool ExtractDestinations(const CScript& scriptPubKey, txnouttype& typeRet, vector& addressRet, int& nRequiredRet) +{ + addressRet.clear(); + typeRet = TX_NONSTANDARD; + 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) + { + nRequiredRet = vSolutions.front()[0]; + for (unsigned int i = 1; i < vSolutions.size()-1; i++) + { + CTxDestination address = CPubKey(vSolutions[i]).GetID(); + addressRet.push_back(address); + } + } + else + { + nRequiredRet = 1; + CTxDestination address; + if (!ExtractDestination(scriptPubKey, address)) + return false; + addressRet.push_back(address); + } + + return true; +} + +class CAffectedKeysVisitor : public boost::static_visitor { +private: + const CKeyStore &keystore; + std::vector &vKeys; + +public: + CAffectedKeysVisitor(const CKeyStore &keystoreIn, std::vector &vKeysIn) : keystore(keystoreIn), vKeys(vKeysIn) {} + + void Process(const CScript &script) { + txnouttype type; + std::vector vDest; + int nRequired; + if (ExtractDestinations(script, type, vDest, nRequired)) { + BOOST_FOREACH(const CTxDestination &dest, vDest) + boost::apply_visitor(*this, dest); + } + } + + void operator()(const CKeyID &keyId) { + if (keystore.HaveKey(keyId)) + vKeys.push_back(keyId); + } + + void operator()(const CScriptID &scriptId) { + CScript script; + if (keystore.GetCScript(scriptId, script)) + Process(script); + } + + void operator()(const CNoDestination &none) {} +}; + +void ExtractAffectedKeys(const CKeyStore &keystore, const CScript& scriptPubKey, std::vector &vKeys) { + CAffectedKeysVisitor(keystore, vKeys).Process(scriptPubKey); +} + +bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, const CTransaction& txTo, unsigned int nIn, + unsigned int flags, int nHashType) +{ + vector > stack, stackCopy; + if (!EvalScript(stack, scriptSig, txTo, nIn, flags, nHashType)) + return false; + if (flags & SCRIPT_VERIFY_P2SH) + stackCopy = stack; + if (!EvalScript(stack, scriptPubKey, txTo, nIn, flags, nHashType)) + return false; + if (stack.empty()) + return false; + + if (CastToBool(stack.back()) == false) + return false; + + // Additional validation for spend-to-script-hash transactions: + if ((flags & SCRIPT_VERIFY_P2SH) && scriptPubKey.IsPayToScriptHash()) + { + if (!scriptSig.IsPushOnly()) // scriptSig must be literals-only + return false; // or validation fails + + // stackCopy cannot be empty here, because if it was the + // P2SH HASH <> EQUAL scriptPubKey would be evaluated with + // an empty stack and the EvalScript above would return false. + assert(!stackCopy.empty()); + + const valtype& pubKeySerialized = stackCopy.back(); + CScript pubKey2(pubKeySerialized.begin(), pubKeySerialized.end()); + popstack(stackCopy); + + if (!EvalScript(stackCopy, pubKey2, txTo, nIn, flags, nHashType)) + return false; + if (stackCopy.empty()) + return false; + return CastToBool(stackCopy.back()); + } + + return true; +} + + +bool SignSignature(const CKeyStore &keystore, const CScript& fromPubKey, CTransaction& txTo, unsigned int nIn, int nHashType) +{ + assert(nIn < txTo.vin.size()); + CTxIn& txin = txTo.vin[nIn]; + + // Leave out the signature from the hash, since a signature can't sign itself. + // The checksig op will also drop the signatures from its hash. + uint256 hash = SignatureHash(fromPubKey, txTo, nIn, nHashType); + + txnouttype whichType; + if (!Solver(keystore, fromPubKey, hash, nHashType, txin.scriptSig, whichType)) + return false; + + if (whichType == TX_SCRIPTHASH) + { + // Solver returns the subscript that need to be evaluated; + // the final scriptSig is the signatures from that + // and then the serialized subscript: + CScript subscript = txin.scriptSig; + + // Recompute txn hash using subscript in place of scriptPubKey: + uint256 hash2 = SignatureHash(subscript, txTo, nIn, nHashType); + + txnouttype subType; + bool fSolved = + Solver(keystore, subscript, hash2, nHashType, txin.scriptSig, subType) && subType != TX_SCRIPTHASH; + // Append serialized subscript whether or not it is completely signed: + txin.scriptSig << static_cast(subscript); + if (!fSolved) return false; + } + + // Test solution + return VerifyScript(txin.scriptSig, fromPubKey, txTo, nIn, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC, 0); +} + +bool SignSignature(const CKeyStore &keystore, const CTransaction& txFrom, CTransaction& txTo, unsigned int nIn, int nHashType) +{ + assert(nIn < txTo.vin.size()); + CTxIn& txin = txTo.vin[nIn]; + assert(txin.prevout.n < txFrom.vout.size()); + const CTxOut& txout = txFrom.vout[txin.prevout.n]; + + return SignSignature(keystore, txout.scriptPubKey, txTo, nIn, nHashType); +} + +static CScript PushAll(const vector& values) +{ + CScript result; + BOOST_FOREACH(const valtype& v, values) + result << v; + return result; +} + +static CScript CombineMultisig(CScript scriptPubKey, const CTransaction& txTo, unsigned int nIn, + const vector& vSolutions, + vector& sigs1, vector& sigs2) +{ + // Combine all the signatures we've got: + set allsigs; + BOOST_FOREACH(const valtype& v, sigs1) + { + if (!v.empty()) + allsigs.insert(v); + } + BOOST_FOREACH(const valtype& v, sigs2) + { + if (!v.empty()) + allsigs.insert(v); + } + + // Build a map of pubkey -> signature by matching sigs to pubkeys: + assert(vSolutions.size() > 1); + unsigned int nSigsRequired = vSolutions.front()[0]; + unsigned int nPubKeys = vSolutions.size()-2; + map sigs; + BOOST_FOREACH(const valtype& sig, allsigs) + { + for (unsigned int i = 0; i < nPubKeys; i++) + { + const valtype& pubkey = vSolutions[i+1]; + if (sigs.count(pubkey)) + continue; // Already got a sig for this pubkey + + if (CheckSig(sig, pubkey, scriptPubKey, txTo, nIn, 0, 0)) + { + sigs[pubkey] = sig; + break; + } + } + } + // Now build a merged CScript: + unsigned int nSigsHave = 0; + CScript result; result << OP_0; // pop-one-too-many workaround + for (unsigned int i = 0; i < nPubKeys && nSigsHave < nSigsRequired; i++) + { + if (sigs.count(vSolutions[i+1])) + { + result << sigs[vSolutions[i+1]]; + ++nSigsHave; + } + } + // Fill any missing with OP_0: + for (unsigned int i = nSigsHave; i < nSigsRequired; i++) + result << OP_0; + + return result; +} + +static CScript CombineSignatures(CScript scriptPubKey, const CTransaction& txTo, unsigned int nIn, + const txnouttype txType, const vector& vSolutions, + vector& sigs1, vector& sigs2) +{ + 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); + return PushAll(sigs2); + case TX_PUBKEY: + case TX_PUBKEYHASH: + // Signatures are bigger than placeholders or empty scripts: + if (sigs1.empty() || sigs1[0].empty()) + return PushAll(sigs2); + return PushAll(sigs1); + case TX_SCRIPTHASH: + if (sigs1.empty() || sigs1.back().empty()) + return PushAll(sigs2); + else if (sigs2.empty() || sigs2.back().empty()) + return PushAll(sigs1); + else + { + // Recur to combine: + valtype spk = sigs1.back(); + CScript pubKey2(spk.begin(), spk.end()); + + txnouttype txType2; + vector > vSolutions2; + Solver(pubKey2, txType2, vSolutions2); + sigs1.pop_back(); + sigs2.pop_back(); + CScript result = CombineSignatures(pubKey2, txTo, nIn, txType2, vSolutions2, sigs1, sigs2); + result << spk; + return result; + } + case TX_MULTISIG: + return CombineMultisig(scriptPubKey, txTo, nIn, vSolutions, sigs1, sigs2); + } + + return CScript(); +} + +CScript CombineSignatures(CScript scriptPubKey, const CTransaction& txTo, unsigned int nIn, + const CScript& scriptSig1, const CScript& scriptSig2) +{ + txnouttype txType; + vector > vSolutions; + Solver(scriptPubKey, txType, vSolutions); + + vector stack1; + EvalScript(stack1, scriptSig1, CTransaction(), 0, SCRIPT_VERIFY_STRICTENC, 0); + vector stack2; + EvalScript(stack2, scriptSig2, CTransaction(), 0, SCRIPT_VERIFY_STRICTENC, 0); + + return CombineSignatures(scriptPubKey, txTo, nIn, txType, vSolutions, stack1, stack2); +} + +unsigned int CScript::GetSigOpCount(bool fAccurate) const +{ + unsigned int n = 0; + const_iterator pc = begin(); + opcodetype lastOpcode = OP_INVALIDOPCODE; + while (pc < end()) + { + opcodetype opcode; + if (!GetOp(pc, opcode)) + break; + if (opcode == OP_CHECKSIG || opcode == OP_CHECKSIGVERIFY) + n++; + else if (opcode == OP_CHECKMULTISIG || opcode == OP_CHECKMULTISIGVERIFY) + { + if (fAccurate && lastOpcode >= OP_1 && lastOpcode <= OP_16) + n += DecodeOP_N(lastOpcode); + else + n += 20; + } + lastOpcode = opcode; + } + return n; +} + +unsigned int CScript::GetSigOpCount(const CScript& scriptSig) const +{ + if (!IsPayToScriptHash()) + return GetSigOpCount(true); + + // This is a pay-to-script-hash scriptPubKey; + // get the last item that the scriptSig + // pushes onto the stack: + const_iterator pc = scriptSig.begin(); + vector data; + while (pc < scriptSig.end()) + { + opcodetype opcode; + if (!scriptSig.GetOp(pc, opcode, data)) + return 0; + if (opcode > OP_16) + return 0; + } + + /// ... and return its opcount: + CScript subscript(data.begin(), data.end()); + return subscript.GetSigOpCount(true); +} + +bool CScript::IsPayToScriptHash() const +{ + // Extra-fast test for pay-to-script-hash CScripts: + return (this->size() == 23 && + this->at(0) == OP_HASH160 && + this->at(1) == 0x14 && + 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: + CScript *script; +public: + CScriptVisitor(CScript *scriptin) { script = scriptin; } + + bool operator()(const CNoDestination &dest) const { + script->clear(); + return false; + } + + bool operator()(const CKeyID &keyID) const { + script->clear(); + *script << OP_DUP << OP_HASH160 << keyID << OP_EQUALVERIFY << OP_CHECKSIG; + return true; + } + + bool operator()(const CScriptID &scriptID) const { + script->clear(); + *script << OP_HASH160 << scriptID << OP_EQUAL; + return true; + } +}; + +void CScript::SetDestination(const CTxDestination& dest) +{ + boost::apply_visitor(CScriptVisitor(this), dest); +} + +void CScript::SetMultisig(int nRequired, const std::vector& keys) +{ + this->clear(); + + *this << EncodeOP_N(nRequired); + BOOST_FOREACH(const CPubKey& key, keys) + *this << key; + *this << EncodeOP_N(keys.size()) << OP_CHECKMULTISIG; +} + +bool CScriptCompressor::IsToKeyID(CKeyID &hash) const +{ + 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); + return true; + } + return false; +} + +bool CScriptCompressor::IsToScriptID(CScriptID &hash) const +{ + if (script.size() == 23 && script[0] == OP_HASH160 && script[1] == 20 + && script[22] == OP_EQUAL) { + memcpy(&hash, &script[2], 20); + return true; + } + return false; +} + +bool CScriptCompressor::IsToPubKey(CPubKey &pubkey) const +{ + if (script.size() == 35 && script[0] == 33 && script[34] == OP_CHECKSIG + && (script[1] == 0x02 || script[1] == 0x03)) { + pubkey.Set(&script[1], &script[34]); + return true; + } + if (script.size() == 67 && script[0] == 65 && script[66] == OP_CHECKSIG + && script[1] == 0x04) { + pubkey.Set(&script[1], &script[66]); + return pubkey.IsFullyValid(); // if not fully valid, a case that would not be compressible + } + return false; +} + +bool CScriptCompressor::Compress(std::vector &out) const +{ + CKeyID keyID; + if (IsToKeyID(keyID)) { + out.resize(21); + out[0] = 0x00; + memcpy(&out[1], &keyID, 20); + return true; + } + CScriptID scriptID; + if (IsToScriptID(scriptID)) { + out.resize(21); + out[0] = 0x01; + memcpy(&out[1], &scriptID, 20); + return true; + } + CPubKey pubkey; + if (IsToPubKey(pubkey)) { + out.resize(33); + memcpy(&out[1], &pubkey[1], 32); + if (pubkey[0] == 0x02 || pubkey[0] == 0x03) { + out[0] = pubkey[0]; + return true; + } else if (pubkey[0] == 0x04) { + out[0] = 0x04 | (pubkey[64] & 0x01); + return true; + } + } + return false; +} + +unsigned int CScriptCompressor::GetSpecialSize(unsigned int nSize) const +{ + if (nSize == 0 || nSize == 1) + return 20; + if (nSize == 2 || nSize == 3 || nSize == 4 || nSize == 5) + return 32; + return 0; +} + +bool CScriptCompressor::Decompress(unsigned int nSize, const std::vector &in) +{ + switch(nSize) { + case 0x00: + script.resize(25); + script[0] = OP_DUP; + script[1] = OP_HASH160; + script[2] = 20; + memcpy(&script[3], &in[0], 20); + script[23] = OP_EQUALVERIFY; + script[24] = OP_CHECKSIG; + return true; + case 0x01: + script.resize(23); + script[0] = OP_HASH160; + script[1] = 20; + memcpy(&script[2], &in[0], 20); + script[22] = OP_EQUAL; + return true; + case 0x02: + case 0x03: + script.resize(35); + script[0] = 33; + script[1] = nSize; + memcpy(&script[2], &in[0], 32); + script[34] = OP_CHECKSIG; + return true; + case 0x04: + case 0x05: + unsigned char vch[33] = {}; + vch[0] = nSize - 2; + memcpy(&vch[1], &in[0], 32); + CPubKey pubkey(&vch[0], &vch[33]); + if (!pubkey.Decompress()) + return false; + assert(pubkey.size() == 65); + script.resize(67); + script[0] = 65; + memcpy(&script[1], pubkey.begin(), 65); + script[66] = OP_CHECKSIG; + return true; + } + return false; +} diff --git a/src/script.h b/src/script.h index f7df7d3..534ec1c 100644 --- a/src/script.h +++ b/src/script.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -643,7 +643,7 @@ class CScript : public std::vector return nFound; } - // Pre-version-0.6, Bitmark always counted CHECKMULTISIGs + // Pre-version-0.6, Pfennig always counted CHECKMULTISIGs // as 20 sigops. With pay-to-script-hash, that changed: // CHECKMULTISIGs serialized in scriptSigs are // counted more accurately, assuming they are of the form diff --git a/src/script.h~ b/src/script.h~ new file mode 100644 index 0000000..8f632cd --- /dev/null +++ b/src/script.h~ @@ -0,0 +1,809 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef H_BITMARK_SCRIPT +#define H_BITMARK_SCRIPT + +#include "key.h" +#include "util.h" + +#include +#include +#include +#include + +#include +#include + +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 + +class scriptnum_error : public std::runtime_error +{ +public: + explicit scriptnum_error(const std::string& str) : std::runtime_error(str) {} +}; + +class CScriptNum +{ +// Numeric opcodes (OP_1ADD, etc) are restricted to operating on 4-byte integers. +// The semantics are subtle, though: operands must be in the range [-2^31 +1...2^31 -1], +// but results may overflow (and are valid as long as they are not used in a subsequent +// numeric operation). CScriptNum enforces those semantics by storing results as +// an int64 and allowing out-of-range values to be returned as a vector of bytes but +// throwing an exception if arithmetic is done or the result is interpreted as an integer. +public: + + explicit CScriptNum(const int64_t& n) + { + m_value = n; + } + + explicit CScriptNum(const std::vector& vch) + { + if (vch.size() > nMaxNumSize) + throw scriptnum_error("CScriptNum(const std::vector&) : overflow"); + m_value = set_vch(vch); + } + + inline bool operator==(const int64_t& rhs) const { return m_value == rhs; } + inline bool operator!=(const int64_t& rhs) const { return m_value != rhs; } + inline bool operator<=(const int64_t& rhs) const { return m_value <= rhs; } + inline bool operator< (const int64_t& rhs) const { return m_value < rhs; } + inline bool operator>=(const int64_t& rhs) const { return m_value >= rhs; } + inline bool operator> (const int64_t& rhs) const { return m_value > rhs; } + + inline bool operator==(const CScriptNum& rhs) const { return operator==(rhs.m_value); } + inline bool operator!=(const CScriptNum& rhs) const { return operator!=(rhs.m_value); } + inline bool operator<=(const CScriptNum& rhs) const { return operator<=(rhs.m_value); } + inline bool operator< (const CScriptNum& rhs) const { return operator< (rhs.m_value); } + inline bool operator>=(const CScriptNum& rhs) const { return operator>=(rhs.m_value); } + inline bool operator> (const CScriptNum& rhs) const { return operator> (rhs.m_value); } + + inline CScriptNum operator+( const int64_t& rhs) const { return CScriptNum(m_value + rhs);} + inline CScriptNum operator-( const int64_t& rhs) const { return CScriptNum(m_value - rhs);} + inline CScriptNum operator+( const CScriptNum& rhs) const { return operator+(rhs.m_value); } + inline CScriptNum operator-( const CScriptNum& rhs) const { return operator-(rhs.m_value); } + + inline CScriptNum& operator+=( const CScriptNum& rhs) { return operator+=(rhs.m_value); } + inline CScriptNum& operator-=( const CScriptNum& rhs) { return operator-=(rhs.m_value); } + + inline CScriptNum operator-() const + { + assert(m_value != std::numeric_limits::min()); + return CScriptNum(-m_value); + } + + inline CScriptNum& operator=( const int64_t& rhs) + { + m_value = rhs; + return *this; + } + + inline CScriptNum& operator+=( const int64_t& rhs) + { + assert(rhs == 0 || (rhs > 0 && m_value <= std::numeric_limits::max() - rhs) || + (rhs < 0 && m_value >= std::numeric_limits::min() - rhs)); + m_value += rhs; + return *this; + } + + inline CScriptNum& operator-=( const int64_t& rhs) + { + assert(rhs == 0 || (rhs > 0 && m_value >= std::numeric_limits::min() + rhs) || + (rhs < 0 && m_value <= std::numeric_limits::max() + rhs)); + m_value -= rhs; + return *this; + } + + int getint() const + { + if (m_value > std::numeric_limits::max()) + return std::numeric_limits::max(); + else if (m_value < std::numeric_limits::min()) + return std::numeric_limits::min(); + return m_value; + } + + std::vector getvch() const + { + return serialize(m_value); + } + + static std::vector serialize(const int64_t& value) + { + if(value == 0) + return std::vector(); + + std::vector result; + const bool neg = value < 0; + uint64_t absvalue = neg ? -value : value; + + while(absvalue) + { + result.push_back(absvalue & 0xff); + absvalue >>= 8; + } + + +// - If the most significant byte is >= 0x80 and the value is positive, push a +// new zero-byte to make the significant byte < 0x80 again. + +// - If the most significant byte is >= 0x80 and the value is negative, push a +// new 0x80 byte that will be popped off when converting to an integral. + +// - If the most significant byte is < 0x80 and the value is negative, add +// 0x80 to it, since it will be subtracted and interpreted as a negative when +// converting to an integral. + + if (result.back() & 0x80) + result.push_back(neg ? 0x80 : 0); + else if (neg) + result.back() |= 0x80; + + return result; + } + + static const size_t nMaxNumSize = 4; + +private: + static int64_t set_vch(const std::vector& vch) + { + if (vch.empty()) + return 0; + + int64_t result = 0; + for (size_t i = 0; i != vch.size(); ++i) + result |= static_cast(vch[i]) << 8*i; + + // If the input vector's most significant byte is 0x80, remove it from + // the result's msb and return a negative. + if (vch.back() & 0x80) + return -(result & ~(0x80 << (8 * (vch.size() - 1)))); + + return result; + } + + int64_t m_value; +}; + +/** Signature hash types/flags */ +enum +{ + SIGHASH_ALL = 1, + SIGHASH_NONE = 2, + SIGHASH_SINGLE = 3, + SIGHASH_ANYONECANPAY = 0x80, +}; + +/** Script verification flags */ +enum +{ + SCRIPT_VERIFY_NONE = 0, + 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 +{ + TX_NONSTANDARD, + // 'standard' transaction types: + TX_PUBKEY, + TX_PUBKEYHASH, + TX_SCRIPTHASH, + TX_MULTISIG, + TX_NULL_DATA, +}; + +class CNoDestination { +public: + friend bool operator==(const CNoDestination &a, const CNoDestination &b) { return true; } + friend bool operator<(const CNoDestination &a, const CNoDestination &b) { return true; } +}; + +/** A txout script template with a specific destination. It is either: + * * CNoDestination: no destination set + * * CKeyID: TX_PUBKEYHASH destination + * * CScriptID: TX_SCRIPTHASH destination + * A CTxDestination is the internal data type encoded in a CBitmarkAddress + */ +typedef boost::variant CTxDestination; + +const char* GetTxnOutputType(txnouttype t); + +/** Script opcodes */ +enum opcodetype +{ + // push value + OP_0 = 0x00, + OP_FALSE = OP_0, + OP_PUSHDATA1 = 0x4c, + OP_PUSHDATA2 = 0x4d, + OP_PUSHDATA4 = 0x4e, + OP_1NEGATE = 0x4f, + OP_RESERVED = 0x50, + OP_1 = 0x51, + OP_TRUE=OP_1, + OP_2 = 0x52, + OP_3 = 0x53, + OP_4 = 0x54, + OP_5 = 0x55, + OP_6 = 0x56, + OP_7 = 0x57, + OP_8 = 0x58, + OP_9 = 0x59, + OP_10 = 0x5a, + OP_11 = 0x5b, + OP_12 = 0x5c, + OP_13 = 0x5d, + OP_14 = 0x5e, + OP_15 = 0x5f, + OP_16 = 0x60, + + // control + OP_NOP = 0x61, + OP_VER = 0x62, + OP_IF = 0x63, + OP_NOTIF = 0x64, + OP_VERIF = 0x65, + OP_VERNOTIF = 0x66, + OP_ELSE = 0x67, + OP_ENDIF = 0x68, + OP_VERIFY = 0x69, + OP_RETURN = 0x6a, + + // stack ops + OP_TOALTSTACK = 0x6b, + OP_FROMALTSTACK = 0x6c, + OP_2DROP = 0x6d, + OP_2DUP = 0x6e, + OP_3DUP = 0x6f, + OP_2OVER = 0x70, + OP_2ROT = 0x71, + OP_2SWAP = 0x72, + OP_IFDUP = 0x73, + OP_DEPTH = 0x74, + OP_DROP = 0x75, + OP_DUP = 0x76, + OP_NIP = 0x77, + OP_OVER = 0x78, + OP_PICK = 0x79, + OP_ROLL = 0x7a, + OP_ROT = 0x7b, + OP_SWAP = 0x7c, + OP_TUCK = 0x7d, + + // splice ops + OP_CAT = 0x7e, + OP_SUBSTR = 0x7f, + OP_LEFT = 0x80, + OP_RIGHT = 0x81, + OP_SIZE = 0x82, + + // bit logic + OP_INVERT = 0x83, + OP_AND = 0x84, + OP_OR = 0x85, + OP_XOR = 0x86, + OP_EQUAL = 0x87, + OP_EQUALVERIFY = 0x88, + OP_RESERVED1 = 0x89, + OP_RESERVED2 = 0x8a, + + // numeric + OP_1ADD = 0x8b, + OP_1SUB = 0x8c, + OP_2MUL = 0x8d, + OP_2DIV = 0x8e, + OP_NEGATE = 0x8f, + OP_ABS = 0x90, + OP_NOT = 0x91, + OP_0NOTEQUAL = 0x92, + + OP_ADD = 0x93, + OP_SUB = 0x94, + OP_MUL = 0x95, + OP_DIV = 0x96, + OP_MOD = 0x97, + OP_LSHIFT = 0x98, + OP_RSHIFT = 0x99, + + OP_BOOLAND = 0x9a, + OP_BOOLOR = 0x9b, + OP_NUMEQUAL = 0x9c, + OP_NUMEQUALVERIFY = 0x9d, + OP_NUMNOTEQUAL = 0x9e, + OP_LESSTHAN = 0x9f, + OP_GREATERTHAN = 0xa0, + OP_LESSTHANOREQUAL = 0xa1, + OP_GREATERTHANOREQUAL = 0xa2, + OP_MIN = 0xa3, + OP_MAX = 0xa4, + + OP_WITHIN = 0xa5, + + // crypto + OP_RIPEMD160 = 0xa6, + OP_SHA1 = 0xa7, + OP_SHA256 = 0xa8, + OP_HASH160 = 0xa9, + OP_HASH256 = 0xaa, + OP_CODESEPARATOR = 0xab, + OP_CHECKSIG = 0xac, + OP_CHECKSIGVERIFY = 0xad, + OP_CHECKMULTISIG = 0xae, + OP_CHECKMULTISIGVERIFY = 0xaf, + + // expansion + OP_NOP1 = 0xb0, + OP_NOP2 = 0xb1, + OP_NOP3 = 0xb2, + OP_NOP4 = 0xb3, + OP_NOP5 = 0xb4, + OP_NOP6 = 0xb5, + OP_NOP7 = 0xb6, + OP_NOP8 = 0xb7, + OP_NOP9 = 0xb8, + OP_NOP10 = 0xb9, + + + + // template matching params + OP_SMALLDATA = 0xf9, + OP_SMALLINTEGER = 0xfa, + OP_PUBKEYS = 0xfb, + OP_PUBKEYHASH = 0xfd, + OP_PUBKEY = 0xfe, + + OP_INVALIDOPCODE = 0xff, +}; + +const char* GetOpName(opcodetype opcode); + + + +inline std::string ValueString(const std::vector& vch) +{ + if (vch.size() <= 4) + return strprintf("%d", CScriptNum(vch).getint()); + else + return HexStr(vch); +} + +inline std::string StackString(const std::vector >& vStack) +{ + std::string str; + BOOST_FOREACH(const std::vector& vch, vStack) + { + if (!str.empty()) + str += " "; + str += ValueString(vch); + } + return str; +} + + + + + + + + +/** Serialized script, used inside transaction inputs and outputs */ +class CScript : public std::vector +{ +protected: + CScript& push_int64(int64_t n) + { + if (n == -1 || (n >= 1 && n <= 16)) + { + push_back(n + (OP_1 - 1)); + } + else + { + *this << CScriptNum::serialize(n); + } + return *this; + } + +public: + CScript() { } + CScript(const CScript& b) : std::vector(b.begin(), b.end()) { } + CScript(const_iterator pbegin, const_iterator pend) : std::vector(pbegin, pend) { } +#ifndef _MSC_VER + CScript(const unsigned char* pbegin, const unsigned char* pend) : std::vector(pbegin, pend) { } +#endif + + CScript& operator+=(const CScript& b) + { + insert(end(), b.begin(), b.end()); + return *this; + } + + friend CScript operator+(const CScript& a, const CScript& b) + { + CScript ret = a; + ret += b; + return ret; + } + + + CScript(int64_t b) { operator<<(b); } + + explicit CScript(opcodetype b) { operator<<(b); } + explicit CScript(const uint256& b) { operator<<(b); } + explicit CScript(const CScriptNum& b) { operator<<(b); } + explicit CScript(const std::vector& b) { operator<<(b); } + + + CScript& operator<<(int64_t b) { return push_int64(b); } + + CScript& operator<<(opcodetype opcode) + { + if (opcode < 0 || opcode > 0xff) + throw std::runtime_error("CScript::operator<<() : invalid opcode"); + insert(end(), (unsigned char)opcode); + return *this; + } + + CScript& operator<<(const uint160& b) + { + insert(end(), sizeof(b)); + insert(end(), (unsigned char*)&b, (unsigned char*)&b + sizeof(b)); + return *this; + } + + CScript& operator<<(const uint256& b) + { + insert(end(), sizeof(b)); + insert(end(), (unsigned char*)&b, (unsigned char*)&b + sizeof(b)); + return *this; + } + + CScript& operator<<(const CPubKey& key) + { + assert(key.size() < OP_PUSHDATA1); + insert(end(), (unsigned char)key.size()); + insert(end(), key.begin(), key.end()); + return *this; + } + + CScript& operator<<(const CScriptNum& b) + { + *this << b.getvch(); + return *this; + } + + CScript& operator<<(const std::vector& b) + { + if (b.size() < OP_PUSHDATA1) + { + insert(end(), (unsigned char)b.size()); + } + else if (b.size() <= 0xff) + { + insert(end(), OP_PUSHDATA1); + insert(end(), (unsigned char)b.size()); + } + else if (b.size() <= 0xffff) + { + insert(end(), OP_PUSHDATA2); + unsigned short nSize = b.size(); + insert(end(), (unsigned char*)&nSize, (unsigned char*)&nSize + sizeof(nSize)); + } + else + { + insert(end(), OP_PUSHDATA4); + unsigned int nSize = b.size(); + insert(end(), (unsigned char*)&nSize, (unsigned char*)&nSize + sizeof(nSize)); + } + insert(end(), b.begin(), b.end()); + return *this; + } + + CScript& operator<<(const CScript& b) + { + // I'm not sure if this should push the script or concatenate scripts. + // If there's ever a use for pushing a script onto a script, delete this member fn + assert(!"Warning: Pushing a CScript onto a CScript with << is probably not intended, use + to concatenate!"); + return *this; + } + + + bool GetOp(iterator& pc, opcodetype& opcodeRet, std::vector& vchRet) + { + // Wrapper so it can be called with either iterator or const_iterator + const_iterator pc2 = pc; + bool fRet = GetOp2(pc2, opcodeRet, &vchRet); + pc = begin() + (pc2 - begin()); + return fRet; + } + + bool GetOp(iterator& pc, opcodetype& opcodeRet) + { + const_iterator pc2 = pc; + bool fRet = GetOp2(pc2, opcodeRet, NULL); + pc = begin() + (pc2 - begin()); + return fRet; + } + + bool GetOp(const_iterator& pc, opcodetype& opcodeRet, std::vector& vchRet) const + { + return GetOp2(pc, opcodeRet, &vchRet); + } + + bool GetOp(const_iterator& pc, opcodetype& opcodeRet) const + { + return GetOp2(pc, opcodeRet, NULL); + } + + bool GetOp2(const_iterator& pc, opcodetype& opcodeRet, std::vector* pvchRet) const + { + opcodeRet = OP_INVALIDOPCODE; + if (pvchRet) + pvchRet->clear(); + if (pc >= end()) + return false; + + // Read instruction + if (end() - pc < 1) + return false; + unsigned int opcode = *pc++; + + // Immediate operand + if (opcode <= OP_PUSHDATA4) + { + unsigned int nSize = 0; + if (opcode < OP_PUSHDATA1) + { + nSize = opcode; + } + else if (opcode == OP_PUSHDATA1) + { + if (end() - pc < 1) + return false; + nSize = *pc++; + } + else if (opcode == OP_PUSHDATA2) + { + if (end() - pc < 2) + return false; + nSize = 0; + memcpy(&nSize, &pc[0], 2); + pc += 2; + } + else if (opcode == OP_PUSHDATA4) + { + if (end() - pc < 4) + return false; + memcpy(&nSize, &pc[0], 4); + pc += 4; + } + if (end() - pc < 0 || (unsigned int)(end() - pc) < nSize) + return false; + if (pvchRet) + pvchRet->assign(pc, pc + nSize); + pc += nSize; + } + + opcodeRet = (opcodetype)opcode; + return true; + } + + // Encode/decode small integers: + static int DecodeOP_N(opcodetype opcode) + { + if (opcode == OP_0) + return 0; + assert(opcode >= OP_1 && opcode <= OP_16); + return (int)opcode - (int)(OP_1 - 1); + } + static opcodetype EncodeOP_N(int n) + { + assert(n >= 0 && n <= 16); + if (n == 0) + return OP_0; + return (opcodetype)(OP_1+n-1); + } + + int FindAndDelete(const CScript& b) + { + int nFound = 0; + if (b.empty()) + return nFound; + iterator pc = begin(); + opcodetype opcode; + do + { + while (end() - pc >= (long)b.size() && memcmp(&pc[0], &b[0], b.size()) == 0) + { + erase(pc, pc + b.size()); + ++nFound; + } + } + while (GetOp(pc, opcode)); + return nFound; + } + int Find(opcodetype op) const + { + int nFound = 0; + opcodetype opcode; + for (const_iterator pc = begin(); pc != end() && GetOp(pc, opcode);) + if (opcode == op) + ++nFound; + return nFound; + } + + // Pre-version-0.6, Pfennig always counted CHECKMULTISIGs + // as 20 sigops. With pay-to-script-hash, that changed: + // CHECKMULTISIGs serialized in scriptSigs are + // counted more accurately, assuming they are of the form + // ... OP_N CHECKMULTISIG ... + unsigned int GetSigOpCount(bool fAccurate) const; + + // Accurately count sigOps, including sigOps in + // pay-to-script-hash transactions: + unsigned int GetSigOpCount(const CScript& scriptSig) const; + + bool IsPayToScriptHash() const; + + // 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); + + + void PrintHex() const + { + LogPrintf("CScript(%s)\n", HexStr(begin(), end(), true).c_str()); + } + + std::string ToString() const + { + std::string str; + opcodetype opcode; + std::vector vch; + const_iterator pc = begin(); + while (pc < end()) + { + if (!str.empty()) + str += " "; + if (!GetOp(pc, opcode, vch)) + { + str += "[error]"; + return str; + } + if (0 <= opcode && opcode <= OP_PUSHDATA4) + str += ValueString(vch); + else + str += GetOpName(opcode); + } + return str; + } + + void print() const + { + LogPrintf("%s\n", ToString().c_str()); + } + + CScriptID GetID() const + { + return CScriptID(Hash160(*this)); + } +}; + +/** Compact serializer for scripts. + * + * It detects common cases and encodes them much more efficiently. + * 3 special cases are defined: + * * Pay to pubkey hash (encoded as 21 bytes) + * * Pay to script hash (encoded as 21 bytes) + * * Pay to pubkey starting with 0x02, 0x03 or 0x04 (encoded as 33 bytes) + * + * Other scripts up to 121 bytes require 1 byte + script length. Above + * that, scripts up to 16505 bytes require 2 bytes + script length. + */ +class CScriptCompressor +{ +private: + // make this static for now (there are only 6 special scripts defined) + // this can potentially be extended together with a new nVersion for + // transactions, in which case this value becomes dependent on nVersion + // and nHeight of the enclosing transaction. + static const unsigned int nSpecialScripts = 6; + + CScript &script; +protected: + // These check for scripts for which a special case with a shorter encoding is defined. + // They are implemented separately from the CScript test, as these test for exact byte + // sequence correspondences, and are more strict. For example, IsToPubKey also verifies + // whether the public key is valid (as invalid ones cannot be represented in compressed + // form). + bool IsToKeyID(CKeyID &hash) const; + bool IsToScriptID(CScriptID &hash) const; + bool IsToPubKey(CPubKey &pubkey) const; + + bool Compress(std::vector &out) const; + unsigned int GetSpecialSize(unsigned int nSize) const; + bool Decompress(unsigned int nSize, const std::vector &out); +public: + CScriptCompressor(CScript &scriptIn) : script(scriptIn) { } + + unsigned int GetSerializeSize(int nType, int nVersion) const { + std::vector compr; + if (Compress(compr)) + return compr.size(); + unsigned int nSize = script.size() + nSpecialScripts; + return script.size() + VARINT(nSize).GetSerializeSize(nType, nVersion); + } + + template + void Serialize(Stream &s, int nType, int nVersion) const { + std::vector compr; + if (Compress(compr)) { + s << CFlatData(&compr[0], &compr[compr.size()]); + return; + } + unsigned int nSize = script.size() + nSpecialScripts; + s << VARINT(nSize); + s << CFlatData(&script[0], &script[script.size()]); + } + + template + void Unserialize(Stream &s, int nType, int nVersion) { + unsigned int nSize = 0; + s >> VARINT(nSize); + if (nSize < nSpecialScripts) { + std::vector vch(GetSpecialSize(nSize), 0x00); + s >> REF(CFlatData(&vch[0], &vch[vch.size()])); + Decompress(nSize, vch); + return; + } + nSize -= nSpecialScripts; + script.resize(nSize); + s >> REF(CFlatData(&script[0], &script[script.size()])); + } +}; + +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, 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); +bool ExtractDestination(const CScript& scriptPubKey, CTxDestination& addressRet); +bool ExtractDestinations(const CScript& scriptPubKey, txnouttype& typeRet, std::vector& addressRet, int& nRequiredRet); +bool SignSignature(const CKeyStore& keystore, const CScript& fromPubKey, CTransaction& txTo, unsigned int nIn, int nHashType=SIGHASH_ALL); +bool SignSignature(const CKeyStore& keystore, const CTransaction& txFrom, CTransaction& txTo, unsigned int nIn, int nHashType=SIGHASH_ALL); +bool VerifyScript(const CScript& scriptSig, const CScript& scriptPubKey, const CTransaction& txTo, unsigned int nIn, unsigned int flags, int nHashType); + +// Given two sets of signatures for scriptPubKey, possibly with OP_0 placeholders, +// combine them intelligently and return the result. +CScript CombineSignatures(CScript scriptPubKey, const CTransaction& txTo, unsigned int nIn, const CScript& scriptSig1, const CScript& scriptSig2); + +#endif diff --git a/src/serialize.h b/src/serialize.h index 31d5c61..68add38 100644 --- a/src/serialize.h +++ b/src/serialize.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/serialize.h~ b/src/serialize.h~ new file mode 100644 index 0000000..fade841 --- /dev/null +++ b/src/serialize.h~ @@ -0,0 +1,1399 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_SERIALIZE_H +#define BITMARK_SERIALIZE_H + +#include "allocators.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +class CAutoFile; +class CDataStream; +class CScript; + +static const unsigned int MAX_SIZE = 0x02000000; + +// Used to bypass the rule against non-const reference to temporary +// where it makes sense with wrappers such as CFlatData or CTxDB +template +inline T& REF(const T& val) +{ + return const_cast(val); +} + +///////////////////////////////////////////////////////////////// +// +// Templates for serializing to anything that looks like a stream, +// i.e. anything that supports .read(char*, int) and .write(char*, int) +// + +enum +{ + // primary actions + SER_NETWORK = (1 << 0), + SER_DISK = (1 << 1), + SER_GETHASH = (1 << 2), +}; + +#define IMPLEMENT_SERIALIZE(statements) \ + unsigned int GetSerializeSize(int nType, int nVersion) const \ + { \ + CSerActionGetSerializeSize ser_action; \ + const bool fGetSize = true; \ + const bool fWrite = false; \ + const bool fRead = false; \ + unsigned int nSerSize = 0; \ + ser_streamplaceholder s; \ + assert(fGetSize||fWrite||fRead); /* suppress warning */ \ + s.nType = nType; \ + s.nVersion = nVersion; \ + {statements} \ + return nSerSize; \ + } \ + template \ + void Serialize(Stream& s, int nType, int nVersion) const \ + { \ + CSerActionSerialize ser_action; \ + const bool fGetSize = false; \ + const bool fWrite = true; \ + const bool fRead = false; \ + unsigned int nSerSize = 0; \ + assert(fGetSize||fWrite||fRead); /* suppress warning */ \ + {statements} \ + } \ + template \ + void Unserialize(Stream& s, int nType, int nVersion) \ + { \ + CSerActionUnserialize ser_action; \ + const bool fGetSize = false; \ + const bool fWrite = false; \ + const bool fRead = true; \ + unsigned int nSerSize = 0; \ + assert(fGetSize||fWrite||fRead); /* suppress warning */ \ + {statements} \ + } + +#define READWRITE(obj) (nSerSize += ::SerReadWrite(s, (obj), nType, nVersion, ser_action)) + + + + + + +// +// Basic types +// +#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(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, 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, 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); } +template inline void Unserialize(Stream& s, bool& a, int, int=0) { char f; READDATA(s, f); a=f; } + + + + + + +// +// Compact size +// size < 253 -- 1 byte +// size <= USHRT_MAX -- 3 bytes (253 + 2 bytes) +// size <= UINT_MAX -- 5 bytes (254 + 4 bytes) +// size > UINT_MAX -- 9 bytes (255 + 8 bytes) +// +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_t); +} + +template +void WriteCompactSize(Stream& os, uint64_t nSize) +{ + if (nSize < 253) + { + unsigned char chSize = nSize; + WRITEDATA(os, chSize); + } + else if (nSize <= std::numeric_limits::max()) + { + unsigned char chSize = 253; + unsigned short xSize = nSize; + WRITEDATA(os, chSize); + WRITEDATA(os, xSize); + } + else if (nSize <= std::numeric_limits::max()) + { + unsigned char chSize = 254; + unsigned int xSize = nSize; + WRITEDATA(os, chSize); + WRITEDATA(os, xSize); + } + else + { + unsigned char chSize = 255; + uint64_t xSize = nSize; + WRITEDATA(os, chSize); + WRITEDATA(os, xSize); + } + return; +} + +template +uint64_t ReadCompactSize(Stream& is) +{ + unsigned char chSize; + READDATA(is, chSize); + uint64_t nSizeRet = 0; + if (chSize < 253) + { + nSizeRet = chSize; + } + else if (chSize == 253) + { + 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_t xSize; + READDATA(is, xSize); + nSizeRet = xSize; + if (nSizeRet < 0x100000000LLu) + throw std::ios_base::failure("non-canonical ReadCompactSize()"); + } + if (nSizeRet > (uint64_t)MAX_SIZE) + throw std::ios_base::failure("ReadCompactSize() : size too large"); + return nSizeRet; +} + +// Variable-length integers: bytes are a MSB base-128 encoding of the number. +// The high bit in each byte signifies whether another digit follows. To make +// the encoding is one-to-one, one is subtracted from all but the last digit. +// Thus, the byte sequence a[] with length len, where all but the last byte +// has bit 128 set, encodes the number: +// +// (a[len-1] & 0x7F) + sum(i=1..len-1, 128^i*((a[len-i-1] & 0x7F)+1)) +// +// Properties: +// * Very small (0-127: 1 byte, 128-16511: 2 bytes, 16512-2113663: 3 bytes) +// * Every integer has exactly one encoding +// * Encoding does not depend on size of original integer type +// * No redundancy: every (infinite) byte sequence corresponds to a list +// of encoded integers. +// +// 0: [0x00] 256: [0x81 0x00] +// 1: [0x01] 16383: [0xFE 0x7F] +// 127: [0x7F] 16384: [0xFF 0x00] +// 128: [0x80 0x00] 16511: [0x80 0xFF 0x7F] +// 255: [0x80 0x7F] 65535: [0x82 0xFD 0x7F] +// 2^32: [0x8E 0xFE 0xFE 0xFF 0x00] + +template +inline unsigned int GetSizeOfVarInt(I n) +{ + int nRet = 0; + while(true) { + nRet++; + if (n <= 0x7F) + break; + n = (n >> 7) - 1; + } + return nRet; +} + +template +void WriteVarInt(Stream& os, I n) +{ + unsigned char tmp[(sizeof(n)*8+6)/7]; + int len=0; + while(true) { + tmp[len] = (n & 0x7F) | (len ? 0x80 : 0x00); + if (n <= 0x7F) + break; + n = (n >> 7) - 1; + len++; + } + do { + WRITEDATA(os, tmp[len]); + } while(len--); +} + +template +I ReadVarInt(Stream& is) +{ + I n = 0; + while(true) { + unsigned char chData; + READDATA(is, chData); + n = (n << 7) | (chData & 0x7F); + if (chData & 0x80) + n++; + else + return n; + } +} + +#define FLATDATA(obj) REF(CFlatData((char*)&(obj), (char*)&(obj) + sizeof(obj))) +#define VARINT(obj) REF(WrapVarInt(REF(obj))) +#define LIMITED_STRING(obj,n) REF(LimitedString< n >(REF(obj))) + +/** Wrapper for serializing arrays and POD. + */ +class CFlatData +{ +protected: + char* pbegin; + char* pend; +public: + CFlatData(void* pbeginIn, void* pendIn) : pbegin((char*)pbeginIn), pend((char*)pendIn) { } + char* begin() { return pbegin; } + const char* begin() const { return pbegin; } + char* end() { return pend; } + const char* end() const { return pend; } + + unsigned int GetSerializeSize(int, int=0) const + { + return pend - pbegin; + } + + template + void Serialize(Stream& s, int, int=0) const + { + s.write(pbegin, pend - pbegin); + } + + template + void Unserialize(Stream& s, int, int=0) + { + s.read(pbegin, pend - pbegin); + } +}; + +template +class CVarInt +{ +protected: + I &n; +public: + CVarInt(I& nIn) : n(nIn) { } + + unsigned int GetSerializeSize(int, int) const { + return GetSizeOfVarInt(n); + } + + template + void Serialize(Stream &s, int, int) const { + WriteVarInt(s, n); + } + + template + void Unserialize(Stream& s, int, int) { + n = ReadVarInt(s); + } +}; + +template +class LimitedString +{ +protected: + std::string& string; +public: + LimitedString(std::string& string) : string(string) {} + + template + void Unserialize(Stream& s, int, int=0) + { + size_t size = ReadCompactSize(s); + if (size > Limit) { + throw std::ios_base::failure("String length limit exceeded"); + } + string.resize(size); + if (size != 0) + s.read((char*)&string[0], size); + } + + template + void Serialize(Stream& s, int, int=0) const + { + WriteCompactSize(s, string.size()); + if (!string.empty()) + s.write((char*)&string[0], string.size()); + } + + unsigned int GetSerializeSize(int, int=0) const + { + return GetSizeOfCompactSize(string.size()) + string.size(); + } +}; + +template +CVarInt WrapVarInt(I& n) { return CVarInt(n); } + +// +// Forward declarations +// + +// string +template unsigned int GetSerializeSize(const std::basic_string& str, int, int=0); +template void Serialize(Stream& os, const std::basic_string& str, int, int=0); +template void Unserialize(Stream& is, std::basic_string& str, int, int=0); + +// vector +template unsigned int GetSerializeSize_impl(const std::vector& v, int nType, int nVersion, const boost::true_type&); +template unsigned int GetSerializeSize_impl(const std::vector& v, int nType, int nVersion, const boost::false_type&); +template inline unsigned int GetSerializeSize(const std::vector& v, int nType, int nVersion); +template void Serialize_impl(Stream& os, const std::vector& v, int nType, int nVersion, const boost::true_type&); +template void Serialize_impl(Stream& os, const std::vector& v, int nType, int nVersion, const boost::false_type&); +template inline void Serialize(Stream& os, const std::vector& v, int nType, int nVersion); +template void Unserialize_impl(Stream& is, std::vector& v, int nType, int nVersion, const boost::true_type&); +template void Unserialize_impl(Stream& is, std::vector& v, int nType, int nVersion, const boost::false_type&); +template inline void Unserialize(Stream& is, std::vector& v, int nType, int nVersion); + +// others derived from vector +extern inline unsigned int GetSerializeSize(const CScript& v, int nType, int nVersion); +template void Serialize(Stream& os, const CScript& v, int nType, int nVersion); +template void Unserialize(Stream& is, CScript& v, int nType, int nVersion); + +// pair +template unsigned int GetSerializeSize(const std::pair& item, int nType, int nVersion); +template void Serialize(Stream& os, const std::pair& item, int nType, int nVersion); +template void Unserialize(Stream& is, std::pair& item, int nType, int nVersion); + +// 3 tuple +template unsigned int GetSerializeSize(const boost::tuple& item, int nType, int nVersion); +template void Serialize(Stream& os, const boost::tuple& item, int nType, int nVersion); +template void Unserialize(Stream& is, boost::tuple& item, int nType, int nVersion); + +// 4 tuple +template unsigned int GetSerializeSize(const boost::tuple& item, int nType, int nVersion); +template void Serialize(Stream& os, const boost::tuple& item, int nType, int nVersion); +template void Unserialize(Stream& is, boost::tuple& item, int nType, int nVersion); + +// map +template unsigned int GetSerializeSize(const std::map& m, int nType, int nVersion); +template void Serialize(Stream& os, const std::map& m, int nType, int nVersion); +template void Unserialize(Stream& is, std::map& m, int nType, int nVersion); + +// set +template unsigned int GetSerializeSize(const std::set& m, int nType, int nVersion); +template void Serialize(Stream& os, const std::set& m, int nType, int nVersion); +template void Unserialize(Stream& is, std::set& m, int nType, int nVersion); + + + + + +// +// If none of the specialized versions above matched, default to calling member function. +// "int nType" is changed to "long nType" to keep from getting an ambiguous overload error. +// The compiler will only cast int to long if none of the other templates matched. +// Thanks to Boost serialization for this idea. +// +template +inline unsigned int GetSerializeSize(const T& a, long nType, int nVersion) +{ + return a.GetSerializeSize((int)nType, nVersion); +} + +template +inline void Serialize(Stream& os, const T& a, long nType, int nVersion) +{ + a.Serialize(os, (int)nType, nVersion); +} + +template +inline void Unserialize(Stream& is, T& a, long nType, int nVersion) +{ + a.Unserialize(is, (int)nType, nVersion); +} + + + + + +// +// string +// +template +unsigned int GetSerializeSize(const std::basic_string& str, int, int) +{ + return GetSizeOfCompactSize(str.size()) + str.size() * sizeof(str[0]); +} + +template +void Serialize(Stream& os, const std::basic_string& str, int, int) +{ + WriteCompactSize(os, str.size()); + if (!str.empty()) + os.write((char*)&str[0], str.size() * sizeof(str[0])); +} + +template +void Unserialize(Stream& is, std::basic_string& str, int, int) +{ + unsigned int nSize = ReadCompactSize(is); + str.resize(nSize); + if (nSize != 0) + is.read((char*)&str[0], nSize * sizeof(str[0])); +} + + + +// +// vector +// +template +unsigned int GetSerializeSize_impl(const std::vector& v, int nType, int nVersion, const boost::true_type&) +{ + return (GetSizeOfCompactSize(v.size()) + v.size() * sizeof(T)); +} + +template +unsigned int GetSerializeSize_impl(const std::vector& v, int nType, int nVersion, const boost::false_type&) +{ + unsigned int nSize = GetSizeOfCompactSize(v.size()); + for (typename std::vector::const_iterator vi = v.begin(); vi != v.end(); ++vi) + nSize += GetSerializeSize((*vi), nType, nVersion); + return nSize; +} + +template +inline unsigned int GetSerializeSize(const std::vector& v, int nType, int nVersion) +{ + return GetSerializeSize_impl(v, nType, nVersion, boost::is_fundamental()); +} + + +template +void Serialize_impl(Stream& os, const std::vector& v, int nType, int nVersion, const boost::true_type&) +{ + WriteCompactSize(os, v.size()); + if (!v.empty()) + os.write((char*)&v[0], v.size() * sizeof(T)); +} + +template +void Serialize_impl(Stream& os, const std::vector& v, int nType, int nVersion, const boost::false_type&) +{ + WriteCompactSize(os, v.size()); + for (typename std::vector::const_iterator vi = v.begin(); vi != v.end(); ++vi) + ::Serialize(os, (*vi), nType, nVersion); +} + +template +inline void Serialize(Stream& os, const std::vector& v, int nType, int nVersion) +{ + Serialize_impl(os, v, nType, nVersion, boost::is_fundamental()); +} + + +template +void Unserialize_impl(Stream& is, std::vector& v, int nType, int nVersion, const boost::true_type&) +{ + // Limit size per read so bogus size value won't cause out of memory + v.clear(); + unsigned int nSize = ReadCompactSize(is); + unsigned int i = 0; + while (i < nSize) + { + unsigned int blk = std::min(nSize - i, (unsigned int)(1 + 4999999 / sizeof(T))); + v.resize(i + blk); + is.read((char*)&v[i], blk * sizeof(T)); + i += blk; + } +} + +template +void Unserialize_impl(Stream& is, std::vector& v, int nType, int nVersion, const boost::false_type&) +{ + v.clear(); + unsigned int nSize = ReadCompactSize(is); + unsigned int i = 0; + unsigned int nMid = 0; + while (nMid < nSize) + { + nMid += 5000000 / sizeof(T); + if (nMid > nSize) + nMid = nSize; + v.resize(nMid); + for (; i < nMid; i++) + Unserialize(is, v[i], nType, nVersion); + } +} + +template +inline void Unserialize(Stream& is, std::vector& v, int nType, int nVersion) +{ + Unserialize_impl(is, v, nType, nVersion, boost::is_fundamental()); +} + + + +// +// others derived from vector +// +inline unsigned int GetSerializeSize(const CScript& v, int nType, int nVersion) +{ + return GetSerializeSize((const std::vector&)v, nType, nVersion); +} + +template +void Serialize(Stream& os, const CScript& v, int nType, int nVersion) +{ + Serialize(os, (const std::vector&)v, nType, nVersion); +} + +template +void Unserialize(Stream& is, CScript& v, int nType, int nVersion) +{ + Unserialize(is, (std::vector&)v, nType, nVersion); +} + + + +// +// pair +// +template +unsigned int GetSerializeSize(const std::pair& item, int nType, int nVersion) +{ + return GetSerializeSize(item.first, nType, nVersion) + GetSerializeSize(item.second, nType, nVersion); +} + +template +void Serialize(Stream& os, const std::pair& item, int nType, int nVersion) +{ + Serialize(os, item.first, nType, nVersion); + Serialize(os, item.second, nType, nVersion); +} + +template +void Unserialize(Stream& is, std::pair& item, int nType, int nVersion) +{ + Unserialize(is, item.first, nType, nVersion); + Unserialize(is, item.second, nType, nVersion); +} + + + +// +// 3 tuple +// +template +unsigned int GetSerializeSize(const boost::tuple& item, int nType, int nVersion) +{ + unsigned int nSize = 0; + nSize += GetSerializeSize(boost::get<0>(item), nType, nVersion); + nSize += GetSerializeSize(boost::get<1>(item), nType, nVersion); + nSize += GetSerializeSize(boost::get<2>(item), nType, nVersion); + return nSize; +} + +template +void Serialize(Stream& os, const boost::tuple& item, int nType, int nVersion) +{ + Serialize(os, boost::get<0>(item), nType, nVersion); + Serialize(os, boost::get<1>(item), nType, nVersion); + Serialize(os, boost::get<2>(item), nType, nVersion); +} + +template +void Unserialize(Stream& is, boost::tuple& item, int nType, int nVersion) +{ + Unserialize(is, boost::get<0>(item), nType, nVersion); + Unserialize(is, boost::get<1>(item), nType, nVersion); + Unserialize(is, boost::get<2>(item), nType, nVersion); +} + + + +// +// 4 tuple +// +template +unsigned int GetSerializeSize(const boost::tuple& item, int nType, int nVersion) +{ + unsigned int nSize = 0; + nSize += GetSerializeSize(boost::get<0>(item), nType, nVersion); + nSize += GetSerializeSize(boost::get<1>(item), nType, nVersion); + nSize += GetSerializeSize(boost::get<2>(item), nType, nVersion); + nSize += GetSerializeSize(boost::get<3>(item), nType, nVersion); + return nSize; +} + +template +void Serialize(Stream& os, const boost::tuple& item, int nType, int nVersion) +{ + Serialize(os, boost::get<0>(item), nType, nVersion); + Serialize(os, boost::get<1>(item), nType, nVersion); + Serialize(os, boost::get<2>(item), nType, nVersion); + Serialize(os, boost::get<3>(item), nType, nVersion); +} + +template +void Unserialize(Stream& is, boost::tuple& item, int nType, int nVersion) +{ + Unserialize(is, boost::get<0>(item), nType, nVersion); + Unserialize(is, boost::get<1>(item), nType, nVersion); + Unserialize(is, boost::get<2>(item), nType, nVersion); + Unserialize(is, boost::get<3>(item), nType, nVersion); +} + + + +// +// map +// +template +unsigned int GetSerializeSize(const std::map& m, int nType, int nVersion) +{ + unsigned int nSize = GetSizeOfCompactSize(m.size()); + for (typename std::map::const_iterator mi = m.begin(); mi != m.end(); ++mi) + nSize += GetSerializeSize((*mi), nType, nVersion); + return nSize; +} + +template +void Serialize(Stream& os, const std::map& m, int nType, int nVersion) +{ + WriteCompactSize(os, m.size()); + for (typename std::map::const_iterator mi = m.begin(); mi != m.end(); ++mi) + Serialize(os, (*mi), nType, nVersion); +} + +template +void Unserialize(Stream& is, std::map& m, int nType, int nVersion) +{ + m.clear(); + unsigned int nSize = ReadCompactSize(is); + typename std::map::iterator mi = m.begin(); + for (unsigned int i = 0; i < nSize; i++) + { + std::pair item; + Unserialize(is, item, nType, nVersion); + mi = m.insert(mi, item); + } +} + + + +// +// set +// +template +unsigned int GetSerializeSize(const std::set& m, int nType, int nVersion) +{ + unsigned int nSize = GetSizeOfCompactSize(m.size()); + for (typename std::set::const_iterator it = m.begin(); it != m.end(); ++it) + nSize += GetSerializeSize((*it), nType, nVersion); + return nSize; +} + +template +void Serialize(Stream& os, const std::set& m, int nType, int nVersion) +{ + WriteCompactSize(os, m.size()); + for (typename std::set::const_iterator it = m.begin(); it != m.end(); ++it) + Serialize(os, (*it), nType, nVersion); +} + +template +void Unserialize(Stream& is, std::set& m, int nType, int nVersion) +{ + m.clear(); + unsigned int nSize = ReadCompactSize(is); + typename std::set::iterator it = m.begin(); + for (unsigned int i = 0; i < nSize; i++) + { + K key; + Unserialize(is, key, nType, nVersion); + it = m.insert(it, key); + } +} + + + +// +// Support for IMPLEMENT_SERIALIZE and READWRITE macro +// +class CSerActionGetSerializeSize { }; +class CSerActionSerialize { }; +class CSerActionUnserialize { }; + +template +inline unsigned int SerReadWrite(Stream& s, const T& obj, int nType, int nVersion, CSerActionGetSerializeSize ser_action) +{ + return ::GetSerializeSize(obj, nType, nVersion); +} + +template +inline unsigned int SerReadWrite(Stream& s, const T& obj, int nType, int nVersion, CSerActionSerialize ser_action) +{ + ::Serialize(s, obj, nType, nVersion); + return 0; +} + +template +inline unsigned int SerReadWrite(Stream& s, T& obj, int nType, int nVersion, CSerActionUnserialize ser_action) +{ + ::Unserialize(s, obj, nType, nVersion); + return 0; +} + +struct ser_streamplaceholder +{ + int nType; + int nVersion; +}; + + + + + + + + + + + +typedef std::vector > CSerializeData; + +/** Double ended buffer combining vector and stream-like interfaces. + * + * >> and << read and write unformatted data using the above serialization templates. + * Fills with data in linear time; some stringstream implementations take N^2 time. + */ +class CDataStream +{ +protected: + typedef CSerializeData vector_type; + vector_type vch; + unsigned int nReadPos; + short state; + short exceptmask; +public: + int nType; + int nVersion; + + typedef vector_type::allocator_type allocator_type; + typedef vector_type::size_type size_type; + typedef vector_type::difference_type difference_type; + typedef vector_type::reference reference; + typedef vector_type::const_reference const_reference; + typedef vector_type::value_type value_type; + typedef vector_type::iterator iterator; + typedef vector_type::const_iterator const_iterator; + typedef vector_type::reverse_iterator reverse_iterator; + + explicit CDataStream(int nTypeIn, int nVersionIn) + { + Init(nTypeIn, nVersionIn); + } + + CDataStream(const_iterator pbegin, const_iterator pend, int nTypeIn, int nVersionIn) : vch(pbegin, pend) + { + Init(nTypeIn, nVersionIn); + } + +#if !defined(_MSC_VER) || _MSC_VER >= 1300 + CDataStream(const char* pbegin, const char* pend, int nTypeIn, int nVersionIn) : vch(pbegin, pend) + { + Init(nTypeIn, nVersionIn); + } +#endif + + CDataStream(const vector_type& vchIn, int nTypeIn, int nVersionIn) : vch(vchIn.begin(), vchIn.end()) + { + Init(nTypeIn, nVersionIn); + } + + CDataStream(const std::vector& vchIn, int nTypeIn, int nVersionIn) : vch(vchIn.begin(), vchIn.end()) + { + Init(nTypeIn, nVersionIn); + } + + CDataStream(const std::vector& vchIn, int nTypeIn, int nVersionIn) : vch((char*)&vchIn.begin()[0], (char*)&vchIn.end()[0]) + { + Init(nTypeIn, nVersionIn); + } + + void Init(int nTypeIn, int nVersionIn) + { + nReadPos = 0; + nType = nTypeIn; + nVersion = nVersionIn; + state = 0; + exceptmask = std::ios::badbit | std::ios::failbit; + } + + CDataStream& operator+=(const CDataStream& b) + { + vch.insert(vch.end(), b.begin(), b.end()); + return *this; + } + + friend CDataStream operator+(const CDataStream& a, const CDataStream& b) + { + CDataStream ret = a; + ret += b; + return (ret); + } + + std::string str() const + { + return (std::string(begin(), end())); + } + + + // + // Vector subset + // + const_iterator begin() const { return vch.begin() + nReadPos; } + iterator begin() { return vch.begin() + nReadPos; } + const_iterator end() const { return vch.end(); } + iterator end() { return vch.end(); } + size_type size() const { return vch.size() - nReadPos; } + bool empty() const { return vch.size() == nReadPos; } + void resize(size_type n, value_type c=0) { vch.resize(n + nReadPos, c); } + void reserve(size_type n) { vch.reserve(n + nReadPos); } + const_reference operator[](size_type pos) const { return vch[pos + nReadPos]; } + reference operator[](size_type pos) { return vch[pos + nReadPos]; } + void clear() { vch.clear(); nReadPos = 0; } + 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, std::vector::const_iterator first, std::vector::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); + } + +#if !defined(_MSC_VER) || _MSC_VER >= 1300 + void insert(iterator it, const char* first, const char* 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); + } +#endif + + iterator erase(iterator it) + { + if (it == vch.begin() + nReadPos) + { + // special case for erasing from the front + if (++nReadPos >= vch.size()) + { + // whenever we reach the end, we take the opportunity to clear the buffer + nReadPos = 0; + return vch.erase(vch.begin(), vch.end()); + } + return vch.begin() + nReadPos; + } + else + return vch.erase(it); + } + + iterator erase(iterator first, iterator last) + { + if (first == vch.begin() + nReadPos) + { + // special case for erasing from the front + if (last == vch.end()) + { + nReadPos = 0; + return vch.erase(vch.begin(), vch.end()); + } + else + { + nReadPos = (last - vch.begin()); + return last; + } + } + else + return vch.erase(first, last); + } + + inline void Compact() + { + vch.erase(vch.begin(), vch.begin() + nReadPos); + nReadPos = 0; + } + + bool Rewind(size_type n) + { + // Rewind by n characters if the buffer hasn't been compacted yet + if (n > nReadPos) + return false; + nReadPos -= n; + return true; + } + + + // + // Stream subset + // + void setstate(short bits, const char* psz) + { + state |= bits; + if (state & exceptmask) + throw std::ios_base::failure(psz); + } + + bool eof() const { return size() == 0; } + bool fail() const { return state & (std::ios::badbit | std::ios::failbit); } + bool good() const { return !eof() && (state == 0); } + void clear(short n) { state = n; } // name conflict with vector clear() + short exceptions() { return exceptmask; } + short exceptions(short mask) { short prev = exceptmask; exceptmask = mask; setstate(0, "CDataStream"); return prev; } + CDataStream* rdbuf() { return this; } + int in_avail() { return size(); } + + void SetType(int n) { nType = n; } + int GetType() { return nType; } + void SetVersion(int n) { nVersion = n; } + int GetVersion() { return nVersion; } + void ReadVersion() { *this >> nVersion; } + void WriteVersion() { *this << nVersion; } + + CDataStream& read(char* pch, int nSize) + { + // Read from the beginning of the buffer + assert(nSize >= 0); + unsigned int nReadPosNext = nReadPos + nSize; + if (nReadPosNext >= vch.size()) + { + if (nReadPosNext > vch.size()) + { + setstate(std::ios::failbit, "CDataStream::read() : end of data"); + memset(pch, 0, nSize); + nSize = vch.size() - nReadPos; + } + memcpy(pch, &vch[nReadPos], nSize); + nReadPos = 0; + vch.clear(); + return (*this); + } + memcpy(pch, &vch[nReadPos], nSize); + nReadPos = nReadPosNext; + return (*this); + } + + CDataStream& ignore(int nSize) + { + // Ignore from the beginning of the buffer + assert(nSize >= 0); + unsigned int nReadPosNext = nReadPos + nSize; + if (nReadPosNext >= vch.size()) + { + if (nReadPosNext > vch.size()) + setstate(std::ios::failbit, "CDataStream::ignore() : end of data"); + nReadPos = 0; + vch.clear(); + return (*this); + } + nReadPos = nReadPosNext; + return (*this); + } + + CDataStream& write(const char* pch, int nSize) + { + // Write to the end of the buffer + assert(nSize >= 0); + vch.insert(vch.end(), pch, pch + nSize); + return (*this); + } + + template + void Serialize(Stream& s, int nType, int nVersion) const + { + // Special case: stream << stream concatenates like stream += stream + if (!vch.empty()) + s.write((char*)&vch[0], vch.size() * sizeof(vch[0])); + } + + template + unsigned int GetSerializeSize(const T& obj) + { + // Tells the size of the object if serialized to this stream + return ::GetSerializeSize(obj, nType, nVersion); + } + + template + CDataStream& operator<<(const T& obj) + { + // Serialize to this stream + ::Serialize(*this, obj, nType, nVersion); + return (*this); + } + + template + CDataStream& operator>>(T& obj) + { + // Unserialize from this stream + ::Unserialize(*this, obj, nType, nVersion); + return (*this); + } + + void GetAndClear(CSerializeData &data) { + data.insert(data.end(), begin(), end()); + clear(); + } +}; + + + + + + + + + + +/** RAII wrapper for FILE*. + * + * Will automatically close the file when it goes out of scope if not null. + * If you're returning the file pointer, return file.release(). + * If you need to close the file early, use file.fclose() instead of fclose(file). + */ +class CAutoFile +{ +protected: + FILE* file; + short state; + short exceptmask; +public: + int nType; + int nVersion; + + CAutoFile(FILE* filenew, int nTypeIn, int nVersionIn) + { + file = filenew; + nType = nTypeIn; + nVersion = nVersionIn; + state = 0; + exceptmask = std::ios::badbit | std::ios::failbit; + } + + ~CAutoFile() + { + fclose(); + } + + void fclose() + { + if (file != NULL && file != stdin && file != stdout && file != stderr) + ::fclose(file); + file = NULL; + } + + FILE* release() { FILE* ret = file; file = NULL; return ret; } + operator FILE*() { return file; } + FILE* operator->() { return file; } + FILE& operator*() { return *file; } + FILE** operator&() { return &file; } + FILE* operator=(FILE* pnew) { return file = pnew; } + bool operator!() { return (file == NULL); } + + + // + // Stream subset + // + void setstate(short bits, const char* psz) + { + state |= bits; + if (state & exceptmask) + throw std::ios_base::failure(psz); + } + + bool fail() const { return state & (std::ios::badbit | std::ios::failbit); } + bool good() const { return state == 0; } + void clear(short n = 0) { state = n; } + short exceptions() { return exceptmask; } + short exceptions(short mask) { short prev = exceptmask; exceptmask = mask; setstate(0, "CAutoFile"); return prev; } + + void SetType(int n) { nType = n; } + int GetType() { return nType; } + void SetVersion(int n) { nVersion = n; } + int GetVersion() { return nVersion; } + void ReadVersion() { *this >> nVersion; } + void WriteVersion() { *this << nVersion; } + + CAutoFile& read(char* pch, size_t nSize) + { + if (!file) + throw std::ios_base::failure("CAutoFile::read : file handle is NULL"); + if (fread(pch, 1, nSize, file) != nSize) + setstate(std::ios::failbit, feof(file) ? "CAutoFile::read : end of file" : "CAutoFile::read : fread failed"); + return (*this); + } + + CAutoFile& write(const char* pch, size_t nSize) + { + if (!file) + throw std::ios_base::failure("CAutoFile::write : file handle is NULL"); + if (fwrite(pch, 1, nSize, file) != nSize) + setstate(std::ios::failbit, "CAutoFile::write : write failed"); + return (*this); + } + + template + unsigned int GetSerializeSize(const T& obj) + { + // Tells the size of the object if serialized to this stream + return ::GetSerializeSize(obj, nType, nVersion); + } + + template + CAutoFile& operator<<(const T& obj) + { + // Serialize to this stream + if (!file) + throw std::ios_base::failure("CAutoFile::operator<< : file handle is NULL"); + ::Serialize(*this, obj, nType, nVersion); + return (*this); + } + + template + CAutoFile& operator>>(T& obj) + { + // Unserialize from this stream + if (!file) + throw std::ios_base::failure("CAutoFile::operator>> : file handle is NULL"); + ::Unserialize(*this, obj, nType, nVersion); + return (*this); + } +}; + +/** Wrapper around a FILE* that implements a ring buffer to + * deserialize from. It guarantees the ability to rewind + * a given number of bytes. */ +class CBufferedFile +{ +private: + FILE *src; // source file + 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; + short exceptmask; + +protected: + void setstate(short bits, const char *psz) { + state |= bits; + if (state & exceptmask) + throw std::ios_base::failure(psz); + } + + // read data from the source to fill the buffer + bool Fill() { + unsigned int pos = nSrcPos % vchBuf.size(); + unsigned int readNow = vchBuf.size() - pos; + unsigned int nAvail = vchBuf.size() - (nSrcPos - nReadPos) - nRewind; + if (nAvail < readNow) + readNow = nAvail; + if (readNow == 0) + return false; + size_t read = fread((void*)&vchBuf[pos], 1, readNow, src); + if (read == 0) { + setstate(std::ios_base::failbit, feof(src) ? "CBufferedFile::Fill : end of file" : "CBufferedFile::Fill : fread failed"); + return false; + } else { + nSrcPos += read; + return true; + } + } + +public: + int nType; + int nVersion; + + 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) { + } + + // check whether no error occurred + bool good() const { + return state == 0; + } + + // check whether we're at the end of the source file + bool eof() const { + return nReadPos == nSrcPos && feof(src); + } + + // read a number of bytes + CBufferedFile& read(char *pch, size_t nSize) { + if (nSize + nReadPos > nReadLimit) + throw std::ios_base::failure("Read attempted past buffer limit"); + if (nSize + nRewind > vchBuf.size()) + throw std::ios_base::failure("Read larger than buffer size"); + while (nSize > 0) { + if (nReadPos == nSrcPos) + Fill(); + unsigned int pos = nReadPos % vchBuf.size(); + size_t nNow = nSize; + if (nNow + pos > vchBuf.size()) + nNow = vchBuf.size() - pos; + if (nNow + nReadPos > nSrcPos) + nNow = nSrcPos - nReadPos; + memcpy(pch, &vchBuf[pos], nNow); + nReadPos += nNow; + pch += nNow; + nSize -= nNow; + } + return (*this); + } + + // return the current reading position + uint64_t GetPos() { + return nReadPos; + } + + // rewind to a given reading position + bool SetPos(uint64_t nPos) { + nReadPos = nPos; + if (nReadPos + nRewind < nSrcPos) { + nReadPos = nSrcPos - nRewind; + return false; + } else if (nReadPos > nSrcPos) { + nReadPos = nSrcPos; + return false; + } else { + return true; + } + } + + bool Seek(uint64_t nPos) { + long nLongPos = nPos; + if (nPos != (uint64_t)nLongPos) + return false; + if (fseek(src, nLongPos, SEEK_SET)) + return false; + nLongPos = ftell(src); + nSrcPos = nLongPos; + nReadPos = nLongPos; + state = 0; + return true; + } + + // prevent reading beyond a certain position + // no argument removes the limit + bool SetLimit(uint64_t nPos = (uint64_t)(-1)) { + if (nPos < nReadPos) + return false; + nReadLimit = nPos; + return true; + } + + template + CBufferedFile& operator>>(T& obj) { + // Unserialize from this stream + ::Unserialize(*this, obj, nType, nVersion); + return (*this); + } + + // search for a given byte in the stream, and remain positioned on it + void FindByte(char ch) { + while (true) { + if (nReadPos == nSrcPos) + Fill(); + if (vchBuf[nReadPos % vchBuf.size()] == ch) + break; + nReadPos++; + } + } +}; + +#endif diff --git a/src/sync.cpp b/src/sync.cpp index 52e6b07..4c4c5b2 100644 --- a/src/sync.cpp +++ b/src/sync.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/sync.cpp~ b/src/sync.cpp~ new file mode 100644 index 0000000..79d5f0c --- /dev/null +++ b/src/sync.cpp~ @@ -0,0 +1,149 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "sync.h" + +#include "util.h" + +#include + +#ifdef DEBUG_LOCKCONTENTION +void PrintLockContention(const char* pszName, const char* pszFile, int nLine) +{ + LogPrintf("LOCKCONTENTION: %s\n", pszName); + LogPrintf("Locker: %s:%d\n", pszFile, nLine); +} +#endif /* DEBUG_LOCKCONTENTION */ + +#ifdef DEBUG_LOCKORDER +// +// Early deadlock detection. +// Problem being solved: +// Thread 1 locks A, then B, then C +// Thread 2 locks D, then C, then A +// --> may result in deadlock between the two threads, depending on when they run. +// Solution implemented here: +// Keep track of pairs of locks: (A before B), (A before C), etc. +// Complain if any thread tries to lock in a different order. +// + +struct CLockLocation +{ + CLockLocation(const char* pszName, const char* pszFile, int nLine) + { + mutexName = pszName; + sourceFile = pszFile; + sourceLine = nLine; + } + + std::string ToString() const + { + return mutexName+" "+sourceFile+":"+itostr(sourceLine); + } + + std::string MutexName() const { return mutexName; } + +private: + std::string mutexName; + std::string sourceFile; + int sourceLine; +}; + +typedef std::vector< std::pair > LockStack; + +static boost::mutex dd_mutex; +static std::map, LockStack> lockorders; +static boost::thread_specific_ptr lockstack; + + +static void potential_deadlock_detected(const std::pair& mismatch, const LockStack& s1, const LockStack& s2) +{ + LogPrintf("POTENTIAL DEADLOCK DETECTED\n"); + LogPrintf("Previous lock order was:\n"); + BOOST_FOREACH(const PAIRTYPE(void*, CLockLocation)& i, s2) + { + if (i.first == mismatch.first) LogPrintf(" (1)"); + if (i.first == mismatch.second) LogPrintf(" (2)"); + LogPrintf(" %s\n", i.second.ToString()); + } + LogPrintf("Current lock order is:\n"); + BOOST_FOREACH(const PAIRTYPE(void*, CLockLocation)& i, s1) + { + if (i.first == mismatch.first) LogPrintf(" (1)"); + if (i.first == mismatch.second) LogPrintf(" (2)"); + LogPrintf(" %s\n", i.second.ToString()); + } +} + +static void push_lock(void* c, const CLockLocation& locklocation, bool fTry) +{ + if (lockstack.get() == NULL) + lockstack.reset(new LockStack); + + LogPrint("lock", "Locking: %s\n", locklocation.ToString()); + dd_mutex.lock(); + + (*lockstack).push_back(std::make_pair(c, locklocation)); + + if (!fTry) { + BOOST_FOREACH(const PAIRTYPE(void*, CLockLocation)& i, (*lockstack)) { + if (i.first == c) break; + + std::pair p1 = std::make_pair(i.first, c); + if (lockorders.count(p1)) + continue; + lockorders[p1] = (*lockstack); + + std::pair p2 = std::make_pair(c, i.first); + if (lockorders.count(p2)) + { + potential_deadlock_detected(p1, lockorders[p2], lockorders[p1]); + break; + } + } + } + dd_mutex.unlock(); +} + +static void pop_lock() +{ + if (fDebug) + { + const CLockLocation& locklocation = (*lockstack).rbegin()->second; + LogPrint("lock", "Unlocked: %s\n", locklocation.ToString()); + } + dd_mutex.lock(); + (*lockstack).pop_back(); + dd_mutex.unlock(); +} + +void EnterCritical(const char* pszName, const char* pszFile, int nLine, void* cs, bool fTry) +{ + push_lock(cs, CLockLocation(pszName, pszFile, nLine), fTry); +} + +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 1bee066..fe944a6 100644 --- a/src/sync.h +++ b/src/sync.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/sync.h~ b/src/sync.h~ new file mode 100644 index 0000000..d312caa --- /dev/null +++ b/src/sync.h~ @@ -0,0 +1,262 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_SYNC_H +#define BITMARK_SYNC_H + +#include "threadsafety.h" + +#include +#include +#include +#include + + +//////////////////////////////////////////////// +// // +// THE SIMPLE DEFINITON, EXCLUDING DEBUG CODE // +// // +//////////////////////////////////////////////// + +/* + + + +CCriticalSection mutex; + boost::recursive_mutex mutex; + +LOCK(mutex); + boost::unique_lock criticalblock(mutex); + +LOCK2(mutex1, mutex2); + boost::unique_lock criticalblock1(mutex1); + boost::unique_lock criticalblock2(mutex2); + +TRY_LOCK(mutex, name); + boost::unique_lock name(mutex, boost::try_to_lock_t); + +ENTER_CRITICAL_SECTION(mutex); // no RAII + mutex.lock(); + +LEAVE_CRITICAL_SECTION(mutex); // no RAII + mutex.unlock(); + + + + */ + + + +/////////////////////////////// +// // +// THE ACTUAL IMPLEMENTATION // +// // +/////////////////////////////// + +// Template mixin that adds -Wthread-safety locking annotations to a +// subset of the mutex API. +template +class LOCKABLE AnnotatedMixin : public PARENT +{ +public: + void lock() EXCLUSIVE_LOCK_FUNCTION() + { + PARENT::lock(); + } + + void unlock() UNLOCK_FUNCTION() + { + PARENT::unlock(); + } + + bool try_lock() EXCLUSIVE_TRYLOCK_FUNCTION(true) + { + return PARENT::try_lock(); + } +}; + +/** Wrapped boost mutex: supports recursive locking, but no waiting */ +// TODO: We should move away from using the recursive lock by default. +typedef AnnotatedMixin CCriticalSection; + +/** Wrapped boost mutex: supports waiting but not recursive locking */ +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); +#endif + +/** Wrapper around boost::unique_lock */ +template +class CMutexLock +{ +private: + boost::unique_lock lock; + + void Enter(const char* pszName, const char* pszFile, int nLine) + { + EnterCritical(pszName, pszFile, nLine, (void*)(lock.mutex())); +#ifdef DEBUG_LOCKCONTENTION + if (!lock.try_lock()) + { + PrintLockContention(pszName, pszFile, nLine); +#endif + lock.lock(); +#ifdef DEBUG_LOCKCONTENTION + } +#endif + } + + bool TryEnter(const char* pszName, const char* pszFile, int nLine) + { + EnterCritical(pszName, pszFile, nLine, (void*)(lock.mutex()), true); + lock.try_lock(); + if (!lock.owns_lock()) + LeaveCritical(); + return lock.owns_lock(); + } + +public: + CMutexLock(Mutex& mutexIn, const char* pszName, const char* pszFile, int nLine, bool fTry = false) : lock(mutexIn, boost::defer_lock) + { + if (fTry) + TryEnter(pszName, pszFile, nLine); + else + Enter(pszName, pszFile, nLine); + } + + ~CMutexLock() + { + if (lock.owns_lock()) + LeaveCritical(); + } + + operator bool() + { + return lock.owns_lock(); + } +}; + +typedef CMutexLock CCriticalBlock; + +#define LOCK(cs) CCriticalBlock criticalblock(cs, #cs, __FILE__, __LINE__) +#define LOCK2(cs1,cs2) CCriticalBlock criticalblock1(cs1, #cs1, __FILE__, __LINE__),criticalblock2(cs2, #cs2, __FILE__, __LINE__) +#define TRY_LOCK(cs,name) CCriticalBlock name(cs, #cs, __FILE__, __LINE__, true) + +#define ENTER_CRITICAL_SECTION(cs) \ + { \ + EnterCritical(#cs, __FILE__, __LINE__, (void*)(&cs)); \ + (cs).lock(); \ + } + +#define LEAVE_CRITICAL_SECTION(cs) \ + { \ + (cs).unlock(); \ + LeaveCritical(); \ + } + +class CSemaphore +{ +private: + boost::condition_variable condition; + boost::mutex mutex; + int value; + +public: + CSemaphore(int init) : value(init) {} + + void wait() { + boost::unique_lock lock(mutex); + while (value < 1) { + condition.wait(lock); + } + value--; + } + + bool try_wait() { + boost::unique_lock lock(mutex); + if (value < 1) + return false; + value--; + return true; + } + + void post() { + { + boost::unique_lock lock(mutex); + value++; + } + condition.notify_one(); + } +}; + +/** RAII-style semaphore lock */ +class CSemaphoreGrant +{ +private: + CSemaphore *sem; + bool fHaveGrant; + +public: + void Acquire() { + if (fHaveGrant) + return; + sem->wait(); + fHaveGrant = true; + } + + void Release() { + if (!fHaveGrant) + return; + sem->post(); + fHaveGrant = false; + } + + bool TryAcquire() { + if (!fHaveGrant && sem->try_wait()) + fHaveGrant = true; + return fHaveGrant; + } + + void MoveTo(CSemaphoreGrant &grant) { + grant.Release(); + grant.sem = sem; + grant.fHaveGrant = fHaveGrant; + sem = NULL; + fHaveGrant = false; + } + + CSemaphoreGrant() : sem(NULL), fHaveGrant(false) {} + + CSemaphoreGrant(CSemaphore &sema, bool fTry = false) : sem(&sema), fHaveGrant(false) { + if (fTry) + TryAcquire(); + else + Acquire(); + } + + ~CSemaphoreGrant() { + Release(); + } + + operator bool() { + return fHaveGrant; + } +}; +#endif + diff --git a/src/test/Checkpoints_tests.cpp b/src/test/Checkpoints_tests.cpp index 83ed0dd..f20f227 100644 --- a/src/test/Checkpoints_tests.cpp +++ b/src/test/Checkpoints_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/Checkpoints_tests.cpp~ b/src/test/Checkpoints_tests.cpp~ new file mode 100644 index 0000000..9411802 --- /dev/null +++ b/src/test/Checkpoints_tests.cpp~ @@ -0,0 +1,39 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "checkpoints.h" + +#include "uint256.h" + +#include + +using namespace std; + +BOOST_AUTO_TEST_SUITE(Checkpoints_tests) + +BOOST_AUTO_TEST_CASE(sanity) +{ + uint256 p11111 = uint256("0x0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d"); + uint256 p134444 = uint256("0x00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe"); + BOOST_CHECK(Checkpoints::CheckBlock(11111, p11111)); + BOOST_CHECK(Checkpoints::CheckBlock(134444, p134444)); + + + // Wrong hashes at checkpoints should fail: + BOOST_CHECK(!Checkpoints::CheckBlock(11111, p134444)); + BOOST_CHECK(!Checkpoints::CheckBlock(134444, p11111)); + + // ... but any hash not at a checkpoint should succeed: + BOOST_CHECK(Checkpoints::CheckBlock(11111+1, p134444)); + BOOST_CHECK(Checkpoints::CheckBlock(134444+1, p11111)); + + BOOST_CHECK(Checkpoints::GetTotalBlocksEstimate() >= 134444); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/DoS_tests.cpp b/src/test/DoS_tests.cpp index 864bfb6..2c258a5 100644 --- a/src/test/DoS_tests.cpp +++ b/src/test/DoS_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/DoS_tests.cpp~ b/src/test/DoS_tests.cpp~ new file mode 100644 index 0000000..609ea12 --- /dev/null +++ b/src/test/DoS_tests.cpp~ @@ -0,0 +1,331 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "bignum.h" +#include "keystore.h" +#include "main.h" +#include "net.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 CTransaction& tx, NodeId peer); +extern void EraseOrphansFor(NodeId peer); +extern unsigned int LimitOrphanTxSize(unsigned int nMaxOrphans); +extern std::map mapOrphanTransactions; +extern std::map > mapOrphanTransactionsByPrev; + +CService ip(uint32_t i) +{ + struct in_addr s; + s.s_addr = i; + return CService(CNetAddr(s), Params().GetDefaultPort()); +} + +BOOST_AUTO_TEST_SUITE(DoS_tests) + +BOOST_AUTO_TEST_CASE(DoS_banning) +{ + CNode::ClearBanned(); + CAddress addr1(ip(0xa0b0c001)); + CNode dummyNode1(INVALID_SOCKET, addr1, "", true); + 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.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 + Misbehaving(dummyNode2.GetId(), 50); + SendMessages(&dummyNode2, false); + BOOST_CHECK(CNode::IsBanned(addr2)); +} + +BOOST_AUTO_TEST_CASE(DoS_banscore) +{ + CNode::ClearBanned(); + mapArgs["-banscore"] = "111"; // because 11 is my favorite number + CAddress addr1(ip(0xa0b0c001)); + CNode dummyNode1(INVALID_SOCKET, addr1, "", true); + dummyNode1.nVersion = 1; + Misbehaving(dummyNode1.GetId(), 100); + SendMessages(&dummyNode1, false); + BOOST_CHECK(!CNode::IsBanned(addr1)); + Misbehaving(dummyNode1.GetId(), 10); + SendMessages(&dummyNode1, false); + BOOST_CHECK(!CNode::IsBanned(addr1)); + Misbehaving(dummyNode1.GetId(), 1); + SendMessages(&dummyNode1, false); + BOOST_CHECK(CNode::IsBanned(addr1)); + mapArgs.erase("-banscore"); +} + +BOOST_AUTO_TEST_CASE(DoS_bantime) +{ + CNode::ClearBanned(); + int64_t nStartTime = GetTime(); + SetMockTime(nStartTime); // Overrides future calls to GetTime() + + CAddress addr(ip(0xa0b0c001)); + CNode dummyNode(INVALID_SOCKET, addr, "", true); + dummyNode.nVersion = 1; + + Misbehaving(dummyNode.GetId(), 100); + SendMessages(&dummyNode, false); + BOOST_CHECK(CNode::IsBanned(addr)); + + SetMockTime(nStartTime+60*60); + BOOST_CHECK(CNode::IsBanned(addr)); + + SetMockTime(nStartTime+60*60*24+1); + BOOST_CHECK(!CNode::IsBanned(addr)); +} + +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_t deltaTime = time2-time1; + + CBigNum required; + required.SetCompact(ComputeMinWork(nbits1, deltaTime)); + CBigNum have; + have.SetCompact(nbits2); + return (have <= required); +} + +BOOST_AUTO_TEST_CASE(DoS_checknbits) +{ + using namespace boost::assign; // for 'map_list_of()' + + // Timestamps,nBits from the bitmark block chain. + // These are the block-chain checkpoint blocks + typedef std::map BlockData; + BlockData chainData = + map_list_of(1239852051,486604799)(1262749024,486594666) + (1279305360,469854461)(1280200847,469830746)(1281678674,469809688) + (1296207707,453179945)(1302624061,453036989)(1309640330,437004818) + (1313172719,436789733); + + // Make sure CheckNBits considers every combination of block-chain-lock-in-points + // "sane": + BOOST_FOREACH(const BlockData::value_type& i, chainData) + { + BOOST_FOREACH(const BlockData::value_type& j, chainData) + { + BOOST_CHECK(CheckNBits(i.second, i.first, j.second, j.first)); + } + } + + // Test a couple of insane combinations: + BlockData::value_type firstcheck = *(chainData.begin()); + BlockData::value_type lastcheck = *(chainData.rbegin()); + + // First checkpoint difficulty at or a while after the last checkpoint time should fail when + // compared to last checkpoint + BOOST_CHECK(!CheckNBits(firstcheck.second, lastcheck.first+60*10, lastcheck.second, lastcheck.first)); + BOOST_CHECK(!CheckNBits(firstcheck.second, lastcheck.first+60*60*24*14, lastcheck.second, lastcheck.first)); + + // ... but OK if enough time passed for difficulty to adjust downward: + BOOST_CHECK(CheckNBits(firstcheck.second, lastcheck.first+60*60*24*365*4, lastcheck.second, lastcheck.first)); +} + +CTransaction RandomOrphan() +{ + std::map::iterator it; + it = mapOrphanTransactions.lower_bound(GetRandHash()); + if (it == mapOrphanTransactions.end()) + it = mapOrphanTransactions.begin(); + return it->second; +} + +BOOST_AUTO_TEST_CASE(DoS_mapOrphans) +{ + CKey key; + key.MakeNewKey(true); + CBasicKeyStore keystore; + keystore.AddKey(key); + + // 50 orphan transactions: + for (int i = 0; i < 50; i++) + { + CTransaction tx; + tx.vin.resize(1); + tx.vin[0].prevout.n = 0; + tx.vin[0].prevout.hash = GetRandHash(); + tx.vin[0].scriptSig << OP_1; + tx.vout.resize(1); + tx.vout[0].nValue = 1*CENT; + tx.vout[0].scriptPubKey.SetDestination(key.GetPubKey().GetID()); + + AddOrphanTx(tx, i); + } + + // ... and 50 that depend on other orphans: + for (int i = 0; i < 50; i++) + { + CTransaction txPrev = RandomOrphan(); + + CTransaction tx; + tx.vin.resize(1); + tx.vin[0].prevout.n = 0; + tx.vin[0].prevout.hash = txPrev.GetHash(); + tx.vout.resize(1); + tx.vout[0].nValue = 1*CENT; + tx.vout[0].scriptPubKey.SetDestination(key.GetPubKey().GetID()); + SignSignature(keystore, txPrev, tx, 0); + + AddOrphanTx(tx, i); + } + + // This really-big orphan should be ignored: + for (int i = 0; i < 10; i++) + { + CTransaction txPrev = RandomOrphan(); + + CTransaction tx; + tx.vout.resize(1); + tx.vout[0].nValue = 1*CENT; + tx.vout[0].scriptPubKey.SetDestination(key.GetPubKey().GetID()); + tx.vin.resize(500); + for (unsigned int j = 0; j < tx.vin.size(); j++) + { + tx.vin[j].prevout.n = j; + tx.vin[j].prevout.hash = txPrev.GetHash(); + } + SignSignature(keystore, txPrev, tx, 0); + // Re-use same signature for other inputs + // (they don't have to be valid for this test) + for (unsigned int j = 1; j < tx.vin.size(); j++) + tx.vin[j].scriptSig = tx.vin[0].scriptSig; + + BOOST_CHECK(!AddOrphanTx(tx, i)); + } + + // Test EraseOrphansFor: + for (NodeId i = 0; i < 3; i++) + { + size_t sizeBefore = mapOrphanTransactions.size(); + EraseOrphansFor(i); + BOOST_CHECK(mapOrphanTransactions.size() < sizeBefore); + } + + // Test LimitOrphanTxSize() function: + LimitOrphanTxSize(40); + BOOST_CHECK(mapOrphanTransactions.size() <= 40); + LimitOrphanTxSize(10); + BOOST_CHECK(mapOrphanTransactions.size() <= 10); + LimitOrphanTxSize(0); + BOOST_CHECK(mapOrphanTransactions.empty()); + BOOST_CHECK(mapOrphanTransactionsByPrev.empty()); +} + +BOOST_AUTO_TEST_CASE(DoS_checkSig) +{ + // Test signature caching code (see key.cpp Verify() methods) + + CKey key; + key.MakeNewKey(true); + CBasicKeyStore keystore; + keystore.AddKey(key); + unsigned int flags = SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC; + + // 100 orphan transactions: + static const int NPREV=100; + CTransaction orphans[NPREV]; + for (int i = 0; i < NPREV; i++) + { + CTransaction& tx = orphans[i]; + tx.vin.resize(1); + tx.vin[0].prevout.n = 0; + tx.vin[0].prevout.hash = GetRandHash(); + tx.vin[0].scriptSig << OP_1; + tx.vout.resize(1); + tx.vout[0].nValue = 1*CENT; + tx.vout[0].scriptPubKey.SetDestination(key.GetPubKey().GetID()); + + AddOrphanTx(tx, 0); + } + + // Create a transaction that depends on orphans: + CTransaction tx; + tx.vout.resize(1); + tx.vout[0].nValue = 1*CENT; + tx.vout[0].scriptPubKey.SetDestination(key.GetPubKey().GetID()); + tx.vin.resize(NPREV); + for (unsigned int j = 0; j < tx.vin.size(); j++) + { + tx.vin[j].prevout.n = 0; + tx.vin[j].prevout.hash = orphans[j].GetHash(); + } + // Creating signatures primes the cache: + boost::posix_time::ptime mst1 = boost::posix_time::microsec_clock::local_time(); + for (unsigned int j = 0; j < tx.vin.size(); j++) + BOOST_CHECK(SignSignature(keystore, orphans[j], tx, j)); + boost::posix_time::ptime mst2 = boost::posix_time::microsec_clock::local_time(); + boost::posix_time::time_duration msdiff = mst2 - mst1; + long nOneValidate = msdiff.total_milliseconds(); + if (fDebug) printf("DoS_Checksig sign: %ld\n", nOneValidate); + + // ... now validating repeatedly should be quick: + // 2.8GHz machine, -g build: Sign takes ~760ms, + // uncached Verify takes ~250ms, cached Verify takes ~50ms + // (for 100 single-signature inputs) + mst1 = boost::posix_time::microsec_clock::local_time(); + for (unsigned int i = 0; i < 5; i++) + for (unsigned int j = 0; j < tx.vin.size(); j++) + BOOST_CHECK(VerifySignature(CCoins(orphans[j], MEMPOOL_HEIGHT), tx, j, flags, SIGHASH_ALL)); + mst2 = boost::posix_time::microsec_clock::local_time(); + msdiff = mst2 - mst1; + long nManyValidate = msdiff.total_milliseconds(); + if (fDebug) printf("DoS_Checksig five: %ld\n", nManyValidate); + + BOOST_CHECK_MESSAGE(nManyValidate < nOneValidate, "Signature cache timing failed"); + + // Empty a signature, validation should fail: + CScript save = tx.vin[0].scriptSig; + tx.vin[0].scriptSig = CScript(); + BOOST_CHECK(!VerifySignature(CCoins(orphans[0], MEMPOOL_HEIGHT), tx, 0, flags, SIGHASH_ALL)); + tx.vin[0].scriptSig = save; + + // Swap signatures, validation should fail: + std::swap(tx.vin[0].scriptSig, tx.vin[1].scriptSig); + BOOST_CHECK(!VerifySignature(CCoins(orphans[0], MEMPOOL_HEIGHT), tx, 0, flags, SIGHASH_ALL)); + BOOST_CHECK(!VerifySignature(CCoins(orphans[1], MEMPOOL_HEIGHT), tx, 1, flags, SIGHASH_ALL)); + std::swap(tx.vin[0].scriptSig, tx.vin[1].scriptSig); + + // Exercise -maxsigcachesize code: + mapArgs["-maxsigcachesize"] = "10"; + // Generate a new, different signature for vin[0] to trigger cache clear: + CScript oldSig = tx.vin[0].scriptSig; + BOOST_CHECK(SignSignature(keystore, orphans[0], tx, 0)); + BOOST_CHECK(tx.vin[0].scriptSig != oldSig); + for (unsigned int j = 0; j < tx.vin.size(); j++) + BOOST_CHECK(VerifySignature(CCoins(orphans[j], MEMPOOL_HEIGHT), tx, j, flags, SIGHASH_ALL)); + mapArgs.erase("-maxsigcachesize"); + + LimitOrphanTxSize(0); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/accounting_tests.cpp b/src/test/accounting_tests.cpp index 2b63a6d..ac1bb5f 100644 --- a/src/test/accounting_tests.cpp +++ b/src/test/accounting_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/accounting_tests.cpp~ b/src/test/accounting_tests.cpp~ new file mode 100644 index 0000000..37686c5 --- /dev/null +++ b/src/test/accounting_tests.cpp~ @@ -0,0 +1,132 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +#include +#include + +extern CWallet* pwalletMain; + +BOOST_AUTO_TEST_SUITE(accounting_tests) + +static void +GetResults(CWalletDB& walletdb, std::map& results) +{ + std::list aes; + + results.clear(); + BOOST_CHECK(walletdb.ReorderTransactions(pwalletMain) == DB_LOAD_OK); + walletdb.ListAccountCreditDebit("", aes); + BOOST_FOREACH(CAccountingEntry& ae, aes) + { + results[ae.nOrderPos] = ae; + } +} + +BOOST_AUTO_TEST_CASE(acc_orderupgrade) +{ + CWalletDB walletdb(pwalletMain->strWalletFile); + std::vector vpwtx; + CWalletTx wtx; + CAccountingEntry ae; + std::map results; + + LOCK(pwalletMain->cs_wallet); + + ae.strAccount = ""; + ae.nCreditDebit = 1; + ae.nTime = 1333333333; + ae.strOtherAccount = "b"; + ae.strComment = ""; + walletdb.WriteAccountingEntry(ae); + + wtx.mapValue["comment"] = "z"; + pwalletMain->AddToWallet(wtx); + vpwtx.push_back(&pwalletMain->mapWallet[wtx.GetHash()]); + vpwtx[0]->nTimeReceived = (unsigned int)1333333335; + vpwtx[0]->nOrderPos = -1; + + ae.nTime = 1333333336; + ae.strOtherAccount = "c"; + walletdb.WriteAccountingEntry(ae); + + GetResults(walletdb, results); + + BOOST_CHECK(pwalletMain->nOrderPosNext == 3); + BOOST_CHECK(2 == results.size()); + BOOST_CHECK(results[0].nTime == 1333333333); + BOOST_CHECK(results[0].strComment.empty()); + BOOST_CHECK(1 == vpwtx[0]->nOrderPos); + BOOST_CHECK(results[2].nTime == 1333333336); + BOOST_CHECK(results[2].strOtherAccount == "c"); + + + ae.nTime = 1333333330; + ae.strOtherAccount = "d"; + ae.nOrderPos = pwalletMain->IncOrderPosNext(); + walletdb.WriteAccountingEntry(ae); + + GetResults(walletdb, results); + + BOOST_CHECK(results.size() == 3); + BOOST_CHECK(pwalletMain->nOrderPosNext == 4); + BOOST_CHECK(results[0].nTime == 1333333333); + BOOST_CHECK(1 == vpwtx[0]->nOrderPos); + BOOST_CHECK(results[2].nTime == 1333333336); + BOOST_CHECK(results[3].nTime == 1333333330); + BOOST_CHECK(results[3].strComment.empty()); + + + wtx.mapValue["comment"] = "y"; + --wtx.nLockTime; // Just to change the hash :) + pwalletMain->AddToWallet(wtx); + vpwtx.push_back(&pwalletMain->mapWallet[wtx.GetHash()]); + vpwtx[1]->nTimeReceived = (unsigned int)1333333336; + + wtx.mapValue["comment"] = "x"; + --wtx.nLockTime; // Just to change the hash :) + pwalletMain->AddToWallet(wtx); + vpwtx.push_back(&pwalletMain->mapWallet[wtx.GetHash()]); + vpwtx[2]->nTimeReceived = (unsigned int)1333333329; + vpwtx[2]->nOrderPos = -1; + + GetResults(walletdb, results); + + BOOST_CHECK(results.size() == 3); + BOOST_CHECK(pwalletMain->nOrderPosNext == 6); + BOOST_CHECK(0 == vpwtx[2]->nOrderPos); + BOOST_CHECK(results[1].nTime == 1333333333); + BOOST_CHECK(2 == vpwtx[0]->nOrderPos); + BOOST_CHECK(results[3].nTime == 1333333336); + BOOST_CHECK(results[4].nTime == 1333333330); + BOOST_CHECK(results[4].strComment.empty()); + BOOST_CHECK(5 == vpwtx[1]->nOrderPos); + + + ae.nTime = 1333333334; + ae.strOtherAccount = "e"; + ae.nOrderPos = -1; + walletdb.WriteAccountingEntry(ae); + + GetResults(walletdb, results); + + BOOST_CHECK(results.size() == 4); + BOOST_CHECK(pwalletMain->nOrderPosNext == 7); + BOOST_CHECK(0 == vpwtx[2]->nOrderPos); + BOOST_CHECK(results[1].nTime == 1333333333); + BOOST_CHECK(2 == vpwtx[0]->nOrderPos); + BOOST_CHECK(results[3].nTime == 1333333336); + BOOST_CHECK(results[3].strComment.empty()); + BOOST_CHECK(results[4].nTime == 1333333330); + BOOST_CHECK(results[4].strComment.empty()); + BOOST_CHECK(results[5].nTime == 1333333334); + BOOST_CHECK(6 == vpwtx[1]->nOrderPos); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/alert_tests.cpp b/src/test/alert_tests.cpp index 028bb8c..eaca034 100644 --- a/src/test/alert_tests.cpp +++ b/src/test/alert_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2013-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/alert_tests.cpp~ b/src/test/alert_tests.cpp~ new file mode 100644 index 0000000..3b8725d --- /dev/null +++ b/src/test/alert_tests.cpp~ @@ -0,0 +1,184 @@ +// Original Code: Copyright (c) 2013-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "alert.h" +#include "data/alertTests.raw.h" + +#include "serialize.h" +#include "util.h" +#include "version.h" + +#include + +#include +#include +#include + +#if 0 +// +// alertTests contains 7 alerts, generated with this code: +// (SignAndSave code not shown, alert signing key is secret) +// +{ + CAlert alert; + alert.nRelayUntil = 60; + alert.nExpiration = 24 * 60 * 60; + alert.nID = 1; + alert.nCancel = 0; // cancels previous messages up to this ID number + alert.nMinVer = 0; // These versions are protocol versions + alert.nMaxVer = 999001; + alert.nPriority = 1; + alert.strComment = "Alert comment"; + alert.strStatusBar = "Alert 1"; + + SignAndSave(alert, "test/alertTests"); + + alert.setSubVer.insert(std::string("/Satoshi:0.1.0/")); + alert.strStatusBar = "Alert 1 for Satoshi 0.1.0"; + SignAndSave(alert, "test/alertTests"); + + alert.setSubVer.insert(std::string("/Satoshi:0.2.0/")); + alert.strStatusBar = "Alert 1 for Satoshi 0.1.0, 0.2.0"; + SignAndSave(alert, "test/alertTests"); + + alert.setSubVer.clear(); + ++alert.nID; + alert.nCancel = 1; + alert.nPriority = 100; + alert.strStatusBar = "Alert 2, cancels 1"; + SignAndSave(alert, "test/alertTests"); + + alert.nExpiration += 60; + ++alert.nID; + SignAndSave(alert, "test/alertTests"); + + ++alert.nID; + alert.nMinVer = 11; + alert.nMaxVer = 22; + SignAndSave(alert, "test/alertTests"); + + ++alert.nID; + alert.strStatusBar = "Alert 2 for Satoshi 0.1.0"; + alert.setSubVer.insert(std::string("/Satoshi:0.1.0/")); + SignAndSave(alert, "test/alertTests"); + + ++alert.nID; + alert.nMinVer = 0; + alert.nMaxVer = 999999; + alert.strStatusBar = "Evil Alert'; /bin/ls; echo '"; + alert.setSubVer.clear(); + SignAndSave(alert, "test/alertTests"); +} +#endif + +struct ReadAlerts +{ + ReadAlerts() + { + std::vector vch(alert_tests::alertTests, alert_tests::alertTests + sizeof(alert_tests::alertTests)); + CDataStream stream(vch, SER_DISK, CLIENT_VERSION); + try { + while (stream.good()) + { + CAlert alert; + stream >> alert; + alerts.push_back(alert); + } + } + catch (std::exception) { } + } + ~ReadAlerts() { } + + static std::vector read_lines(boost::filesystem::path filepath) + { + std::vector result; + + std::ifstream f(filepath.string().c_str()); + std::string line; + while (std::getline(f,line)) + result.push_back(line); + + return result; + } + + std::vector alerts; +}; + +BOOST_FIXTURE_TEST_SUITE(Alert_tests, ReadAlerts) + + +BOOST_AUTO_TEST_CASE(AlertApplies) +{ + SetMockTime(11); + + BOOST_FOREACH(const CAlert& alert, alerts) + { + BOOST_CHECK(alert.CheckSignature()); + } + + BOOST_CHECK(alerts.size() >= 3); + + // Matches: + BOOST_CHECK(alerts[0].AppliesTo(1, "")); + 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(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(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(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/")); + + SetMockTime(0); +} + + +// This uses sh 'echo' to test the -alertnotify function, writing to a +// /tmp file. So skip it on Windows: +#ifndef WIN32 +BOOST_AUTO_TEST_CASE(AlertNotify) +{ + SetMockTime(11); + + boost::filesystem::path temp = GetTempPath() / "alertnotify.txt"; + boost::filesystem::remove(temp); + + mapArgs["-alertnotify"] = std::string("echo %s >> ") + temp.string(); + + BOOST_FOREACH(CAlert alert, alerts) + alert.ProcessAlert(false); + + std::vector r = read_lines(temp); + BOOST_CHECK_EQUAL(r.size(), 4u); + BOOST_CHECK_EQUAL(r[0], "Alert 1"); + BOOST_CHECK_EQUAL(r[1], "Alert 2, cancels 1"); + BOOST_CHECK_EQUAL(r[2], "Alert 2, cancels 1"); + BOOST_CHECK_EQUAL(r[3], "Evil Alert; /bin/ls; echo "); // single-quotes should be removed + + boost::filesystem::remove(temp); + + SetMockTime(0); +} +#endif + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/allocator_tests.cpp b/src/test/allocator_tests.cpp index b6809fe..1786932 100644 --- a/src/test/allocator_tests.cpp +++ b/src/test/allocator_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/allocator_tests.cpp~ b/src/test/allocator_tests.cpp~ new file mode 100644 index 0000000..18338a4 --- /dev/null +++ b/src/test/allocator_tests.cpp~ @@ -0,0 +1,118 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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(allocator_tests) + +// Dummy memory page locker for platform independent tests +static const void *last_lock_addr, *last_unlock_addr; +static size_t last_lock_len, last_unlock_len; +class TestLocker +{ +public: + bool Lock(const void *addr, size_t len) + { + last_lock_addr = addr; + last_lock_len = len; + return true; + } + bool Unlock(const void *addr, size_t len) + { + last_unlock_addr = addr; + last_unlock_len = len; + return true; + } +}; + +BOOST_AUTO_TEST_CASE(test_LockedPageManagerBase) +{ + const size_t test_page_size = 4096; + LockedPageManagerBase lpm(test_page_size); + size_t addr; + last_lock_addr = last_unlock_addr = 0; + last_lock_len = last_unlock_len = 0; + + /* Try large number of small objects */ + addr = 0; + for(int i=0; i<1000; ++i) + { + lpm.LockRange(reinterpret_cast(addr), 33); + addr += 33; + } + /* Try small number of page-sized objects, straddling two pages */ + addr = test_page_size*100 + 53; + for(int i=0; i<100; ++i) + { + lpm.LockRange(reinterpret_cast(addr), test_page_size); + addr += test_page_size; + } + /* Try small number of page-sized objects aligned to exactly one page */ + addr = test_page_size*300; + for(int i=0; i<100; ++i) + { + lpm.LockRange(reinterpret_cast(addr), test_page_size); + addr += test_page_size; + } + /* one very large object, straddling pages */ + lpm.LockRange(reinterpret_cast(test_page_size*600+1), test_page_size*500); + BOOST_CHECK(last_lock_addr == reinterpret_cast(test_page_size*(600+500))); + /* one very large object, page aligned */ + lpm.LockRange(reinterpret_cast(test_page_size*1200), test_page_size*500-1); + BOOST_CHECK(last_lock_addr == reinterpret_cast(test_page_size*(1200+500-1))); + + BOOST_CHECK(lpm.GetLockedPageCount() == ( + (1000*33+test_page_size-1)/test_page_size + // small objects + 101 + 100 + // page-sized objects + 501 + 500)); // large objects + BOOST_CHECK((last_lock_len & (test_page_size-1)) == 0); // always lock entire pages + BOOST_CHECK(last_unlock_len == 0); // nothing unlocked yet + + /* And unlock again */ + addr = 0; + for(int i=0; i<1000; ++i) + { + lpm.UnlockRange(reinterpret_cast(addr), 33); + addr += 33; + } + addr = test_page_size*100 + 53; + for(int i=0; i<100; ++i) + { + lpm.UnlockRange(reinterpret_cast(addr), test_page_size); + addr += test_page_size; + } + addr = test_page_size*300; + for(int i=0; i<100; ++i) + { + lpm.UnlockRange(reinterpret_cast(addr), test_page_size); + addr += test_page_size; + } + lpm.UnlockRange(reinterpret_cast(test_page_size*600+1), test_page_size*500); + lpm.UnlockRange(reinterpret_cast(test_page_size*1200), test_page_size*500-1); + + /* Check that everything is released */ + BOOST_CHECK(lpm.GetLockedPageCount() == 0); + + /* A few and unlocks of size zero (should have no effect) */ + addr = 0; + for(int i=0; i<1000; ++i) + { + lpm.LockRange(reinterpret_cast(addr), 0); + addr += 1; + } + BOOST_CHECK(lpm.GetLockedPageCount() == 0); + addr = 0; + for(int i=0; i<1000; ++i) + { + lpm.UnlockRange(reinterpret_cast(addr), 0); + addr += 1; + } + BOOST_CHECK(lpm.GetLockedPageCount() == 0); + BOOST_CHECK((last_unlock_len & (test_page_size-1)) == 0); // always unlock entire pages +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/base32_tests.cpp b/src/test/base32_tests.cpp index f740b9d..587fcee 100644 --- a/src/test/base32_tests.cpp +++ b/src/test/base32_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/base32_tests.cpp~ b/src/test/base32_tests.cpp~ new file mode 100644 index 0000000..eec3335 --- /dev/null +++ b/src/test/base32_tests.cpp~ @@ -0,0 +1,25 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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) +{ + static const std::string vstrIn[] = {"","f","fo","foo","foob","fooba","foobar"}; + static const std::string vstrOut[] = {"","my======","mzxq====","mzxw6===","mzxw6yq=","mzxw6ytb","mzxw6ytboi======"}; + for (unsigned int i=0; i +#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& jsondata); + +BOOST_AUTO_TEST_SUITE(base58_tests) + +// Goal: test low-level base58 encoding functionality +BOOST_AUTO_TEST_CASE(base58_EncodeBase58) +{ + 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(); + std::string strTest = write_string(tv, false); + if (test.size() < 2) // Allow for extra stuff (useful for comments) + { + BOOST_ERROR("Bad test: " << strTest); + continue; + } + std::vector sourcedata = ParseHex(test[0].get_str()); + std::string base58string = test[1].get_str(); + BOOST_CHECK_MESSAGE( + EncodeBase58(&sourcedata[0], &sourcedata[sourcedata.size()]) == base58string, + strTest); + } +} + +// Goal: test low-level base58 decoding functionality +BOOST_AUTO_TEST_CASE(base58_DecodeBase58) +{ + 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) + { + Array test = tv.get_array(); + std::string strTest = write_string(tv, false); + if (test.size() < 2) // Allow for extra stuff (useful for comments) + { + BOOST_ERROR("Bad test: " << strTest); + continue; + } + std::vector expected = ParseHex(test[0].get_str()); + std::string base58string = test[1].get_str(); + BOOST_CHECK_MESSAGE(DecodeBase58(base58string, result), strTest); + BOOST_CHECK_MESSAGE(result.size() == expected.size() && std::equal(result.begin(), result.end(), expected.begin()), strTest); + } + + 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 +class TestAddrTypeVisitor : public boost::static_visitor +{ +private: + std::string exp_addrType; +public: + TestAddrTypeVisitor(const std::string &exp_addrType) : exp_addrType(exp_addrType) { } + bool operator()(const CKeyID &id) const + { + return (exp_addrType == "pubkey"); + } + bool operator()(const CScriptID &id) const + { + return (exp_addrType == "script"); + } + bool operator()(const CNoDestination &no) const + { + return (exp_addrType == "none"); + } +}; + +// Visitor to check address payload +class TestPayloadVisitor : public boost::static_visitor +{ +private: + std::vector exp_payload; +public: + TestPayloadVisitor(std::vector &exp_payload) : exp_payload(exp_payload) { } + bool operator()(const CKeyID &id) const + { + uint160 exp_key(exp_payload); + return exp_key == id; + } + bool operator()(const CScriptID &id) const + { + uint160 exp_key(exp_payload); + return exp_key == id; + } + bool operator()(const CNoDestination &no) const + { + return exp_payload.size() == 0; + } +}; + +// Goal: check that parsed keys match test payload +BOOST_AUTO_TEST_CASE(base58_keys_valid_parse) +{ + 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; + CBitmarkSecret secret; + CBitmarkAddress addr; + + BOOST_FOREACH(Value& tv, tests) + { + Array test = tv.get_array(); + std::string strTest = write_string(tv, false); + if (test.size() < 3) // Allow for extra stuff (useful for comments) + { + BOOST_ERROR("Bad test: " << strTest); + continue; + } + std::string exp_base58string = test[0].get_str(); + std::vector exp_payload = ParseHex(test[1].get_str()); + const Object &metadata = test[2].get_obj(); + bool isPrivkey = find_value(metadata, "isPrivkey").get_bool(); + bool isTestnet = find_value(metadata, "isTestnet").get_bool(); + if (isTestnet) + SelectParams(CChainParams::TESTNET); + else + SelectParams(CChainParams::MAIN); + if(isPrivkey) + { + bool isCompressed = find_value(metadata, "isCompressed").get_bool(); + // Must be valid private key + // Note: CBitmarkSecret::SetString tests isValid, whereas CBitmarkAddress does not! + BOOST_CHECK_MESSAGE(secret.SetString(exp_base58string), "!SetString:"+ strTest); + BOOST_CHECK_MESSAGE(secret.IsValid(), "!IsValid:" + strTest); + CKey privkey = secret.GetKey(); + BOOST_CHECK_MESSAGE(privkey.IsCompressed() == isCompressed, "compressed mismatch:" + strTest); + BOOST_CHECK_MESSAGE(privkey.size() == exp_payload.size() && std::equal(privkey.begin(), privkey.end(), exp_payload.begin()), "key mismatch:" + strTest); + + // Private key must be invalid public key + addr.SetString(exp_base58string); + BOOST_CHECK_MESSAGE(!addr.IsValid(), "IsValid privkey as pubkey:" + strTest); + } + else + { + std::string exp_addrType = find_value(metadata, "addrType").get_str(); // "script" or "pubkey" + // Must be valid public key + BOOST_CHECK_MESSAGE(addr.SetString(exp_base58string), "SetString:" + strTest); + BOOST_CHECK_MESSAGE(addr.IsValid(), "!IsValid:" + strTest); + BOOST_CHECK_MESSAGE(addr.IsScript() == (exp_addrType == "script"), "isScript mismatch" + strTest); + CTxDestination dest = addr.Get(); + BOOST_CHECK_MESSAGE(boost::apply_visitor(TestAddrTypeVisitor(exp_addrType), dest), "addrType mismatch" + strTest); + + // Public key must be invalid private key + secret.SetString(exp_base58string); + BOOST_CHECK_MESSAGE(!secret.IsValid(), "IsValid pubkey as privkey:" + strTest); + } + } + SelectParams(CChainParams::MAIN); +} + +// Goal: check that generated keys match test vectors +BOOST_AUTO_TEST_CASE(base58_keys_valid_gen) +{ + 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) + { + Array test = tv.get_array(); + std::string strTest = write_string(tv, false); + if (test.size() < 3) // Allow for extra stuff (useful for comments) + { + BOOST_ERROR("Bad test: " << strTest); + continue; + } + std::string exp_base58string = test[0].get_str(); + std::vector exp_payload = ParseHex(test[1].get_str()); + const Object &metadata = test[2].get_obj(); + bool isPrivkey = find_value(metadata, "isPrivkey").get_bool(); + bool isTestnet = find_value(metadata, "isTestnet").get_bool(); + if (isTestnet) + SelectParams(CChainParams::TESTNET); + else + SelectParams(CChainParams::MAIN); + if(isPrivkey) + { + bool isCompressed = find_value(metadata, "isCompressed").get_bool(); + CKey key; + key.Set(exp_payload.begin(), exp_payload.end(), isCompressed); + assert(key.IsValid()); + CBitmarkSecret secret; + secret.SetKey(key); + BOOST_CHECK_MESSAGE(secret.ToString() == exp_base58string, "result mismatch: " + strTest); + } + else + { + std::string exp_addrType = find_value(metadata, "addrType").get_str(); + CTxDestination dest; + if(exp_addrType == "pubkey") + { + dest = CKeyID(uint160(exp_payload)); + } + else if(exp_addrType == "script") + { + dest = CScriptID(uint160(exp_payload)); + } + else if(exp_addrType == "none") + { + dest = CNoDestination(); + } + else + { + BOOST_ERROR("Bad addrtype: " << strTest); + continue; + } + CBitmarkAddress addrOut; + BOOST_CHECK_MESSAGE(addrOut.Set(dest), "encode dest: " + strTest); + BOOST_CHECK_MESSAGE(addrOut.ToString() == exp_base58string, "mismatch: " + strTest); + } + } + + // Visiting a CNoDestination must fail + CBitmarkAddress dummyAddr; + CTxDestination nodest = CNoDestination(); + BOOST_CHECK(!dummyAddr.Set(nodest)); + + SelectParams(CChainParams::MAIN); +} + +// 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(std::string(json_tests::base58_keys_invalid, json_tests::base58_keys_invalid + sizeof(json_tests::base58_keys_invalid))); // Negative testcases + std::vector result; + CBitmarkSecret secret; + CBitmarkAddress addr; + + BOOST_FOREACH(Value& tv, tests) + { + Array test = tv.get_array(); + std::string strTest = write_string(tv, false); + if (test.size() < 1) // Allow for extra stuff (useful for comments) + { + BOOST_ERROR("Bad test: " << strTest); + continue; + } + std::string exp_base58string = test[0].get_str(); + + // must be invalid as public and as private key + addr.SetString(exp_base58string); + BOOST_CHECK_MESSAGE(!addr.IsValid(), "IsValid pubkey:" + strTest); + secret.SetString(exp_base58string); + BOOST_CHECK_MESSAGE(!secret.IsValid(), "IsValid privkey:" + strTest); + } +} + + +BOOST_AUTO_TEST_SUITE_END() + diff --git a/src/test/base64_tests.cpp b/src/test/base64_tests.cpp index e2b7ef2..a49894c 100644 --- a/src/test/base64_tests.cpp +++ b/src/test/base64_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/base64_tests.cpp~ b/src/test/base64_tests.cpp~ new file mode 100644 index 0000000..000412f --- /dev/null +++ b/src/test/base64_tests.cpp~ @@ -0,0 +1,25 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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(base64_tests) + +BOOST_AUTO_TEST_CASE(base64_testvectors) +{ + static const std::string vstrIn[] = {"","f","fo","foo","foob","fooba","foobar"}; + static const std::string vstrOut[] = {"","Zg==","Zm8=","Zm9v","Zm9vYg==","Zm9vYmE=","Zm9vYmFy"}; + for (unsigned int i=0; i +#include + +#include + +BOOST_AUTO_TEST_SUITE(bignum_tests) + +// Unfortunately there's no standard way of preventing a function from being +// inlined, so we define a macro for it. +// +// You should use it like this: +// NOINLINE void function() {...} +#if defined(__GNUC__) +// This also works and will be defined for any compiler implementing GCC +// extensions, such as Clang and ICC. +#define NOINLINE __attribute__((noinline)) +#elif defined(_MSC_VER) +#define NOINLINE __declspec(noinline) +#else +// We give out a warning because it impacts the correctness of one bignum test. +#warning You should define NOINLINE for your compiler. +#define NOINLINE +#endif + +// For the following test case, it is useful to use additional tools. +// +// The simplest one to use is the compiler flag -ftrapv, which detects integer +// overflows and similar errors. However, due to optimizations and compilers +// taking advantage of undefined behavior sometimes it may not actually detect +// anything. +// +// You can also use compiler-based stack protection to possibly detect possible +// stack buffer overruns. +// +// For more accurate diagnostics, you can use an undefined arithmetic operation +// 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. + +// 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_t n) +{ + num.setint64(n); +} + +// For each number, we do 2 tests: one with inline code, then we reset the +// value to 0, then the second one with a non-inlined function. +BOOST_AUTO_TEST_CASE(bignum_setint64) +{ + int64_t n; + + { + n = 0; + CBigNum num(n); + BOOST_CHECK(num.ToString() == "0"); + num.setulong(0); + BOOST_CHECK(num.ToString() == "0"); + mysetint64(num, n); + BOOST_CHECK(num.ToString() == "0"); + } + { + n = 1; + CBigNum num(n); + BOOST_CHECK(num.ToString() == "1"); + num.setulong(0); + BOOST_CHECK(num.ToString() == "0"); + mysetint64(num, n); + BOOST_CHECK(num.ToString() == "1"); + } + { + n = -1; + CBigNum num(n); + BOOST_CHECK(num.ToString() == "-1"); + num.setulong(0); + BOOST_CHECK(num.ToString() == "0"); + mysetint64(num, n); + BOOST_CHECK(num.ToString() == "-1"); + } + { + n = 5; + CBigNum num(n); + BOOST_CHECK(num.ToString() == "5"); + num.setulong(0); + BOOST_CHECK(num.ToString() == "0"); + mysetint64(num, n); + BOOST_CHECK(num.ToString() == "5"); + } + { + n = -5; + CBigNum num(n); + BOOST_CHECK(num.ToString() == "-5"); + num.setulong(0); + BOOST_CHECK(num.ToString() == "0"); + mysetint64(num, n); + BOOST_CHECK(num.ToString() == "-5"); + } + { + n = std::numeric_limits::min(); + CBigNum num(n); + BOOST_CHECK(num.ToString() == "-9223372036854775808"); + num.setulong(0); + BOOST_CHECK(num.ToString() == "0"); + mysetint64(num, n); + BOOST_CHECK(num.ToString() == "-9223372036854775808"); + } + { + n = std::numeric_limits::max(); + CBigNum num(n); + BOOST_CHECK(num.ToString() == "9223372036854775807"); + num.setulong(0); + BOOST_CHECK(num.ToString() == "0"); + mysetint64(num, n); + BOOST_CHECK(num.ToString() == "9223372036854775807"); + } +} + + +BOOST_AUTO_TEST_CASE(bignum_SetCompact) +{ + CBigNum num; + num.SetCompact(0); + BOOST_CHECK_EQUAL(num.GetHex(), "0"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0U); + + num.SetCompact(0x00123456); + 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); + + // Make sure that we don't generate compacts with the 0x00800000 bit set + num = 0x80; + BOOST_CHECK_EQUAL(num.GetCompact(), 0x02008000U); + + num.SetCompact(0x01fedcba); + BOOST_CHECK_EQUAL(num.GetHex(), "-7e"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0x01fe0000U); + + num.SetCompact(0x02123456); + BOOST_CHECK_EQUAL(num.GetHex(), "1234"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0x02123400U); + + num.SetCompact(0x03123456); + BOOST_CHECK_EQUAL(num.GetHex(), "123456"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0x03123456U); + + num.SetCompact(0x04123456); + BOOST_CHECK_EQUAL(num.GetHex(), "12345600"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0x04123456U); + + num.SetCompact(0x04923456); + BOOST_CHECK_EQUAL(num.GetHex(), "-12345600"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0x04923456U); + + num.SetCompact(0x05009234); + BOOST_CHECK_EQUAL(num.GetHex(), "92340000"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0x05009234U); + + num.SetCompact(0x20123456); + BOOST_CHECK_EQUAL(num.GetHex(), "1234560000000000000000000000000000000000000000000000000000000000"); + BOOST_CHECK_EQUAL(num.GetCompact(), 0x20123456U); + + num.SetCompact(0xff123456); + BOOST_CHECK_EQUAL(num.GetHex(), "123456000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"); + 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 index 8056a0f..77d25fb 100644 --- a/src/test/bip32_tests.cpp +++ b/src/test/bip32_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2013-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -37,7 +37,7 @@ struct TestVector { TestVector test1 = TestVector("000102030405060708090a0b0c0d0e0f") - ("xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8", + ("xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1Epfget8", "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi", 0x80000000) ("xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw", diff --git a/src/test/bip32_tests.cpp~ b/src/test/bip32_tests.cpp~ new file mode 100644 index 0000000..bb1992c --- /dev/null +++ b/src/test/bip32_tests.cpp~ @@ -0,0 +1,121 @@ +// Original Code: Copyright (c) 2013-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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") + ("xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1Epfget8", + "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 + CBitmarkExtKey b58key; b58key.SetKey(key); + BOOST_CHECK(b58key.ToString() == derive.prv); + // Test public key + CBitmarkExtPubKey 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 1aca727..0623bd5 100644 --- a/src/test/bloom_tests.cpp +++ b/src/test/bloom_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/bloom_tests.cpp~ b/src/test/bloom_tests.cpp~ new file mode 100644 index 0000000..69a47ee --- /dev/null +++ b/src/test/bloom_tests.cpp~ @@ -0,0 +1,455 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "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; + +BOOST_AUTO_TEST_SUITE(bloom_tests) + +BOOST_AUTO_TEST_CASE(bloom_create_insert_serialize) +{ + CBloomFilter filter(3, 0.01, 0, BLOOM_UPDATE_ALL); + + filter.insert(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f0950c8")); + BOOST_CHECK_MESSAGE( filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f0950c8")), "BloomFilter doesn't contain just-inserted object!"); + // One bit different in first byte + BOOST_CHECK_MESSAGE(!filter.contains(ParseHex("19108ad8ed9bb6274d3980bab5a85c048f0950c8")), "BloomFilter contains something it shouldn't!"); + + filter.insert(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32eee")); + BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32eee")), "BloomFilter doesn't contain just-inserted object (2)!"); + + filter.insert(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729c5")); + BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729c5")), "BloomFilter doesn't contain just-inserted object (3)!"); + + CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); + filter.Serialize(stream, SER_NETWORK, PROTOCOL_VERSION); + + vector vch = ParseHex("03614e9b050000000000000001"); + vector expected(vch.size()); + + for (unsigned int i = 0; i < vch.size(); i++) + expected[i] = (char)vch[i]; + + BOOST_CHECK_EQUAL_COLLECTIONS(stream.begin(), stream.end(), expected.begin(), expected.end()); +} + +BOOST_AUTO_TEST_CASE(bloom_create_insert_serialize_with_tweak) +{ + // Same test as bloom_create_insert_serialize, but we add a nTweak of 100 + CBloomFilter filter(3, 0.01, 2147483649, BLOOM_UPDATE_ALL); + + filter.insert(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f0950c8")); + BOOST_CHECK_MESSAGE( filter.contains(ParseHex("99108ad8ed9bb6274d3980bab5a85c048f0950c8")), "BloomFilter doesn't contain just-inserted object!"); + // One bit different in first byte + BOOST_CHECK_MESSAGE(!filter.contains(ParseHex("19108ad8ed9bb6274d3980bab5a85c048f0950c8")), "BloomFilter contains something it shouldn't!"); + + filter.insert(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32eee")); + BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b5a2c786d9ef4658287ced5914b37a1b4aa32eee")), "BloomFilter doesn't contain just-inserted object (2)!"); + + filter.insert(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729c5")); + BOOST_CHECK_MESSAGE(filter.contains(ParseHex("b9300670b4c5366e95b2699e8b18bc75e5f729c5")), "BloomFilter doesn't contain just-inserted object (3)!"); + + CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); + filter.Serialize(stream, SER_NETWORK, PROTOCOL_VERSION); + + vector vch = ParseHex("03ce4299050000000100008001"); + vector expected(vch.size()); + + for (unsigned int i = 0; i < vch.size(); i++) + expected[i] = (char)vch[i]; + + BOOST_CHECK_EQUAL_COLLECTIONS(stream.begin(), stream.end(), expected.begin(), expected.end()); +} + +BOOST_AUTO_TEST_CASE(bloom_create_insert_key) +{ + string strSecret = string("3T8LfmmT4UE526vZ5zfDYeca69GV5iBio8M6udc8wHQyQcsqFJD"); + CBitmarkSecret vchSecret; + BOOST_CHECK(vchSecret.SetString(strSecret)); + + CKey key = vchSecret.GetKey(); + CPubKey pubkey = key.GetPubKey(); + vector vchPubKey(pubkey.begin(), pubkey.end()); + + CBloomFilter filter(2, 0.001, 0, BLOOM_UPDATE_ALL); + filter.insert(vchPubKey); + uint160 hash = pubkey.GetID(); + filter.insert(vector(hash.begin(), hash.end())); + + CDataStream stream(SER_NETWORK, PROTOCOL_VERSION); + filter.Serialize(stream, SER_NETWORK, PROTOCOL_VERSION); + + vector vch = ParseHex("03144de3080000000000000001"); + vector expected(vch.size()); + + for (unsigned int i = 0; i < vch.size(); i++) + expected[i] = (char)vch[i]; + + BOOST_CHECK_EQUAL_COLLECTIONS(stream.begin(), stream.end(), expected.begin(), expected.end()); +} + +BOOST_AUTO_TEST_CASE(bloom_match) +{ + // Random real transaction (b4749f017444b051c44dfd2720e88f314ff94f3dd6d56d40ef65854fcd7fff6b) + CTransaction tx; + CDataStream stream(ParseHex("01000000010b26e9b7735eb6aabdf358bab62f9816a21ba9ebdb719d5299e88607d722c190000000008b4830450220070aca44506c5cef3a16ed519d7c3c39f8aab192c4e1c90d065f37b8a4af6141022100a8e160b856c2d43d27d8fba71e5aef6405b8643ac4cb7cb3c462aced7f14711a0141046d11fee51b0e60666d5049a9101a72741df480b96ee26488a4d3466b95c9a40ac5eeef87e10a5cd336c19a84565f80fa6c547957b7700ff4dfbdefe76036c339ffffffff021bff3d11000000001976a91404943fdd508053c75000106d3bc6e2754dbcff1988ac2f15de00000000001976a914a266436d2965547608b9e15d9032a7b9d64fa43188ac00000000"), SER_DISK, CLIENT_VERSION); + stream >> tx; + + // and one which spends it (e2769b09e784f32f62ef849763d4f45b98e07ba658647343b915ff832b110436) + unsigned char ch[] = {0x01, 0x00, 0x00, 0x00, 0x01, 0x6b, 0xff, 0x7f, 0xcd, 0x4f, 0x85, 0x65, 0xef, 0x40, 0x6d, 0xd5, 0xd6, 0x3d, 0x4f, 0xf9, 0x4f, 0x31, 0x8f, 0xe8, 0x20, 0x27, 0xfd, 0x4d, 0xc4, 0x51, 0xb0, 0x44, 0x74, 0x01, 0x9f, 0x74, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x49, 0x30, 0x46, 0x02, 0x21, 0x00, 0xda, 0x0d, 0xc6, 0xae, 0xce, 0xfe, 0x1e, 0x06, 0xef, 0xdf, 0x05, 0x77, 0x37, 0x57, 0xde, 0xb1, 0x68, 0x82, 0x09, 0x30, 0xe3, 0xb0, 0xd0, 0x3f, 0x46, 0xf5, 0xfc, 0xf1, 0x50, 0xbf, 0x99, 0x0c, 0x02, 0x21, 0x00, 0xd2, 0x5b, 0x5c, 0x87, 0x04, 0x00, 0x76, 0xe4, 0xf2, 0x53, 0xf8, 0x26, 0x2e, 0x76, 0x3e, 0x2d, 0xd5, 0x1e, 0x7f, 0xf0, 0xbe, 0x15, 0x77, 0x27, 0xc4, 0xbc, 0x42, 0x80, 0x7f, 0x17, 0xbd, 0x39, 0x01, 0x41, 0x04, 0xe6, 0xc2, 0x6e, 0xf6, 0x7d, 0xc6, 0x10, 0xd2, 0xcd, 0x19, 0x24, 0x84, 0x78, 0x9a, 0x6c, 0xf9, 0xae, 0xa9, 0x93, 0x0b, 0x94, 0x4b, 0x7e, 0x2d, 0xb5, 0x34, 0x2b, 0x9d, 0x9e, 0x5b, 0x9f, 0xf7, 0x9a, 0xff, 0x9a, 0x2e, 0xe1, 0x97, 0x8d, 0xd7, 0xfd, 0x01, 0xdf, 0xc5, 0x22, 0xee, 0x02, 0x28, 0x3d, 0x3b, 0x06, 0xa9, 0xd0, 0x3a, 0xcf, 0x80, 0x96, 0x96, 0x8d, 0x7d, 0xbb, 0x0f, 0x91, 0x78, 0xff, 0xff, 0xff, 0xff, 0x02, 0x8b, 0xa7, 0x94, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x19, 0x76, 0xa9, 0x14, 0xba, 0xde, 0xec, 0xfd, 0xef, 0x05, 0x07, 0x24, 0x7f, 0xc8, 0xf7, 0x42, 0x41, 0xd7, 0x3b, 0xc0, 0x39, 0x97, 0x2d, 0x7b, 0x88, 0xac, 0x40, 0x94, 0xa8, 0x02, 0x00, 0x00, 0x00, 0x00, 0x19, 0x76, 0xa9, 0x14, 0xc1, 0x09, 0x32, 0x48, 0x3f, 0xec, 0x93, 0xed, 0x51, 0xf5, 0xfe, 0x95, 0xe7, 0x25, 0x59, 0xf2, 0xcc, 0x70, 0x43, 0xf9, 0x88, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00}; + vector vch(ch, ch + sizeof(ch) -1); + CDataStream spendStream(vch, SER_DISK, CLIENT_VERSION); + CTransaction spendingTx; + spendStream >> spendingTx; + + CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + filter.insert(uint256("0xb4749f017444b051c44dfd2720e88f314ff94f3dd6d56d40ef65854fcd7fff6b")); + BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx, tx.GetHash()), "Simple Bloom filter didn't match tx hash"); + + filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + // byte-reversed tx hash + filter.insert(ParseHex("6bff7fcd4f8565ef406dd5d63d4ff94f318fe82027fd4dc451b04474019f74b4")); + BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx, tx.GetHash()), "Simple Bloom filter didn't match manually serialized tx hash"); + + filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + filter.insert(ParseHex("30450220070aca44506c5cef3a16ed519d7c3c39f8aab192c4e1c90d065f37b8a4af6141022100a8e160b856c2d43d27d8fba71e5aef6405b8643ac4cb7cb3c462aced7f14711a01")); + BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx, tx.GetHash()), "Simple Bloom filter didn't match input signature"); + + filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + filter.insert(ParseHex("046d11fee51b0e60666d5049a9101a72741df480b96ee26488a4d3466b95c9a40ac5eeef87e10a5cd336c19a84565f80fa6c547957b7700ff4dfbdefe76036c339")); + BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx, tx.GetHash()), "Simple Bloom filter didn't match input pub key"); + + filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + filter.insert(ParseHex("04943fdd508053c75000106d3bc6e2754dbcff19")); + BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx, tx.GetHash()), "Simple Bloom filter didn't match output address"); + BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(spendingTx, spendingTx.GetHash()), "Simple Bloom filter didn't add output"); + + filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + filter.insert(ParseHex("a266436d2965547608b9e15d9032a7b9d64fa431")); + BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx, tx.GetHash()), "Simple Bloom filter didn't match output address"); + + filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + filter.insert(COutPoint(uint256("0x90c122d70786e899529d71dbeba91ba216982fb6ba58f3bdaab65e73b7e9260b"), 0)); + BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx, tx.GetHash()), "Simple Bloom filter didn't match COutPoint"); + + filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + COutPoint prevOutPoint(uint256("0x90c122d70786e899529d71dbeba91ba216982fb6ba58f3bdaab65e73b7e9260b"), 0); + { + vector data(32 + sizeof(unsigned int)); + memcpy(&data[0], prevOutPoint.hash.begin(), 32); + memcpy(&data[32], &prevOutPoint.n, sizeof(unsigned int)); + filter.insert(data); + } + BOOST_CHECK_MESSAGE(filter.IsRelevantAndUpdate(tx, tx.GetHash()), "Simple Bloom filter didn't match manually serialized COutPoint"); + + filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + filter.insert(uint256("00000009e784f32f62ef849763d4f45b98e07ba658647343b915ff832b110436")); + BOOST_CHECK_MESSAGE(!filter.IsRelevantAndUpdate(tx, tx.GetHash()), "Simple Bloom filter matched random tx hash"); + + filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + filter.insert(ParseHex("0000006d2965547608b9e15d9032a7b9d64fa431")); + BOOST_CHECK_MESSAGE(!filter.IsRelevantAndUpdate(tx, tx.GetHash()), "Simple Bloom filter matched random address"); + + filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + filter.insert(COutPoint(uint256("0x90c122d70786e899529d71dbeba91ba216982fb6ba58f3bdaab65e73b7e9260b"), 1)); + BOOST_CHECK_MESSAGE(!filter.IsRelevantAndUpdate(tx, tx.GetHash()), "Simple Bloom filter matched COutPoint for an output we didn't care about"); + + filter = CBloomFilter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + filter.insert(COutPoint(uint256("0x000000d70786e899529d71dbeba91ba216982fb6ba58f3bdaab65e73b7e9260b"), 0)); + BOOST_CHECK_MESSAGE(!filter.IsRelevantAndUpdate(tx, tx.GetHash()), "Simple Bloom filter matched COutPoint for an output we didn't care about"); +} + +BOOST_AUTO_TEST_CASE(merkle_block_1) +{ + // Random real block (0000000000013b8ab2cd513b0261a14096412195a72a0c4827d229dcc7e0f7af) + // With 9 txes + CBlock block; + CDataStream stream(ParseHex("0100000090f0a9f110702f808219ebea1173056042a714bad51b916cb6800000000000005275289558f51c9966699404ae2294730c3c9f9bda53523ce50e9b95e558da2fdb261b4d4c86041b1ab1bf930901000000010000000000000000000000000000000000000000000000000000000000000000ffffffff07044c86041b0146ffffffff0100f2052a01000000434104e18f7afbe4721580e81e8414fc8c24d7cfacf254bb5c7b949450c3e997c2dc1242487a8169507b631eb3771f2b425483fb13102c4eb5d858eef260fe70fbfae0ac00000000010000000196608ccbafa16abada902780da4dc35dafd7af05fa0da08cf833575f8cf9e836000000004a493046022100dab24889213caf43ae6adc41cf1c9396c08240c199f5225acf45416330fd7dbd022100fe37900e0644bf574493a07fc5edba06dbc07c311b947520c2d514bc5725dcb401ffffffff0100f2052a010000001976a914f15d1921f52e4007b146dfa60f369ed2fc393ce288ac000000000100000001fb766c1288458c2bafcfec81e48b24d98ec706de6b8af7c4e3c29419bfacb56d000000008c493046022100f268ba165ce0ad2e6d93f089cfcd3785de5c963bb5ea6b8c1b23f1ce3e517b9f022100da7c0f21adc6c401887f2bfd1922f11d76159cbc597fbd756a23dcbb00f4d7290141042b4e8625a96127826915a5b109852636ad0da753c9e1d5606a50480cd0c40f1f8b8d898235e571fe9357d9ec842bc4bba1827daaf4de06d71844d0057707966affffffff0280969800000000001976a9146963907531db72d0ed1a0cfb471ccb63923446f388ac80d6e34c000000001976a914f0688ba1c0d1ce182c7af6741e02658c7d4dfcd388ac000000000100000002c40297f730dd7b5a99567eb8d27b78758f607507c52292d02d4031895b52f2ff010000008b483045022100f7edfd4b0aac404e5bab4fd3889e0c6c41aa8d0e6fa122316f68eddd0a65013902205b09cc8b2d56e1cd1f7f2fafd60a129ed94504c4ac7bdc67b56fe67512658b3e014104732012cb962afa90d31b25d8fb0e32c94e513ab7a17805c14ca4c3423e18b4fb5d0e676841733cb83abaf975845c9f6f2a8097b7d04f4908b18368d6fc2d68ecffffffffca5065ff9617cbcba45eb23726df6498a9b9cafed4f54cbab9d227b0035ddefb000000008a473044022068010362a13c7f9919fa832b2dee4e788f61f6f5d344a7c2a0da6ae740605658022006d1af525b9a14a35c003b78b72bd59738cd676f845d1ff3fc25049e01003614014104732012cb962afa90d31b25d8fb0e32c94e513ab7a17805c14ca4c3423e18b4fb5d0e676841733cb83abaf975845c9f6f2a8097b7d04f4908b18368d6fc2d68ecffffffff01001ec4110200000043410469ab4181eceb28985b9b4e895c13fa5e68d85761b7eee311db5addef76fa8621865134a221bd01f28ec9999ee3e021e60766e9d1f3458c115fb28650605f11c9ac000000000100000001cdaf2f758e91c514655e2dc50633d1e4c84989f8aa90a0dbc883f0d23ed5c2fa010000008b48304502207ab51be6f12a1962ba0aaaf24a20e0b69b27a94fac5adf45aa7d2d18ffd9236102210086ae728b370e5329eead9accd880d0cb070aea0c96255fae6c4f1ddcce1fd56e014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff02404b4c00000000001976a9142b6ba7c9d796b75eef7942fc9288edd37c32f5c388ac002d3101000000001976a9141befba0cdc1ad56529371864d9f6cb042faa06b588ac000000000100000001b4a47603e71b61bc3326efd90111bf02d2f549b067f4c4a8fa183b57a0f800cb010000008a4730440220177c37f9a505c3f1a1f0ce2da777c339bd8339ffa02c7cb41f0a5804f473c9230220585b25a2ee80eb59292e52b987dad92acb0c64eced92ed9ee105ad153cdb12d001410443bd44f683467e549dae7d20d1d79cbdb6df985c6e9c029c8d0c6cb46cc1a4d3cf7923c5021b27f7a0b562ada113bc85d5fda5a1b41e87fe6e8802817cf69996ffffffff0280651406000000001976a9145505614859643ab7b547cd7f1f5e7e2a12322d3788ac00aa0271000000001976a914ea4720a7a52fc166c55ff2298e07baf70ae67e1b88ac00000000010000000586c62cd602d219bb60edb14a3e204de0705176f9022fe49a538054fb14abb49e010000008c493046022100f2bc2aba2534becbdf062eb993853a42bbbc282083d0daf9b4b585bd401aa8c9022100b1d7fd7ee0b95600db8535bbf331b19eed8d961f7a8e54159c53675d5f69df8c014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff03ad0e58ccdac3df9dc28a218bcf6f1997b0a93306faaa4b3a28ae83447b2179010000008b483045022100be12b2937179da88599e27bb31c3525097a07cdb52422d165b3ca2f2020ffcf702200971b51f853a53d644ebae9ec8f3512e442b1bcb6c315a5b491d119d10624c83014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff2acfcab629bbc8685792603762c921580030ba144af553d271716a95089e107b010000008b483045022100fa579a840ac258871365dd48cd7552f96c8eea69bd00d84f05b283a0dab311e102207e3c0ee9234814cfbb1b659b83671618f45abc1326b9edcc77d552a4f2a805c0014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffffdcdc6023bbc9944a658ddc588e61eacb737ddf0a3cd24f113b5a8634c517fcd2000000008b4830450221008d6df731df5d32267954bd7d2dda2302b74c6c2a6aa5c0ca64ecbabc1af03c75022010e55c571d65da7701ae2da1956c442df81bbf076cdbac25133f99d98a9ed34c014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffffe15557cd5ce258f479dfd6dc6514edf6d7ed5b21fcfa4a038fd69f06b83ac76e010000008b483045022023b3e0ab071eb11de2eb1cc3a67261b866f86bf6867d4558165f7c8c8aca2d86022100dc6e1f53a91de3efe8f63512850811f26284b62f850c70ca73ed5de8771fb451014104462e76fd4067b3a0aa42070082dcb0bf2f388b6495cf33d789904f07d0f55c40fbd4b82963c69b3dc31895d0c772c812b1d5fbcade15312ef1c0e8ebbb12dcd4ffffffff01404b4c00000000001976a9142b6ba7c9d796b75eef7942fc9288edd37c32f5c388ac00000000010000000166d7577163c932b4f9690ca6a80b6e4eb001f0a2fa9023df5595602aae96ed8d000000008a4730440220262b42546302dfb654a229cefc86432b89628ff259dc87edd1154535b16a67e102207b4634c020a97c3e7bbd0d4d19da6aa2269ad9dded4026e896b213d73ca4b63f014104979b82d02226b3a4597523845754d44f13639e3bf2df5e82c6aab2bdc79687368b01b1ab8b19875ae3c90d661a3d0a33161dab29934edeb36aa01976be3baf8affffffff02404b4c00000000001976a9144854e695a02af0aeacb823ccbc272134561e0a1688ac40420f00000000001976a914abee93376d6b37b5c2940655a6fcaf1c8e74237988ac0000000001000000014e3f8ef2e91349a9059cb4f01e54ab2597c1387161d3da89919f7ea6acdbb371010000008c49304602210081f3183471a5ca22307c0800226f3ef9c353069e0773ac76bb580654d56aa523022100d4c56465bdc069060846f4fbf2f6b20520b2a80b08b168b31e66ddb9c694e240014104976c79848e18251612f8940875b2b08d06e6dc73b9840e8860c066b7e87432c477e9a59a453e71e6d76d5fe34058b800a098fc1740ce3012e8fc8a00c96af966ffffffff02c0e1e400000000001976a9144134e75a6fcb6042034aab5e18570cf1f844f54788ac404b4c00000000001976a9142b6ba7c9d796b75eef7942fc9288edd37c32f5c388ac00000000"), SER_NETWORK, PROTOCOL_VERSION); + stream >> block; + + CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + // Match the last transaction + filter.insert(uint256("0x74d681e0e03bafa802c8aa084379aa98d9fcd632ddc2ed9782b586ec87451f20")); + + CMerkleBlock merkleBlock(block, filter); + BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); + + BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); + pair pair = merkleBlock.vMatchedTxn[0]; + + BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256("0x74d681e0e03bafa802c8aa084379aa98d9fcd632ddc2ed9782b586ec87451f20")); + BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 8); + + vector vMatched; + BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched) == block.hashMerkleRoot); + BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); + for (unsigned int i = 0; i < vMatched.size(); i++) + BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); + + // Also match the 8th transaction + filter.insert(uint256("0xdd1fd2a6fc16404faf339881a90adbde7f4f728691ac62e8f168809cdfae1053")); + merkleBlock = CMerkleBlock(block, filter); + BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); + + BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 2); + + BOOST_CHECK(merkleBlock.vMatchedTxn[1] == pair); + + BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256("0xdd1fd2a6fc16404faf339881a90adbde7f4f728691ac62e8f168809cdfae1053")); + BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 7); + + BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched) == block.hashMerkleRoot); + BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); + for (unsigned int i = 0; i < vMatched.size(); i++) + BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); +} + +BOOST_AUTO_TEST_CASE(merkle_block_2) +{ + // Random real block (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34ae6) + // With 4 txes + CBlock block; + CDataStream stream(ParseHex("0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29fc051906800000000fe7d5e12ef0ff901f6050211249919b1c0653771832b3a80c66cea42847f0ae1d4d26e49ffff001d00f0a4410401000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0804ffff001d029105ffffffff0100f2052a010000004341046d8709a041d34357697dfcb30a9d05900a6294078012bf3bb09c6f9b525f1d16d5503d7905db1ada9501446ea00728668fc5719aa80be2fdfc8a858a4dbdd4fbac00000000010000000255605dc6f5c3dc148b6da58442b0b2cd422be385eab2ebea4119ee9c268d28350000000049483045022100aa46504baa86df8a33b1192b1b9367b4d729dc41e389f2c04f3e5c7f0559aae702205e82253a54bf5c4f65b7428551554b2045167d6d206dfe6a2e198127d3f7df1501ffffffff55605dc6f5c3dc148b6da58442b0b2cd422be385eab2ebea4119ee9c268d2835010000004847304402202329484c35fa9d6bb32a55a70c0982f606ce0e3634b69006138683bcd12cbb6602200c28feb1e2555c3210f1dddb299738b4ff8bbe9667b68cb8764b5ac17b7adf0001ffffffff0200e1f505000000004341046a0765b5865641ce08dd39690aade26dfbf5511430ca428a3089261361cef170e3929a68aee3d8d4848b0c5111b0a37b82b86ad559fd2a745b44d8e8d9dfdc0cac00180d8f000000004341044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032cb86a5eb5e56842e92e19141d60a01928f8dd2c875a390f67c1f6c94cfc617c0ea45afac0000000001000000025f9a06d3acdceb56be1bfeaa3e8a25e62d182fa24fefe899d1c17f1dad4c2028000000004847304402205d6058484157235b06028c30736c15613a28bdb768ee628094ca8b0030d4d6eb0220328789c9a2ec27ddaec0ad5ef58efded42e6ea17c2e1ce838f3d6913f5e95db601ffffffff5f9a06d3acdceb56be1bfeaa3e8a25e62d182fa24fefe899d1c17f1dad4c2028010000004a493046022100c45af050d3cea806cedd0ab22520c53ebe63b987b8954146cdca42487b84bdd6022100b9b027716a6b59e640da50a864d6dd8a0ef24c76ce62391fa3eabaf4d2886d2d01ffffffff0200e1f505000000004341046a0765b5865641ce08dd39690aade26dfbf5511430ca428a3089261361cef170e3929a68aee3d8d4848b0c5111b0a37b82b86ad559fd2a745b44d8e8d9dfdc0cac00180d8f000000004341046a0765b5865641ce08dd39690aade26dfbf5511430ca428a3089261361cef170e3929a68aee3d8d4848b0c5111b0a37b82b86ad559fd2a745b44d8e8d9dfdc0cac000000000100000002e2274e5fea1bf29d963914bd301aa63b64daaf8a3e88f119b5046ca5738a0f6b0000000048473044022016e7a727a061ea2254a6c358376aaa617ac537eb836c77d646ebda4c748aac8b0220192ce28bf9f2c06a6467e6531e27648d2b3e2e2bae85159c9242939840295ba501ffffffffe2274e5fea1bf29d963914bd301aa63b64daaf8a3e88f119b5046ca5738a0f6b010000004a493046022100b7a1a755588d4190118936e15cd217d133b0e4a53c3c15924010d5648d8925c9022100aaef031874db2114f2d869ac2de4ae53908fbfea5b2b1862e181626bb9005c9f01ffffffff0200e1f505000000004341044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032cb86a5eb5e56842e92e19141d60a01928f8dd2c875a390f67c1f6c94cfc617c0ea45afac00180d8f000000004341046a0765b5865641ce08dd39690aade26dfbf5511430ca428a3089261361cef170e3929a68aee3d8d4848b0c5111b0a37b82b86ad559fd2a745b44d8e8d9dfdc0cac00000000"), SER_NETWORK, PROTOCOL_VERSION); + stream >> block; + + CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + // Match the first transaction + filter.insert(uint256("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70")); + + CMerkleBlock merkleBlock(block, filter); + BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); + + BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); + pair pair = merkleBlock.vMatchedTxn[0]; + + BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70")); + BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0); + + vector vMatched; + BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched) == block.hashMerkleRoot); + BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); + for (unsigned int i = 0; i < vMatched.size(); i++) + BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); + + // Match an output from the second transaction (the pubkey for address 1DZTzaBHUDM7T3QvUKBz4qXMRpkg8jsfB5) + // This should match the third transaction because it spends the output matched + // It also matches the fourth transaction, which spends to the pubkey again + filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032cb86a5eb5e56842e92e19141d60a01928f8dd2c875a390f67c1f6c94cfc617c0ea45af")); + + merkleBlock = CMerkleBlock(block, filter); + BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); + + BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 4); + + BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]); + + BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256("0x28204cad1d7fc1d199e8ef4fa22f182de6258a3eaafe1bbe56ebdcacd3069a5f")); + BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1); + + BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256("0x6b0f8a73a56c04b519f1883e8aafda643ba61a30bd1439969df21bea5f4e27e2")); + BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 2); + + BOOST_CHECK(merkleBlock.vMatchedTxn[3].second == uint256("0x3c1d7e82342158e4109df2e0b6348b6e84e403d8b4046d7007663ace63cddb23")); + BOOST_CHECK(merkleBlock.vMatchedTxn[3].first == 3); + + BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched) == block.hashMerkleRoot); + BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); + for (unsigned int i = 0; i < vMatched.size(); i++) + BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); +} + +BOOST_AUTO_TEST_CASE(merkle_block_2_with_update_none) +{ + // Random real block (000000005a4ded781e667e06ceefafb71410b511fe0d5adc3e5a27ecbec34ae6) + // With 4 txes + CBlock block; + CDataStream stream(ParseHex("0100000075616236cc2126035fadb38deb65b9102cc2c41c09cdf29fc051906800000000fe7d5e12ef0ff901f6050211249919b1c0653771832b3a80c66cea42847f0ae1d4d26e49ffff001d00f0a4410401000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0804ffff001d029105ffffffff0100f2052a010000004341046d8709a041d34357697dfcb30a9d05900a6294078012bf3bb09c6f9b525f1d16d5503d7905db1ada9501446ea00728668fc5719aa80be2fdfc8a858a4dbdd4fbac00000000010000000255605dc6f5c3dc148b6da58442b0b2cd422be385eab2ebea4119ee9c268d28350000000049483045022100aa46504baa86df8a33b1192b1b9367b4d729dc41e389f2c04f3e5c7f0559aae702205e82253a54bf5c4f65b7428551554b2045167d6d206dfe6a2e198127d3f7df1501ffffffff55605dc6f5c3dc148b6da58442b0b2cd422be385eab2ebea4119ee9c268d2835010000004847304402202329484c35fa9d6bb32a55a70c0982f606ce0e3634b69006138683bcd12cbb6602200c28feb1e2555c3210f1dddb299738b4ff8bbe9667b68cb8764b5ac17b7adf0001ffffffff0200e1f505000000004341046a0765b5865641ce08dd39690aade26dfbf5511430ca428a3089261361cef170e3929a68aee3d8d4848b0c5111b0a37b82b86ad559fd2a745b44d8e8d9dfdc0cac00180d8f000000004341044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032cb86a5eb5e56842e92e19141d60a01928f8dd2c875a390f67c1f6c94cfc617c0ea45afac0000000001000000025f9a06d3acdceb56be1bfeaa3e8a25e62d182fa24fefe899d1c17f1dad4c2028000000004847304402205d6058484157235b06028c30736c15613a28bdb768ee628094ca8b0030d4d6eb0220328789c9a2ec27ddaec0ad5ef58efded42e6ea17c2e1ce838f3d6913f5e95db601ffffffff5f9a06d3acdceb56be1bfeaa3e8a25e62d182fa24fefe899d1c17f1dad4c2028010000004a493046022100c45af050d3cea806cedd0ab22520c53ebe63b987b8954146cdca42487b84bdd6022100b9b027716a6b59e640da50a864d6dd8a0ef24c76ce62391fa3eabaf4d2886d2d01ffffffff0200e1f505000000004341046a0765b5865641ce08dd39690aade26dfbf5511430ca428a3089261361cef170e3929a68aee3d8d4848b0c5111b0a37b82b86ad559fd2a745b44d8e8d9dfdc0cac00180d8f000000004341046a0765b5865641ce08dd39690aade26dfbf5511430ca428a3089261361cef170e3929a68aee3d8d4848b0c5111b0a37b82b86ad559fd2a745b44d8e8d9dfdc0cac000000000100000002e2274e5fea1bf29d963914bd301aa63b64daaf8a3e88f119b5046ca5738a0f6b0000000048473044022016e7a727a061ea2254a6c358376aaa617ac537eb836c77d646ebda4c748aac8b0220192ce28bf9f2c06a6467e6531e27648d2b3e2e2bae85159c9242939840295ba501ffffffffe2274e5fea1bf29d963914bd301aa63b64daaf8a3e88f119b5046ca5738a0f6b010000004a493046022100b7a1a755588d4190118936e15cd217d133b0e4a53c3c15924010d5648d8925c9022100aaef031874db2114f2d869ac2de4ae53908fbfea5b2b1862e181626bb9005c9f01ffffffff0200e1f505000000004341044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032cb86a5eb5e56842e92e19141d60a01928f8dd2c875a390f67c1f6c94cfc617c0ea45afac00180d8f000000004341046a0765b5865641ce08dd39690aade26dfbf5511430ca428a3089261361cef170e3929a68aee3d8d4848b0c5111b0a37b82b86ad559fd2a745b44d8e8d9dfdc0cac00000000"), SER_NETWORK, PROTOCOL_VERSION); + stream >> block; + + CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_NONE); + // Match the first transaction + filter.insert(uint256("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70")); + + CMerkleBlock merkleBlock(block, filter); + BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); + + BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); + pair pair = merkleBlock.vMatchedTxn[0]; + + BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256("0xe980fe9f792d014e73b95203dc1335c5f9ce19ac537a419e6df5b47aecb93b70")); + BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0); + + vector vMatched; + BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched) == block.hashMerkleRoot); + BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); + for (unsigned int i = 0; i < vMatched.size(); i++) + BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); + + // Match an output from the second transaction (the pubkey for address 1DZTzaBHUDM7T3QvUKBz4qXMRpkg8jsfB5) + // This should not match the third transaction though it spends the output matched + // It will match the fourth transaction, which has another pay-to-pubkey output to the same address + filter.insert(ParseHex("044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032cb86a5eb5e56842e92e19141d60a01928f8dd2c875a390f67c1f6c94cfc617c0ea45af")); + + merkleBlock = CMerkleBlock(block, filter); + BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); + + BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 3); + + BOOST_CHECK(pair == merkleBlock.vMatchedTxn[0]); + + BOOST_CHECK(merkleBlock.vMatchedTxn[1].second == uint256("0x28204cad1d7fc1d199e8ef4fa22f182de6258a3eaafe1bbe56ebdcacd3069a5f")); + BOOST_CHECK(merkleBlock.vMatchedTxn[1].first == 1); + + BOOST_CHECK(merkleBlock.vMatchedTxn[2].second == uint256("0x3c1d7e82342158e4109df2e0b6348b6e84e403d8b4046d7007663ace63cddb23")); + BOOST_CHECK(merkleBlock.vMatchedTxn[2].first == 3); + + BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched) == block.hashMerkleRoot); + BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); + for (unsigned int i = 0; i < vMatched.size(); i++) + BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); +} + +BOOST_AUTO_TEST_CASE(merkle_block_3_and_serialize) +{ + // Random real block (000000000000dab0130bbcc991d3d7ae6b81aa6f50a798888dfe62337458dc45) + // With one tx + CBlock block; + CDataStream stream(ParseHex("0100000079cda856b143d9db2c1caff01d1aecc8630d30625d10e8b4b8b0000000000000b50cc069d6a3e33e3ff84a5c41d9d3febe7c770fdcc96b2c3ff60abe184f196367291b4d4c86041b8fa45d630101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff08044c86041b020a02ffffffff0100f2052a01000000434104ecd3229b0571c3be876feaac0442a9f13c5a572742927af1dc623353ecf8c202225f64868137a18cdd85cbbb4c74fbccfd4f49639cf1bdc94a5672bb15ad5d4cac00000000"), SER_NETWORK, PROTOCOL_VERSION); + stream >> block; + + CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + // Match the only transaction + filter.insert(uint256("0x63194f18be0af63f2c6bc9dc0f777cbefed3d9415c4af83f3ee3a3d669c00cb5")); + + CMerkleBlock merkleBlock(block, filter); + BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); + + BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); + + BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256("0x63194f18be0af63f2c6bc9dc0f777cbefed3d9415c4af83f3ee3a3d669c00cb5")); + BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 0); + + vector vMatched; + BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched) == block.hashMerkleRoot); + BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); + for (unsigned int i = 0; i < vMatched.size(); i++) + BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); + + CDataStream merkleStream(SER_NETWORK, PROTOCOL_VERSION); + merkleStream << merkleBlock; + + vector vch = ParseHex("0100000079cda856b143d9db2c1caff01d1aecc8630d30625d10e8b4b8b0000000000000b50cc069d6a3e33e3ff84a5c41d9d3febe7c770fdcc96b2c3ff60abe184f196367291b4d4c86041b8fa45d630100000001b50cc069d6a3e33e3ff84a5c41d9d3febe7c770fdcc96b2c3ff60abe184f19630101"); + vector expected(vch.size()); + + for (unsigned int i = 0; i < vch.size(); i++) + expected[i] = (char)vch[i]; + + BOOST_CHECK_EQUAL_COLLECTIONS(expected.begin(), expected.end(), merkleStream.begin(), merkleStream.end()); +} + +BOOST_AUTO_TEST_CASE(merkle_block_4) +{ + // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6dea4) + // With 7 txes + CBlock block; + CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc880670100000000007f16c5962e8bd963659c793ce370d95f093bc7e367117b3c30c1f8fdd0d9728776381b4d4c86041b554b85290701000000010000000000000000000000000000000000000000000000000000000000000000ffffffff07044c86041b0136ffffffff0100f2052a01000000434104eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2c01ec0f0dd5b2e86e7168cefe0d81113c3807420ce13ad1357231a2252247d97a46a91ac000000000100000001bcad20a6a29827d1424f08989255120bf7f3e9e3cdaaa6bb31b0737fe048724300000000494830450220356e834b046cadc0f8ebb5a8a017b02de59c86305403dad52cd77b55af062ea10221009253cd6c119d4729b77c978e1e2aa19f5ea6e0e52b3f16e32fa608cd5bab753901ffffffff02008d380c010000001976a9142b4b8072ecbba129b6453c63e129e643207249ca88ac0065cd1d000000001976a9141b8dd13b994bcfc787b32aeadf58ccb3615cbd5488ac000000000100000003fdacf9b3eb077412e7a968d2e4f11b9a9dee312d666187ed77ee7d26af16cb0b000000008c493046022100ea1608e70911ca0de5af51ba57ad23b9a51db8d28f82c53563c56a05c20f5a87022100a8bdc8b4a8acc8634c6b420410150775eb7f2474f5615f7fccd65af30f310fbf01410465fdf49e29b06b9a1582287b6279014f834edc317695d125ef623c1cc3aaece245bd69fcad7508666e9c74a49dc9056d5fc14338ef38118dc4afae5fe2c585caffffffff309e1913634ecb50f3c4f83e96e70b2df071b497b8973a3e75429df397b5af83000000004948304502202bdb79c596a9ffc24e96f4386199aba386e9bc7b6071516e2b51dda942b3a1ed022100c53a857e76b724fc14d45311eac5019650d415c3abb5428f3aae16d8e69bec2301ffffffff2089e33491695080c9edc18a428f7d834db5b6d372df13ce2b1b0e0cbcb1e6c10000000049483045022100d4ce67c5896ee251c810ac1ff9ceccd328b497c8f553ab6e08431e7d40bad6b5022033119c0c2b7d792d31f1187779c7bd95aefd93d90a715586d73801d9b47471c601ffffffff0100714460030000001976a914c7b55141d097ea5df7a0ed330cf794376e53ec8d88ac0000000001000000045bf0e214aa4069a3e792ecee1e1bf0c1d397cde8dd08138f4b72a00681743447000000008b48304502200c45de8c4f3e2c1821f2fc878cba97b1e6f8807d94930713aa1c86a67b9bf1e40221008581abfef2e30f957815fc89978423746b2086375ca8ecf359c85c2a5b7c88ad01410462bb73f76ca0994fcb8b4271e6fb7561f5c0f9ca0cf6485261c4a0dc894f4ab844c6cdfb97cd0b60ffb5018ffd6238f4d87270efb1d3ae37079b794a92d7ec95ffffffffd669f7d7958d40fc59d2253d88e0f248e29b599c80bbcec344a83dda5f9aa72c000000008a473044022078124c8beeaa825f9e0b30bff96e564dd859432f2d0cb3b72d3d5d93d38d7e930220691d233b6c0f995be5acb03d70a7f7a65b6bc9bdd426260f38a1346669507a3601410462bb73f76ca0994fcb8b4271e6fb7561f5c0f9ca0cf6485261c4a0dc894f4ab844c6cdfb97cd0b60ffb5018ffd6238f4d87270efb1d3ae37079b794a92d7ec95fffffffff878af0d93f5229a68166cf051fd372bb7a537232946e0a46f53636b4dafdaa4000000008c493046022100c717d1714551663f69c3c5759bdbb3a0fcd3fab023abc0e522fe6440de35d8290221008d9cbe25bffc44af2b18e81c58eb37293fd7fe1c2e7b46fc37ee8c96c50ab1e201410462bb73f76ca0994fcb8b4271e6fb7561f5c0f9ca0cf6485261c4a0dc894f4ab844c6cdfb97cd0b60ffb5018ffd6238f4d87270efb1d3ae37079b794a92d7ec95ffffffff27f2b668859cd7f2f894aa0fd2d9e60963bcd07c88973f425f999b8cbfd7a1e2000000008c493046022100e00847147cbf517bcc2f502f3ddc6d284358d102ed20d47a8aa788a62f0db780022100d17b2d6fa84dcaf1c95d88d7e7c30385aecf415588d749afd3ec81f6022cecd701410462bb73f76ca0994fcb8b4271e6fb7561f5c0f9ca0cf6485261c4a0dc894f4ab844c6cdfb97cd0b60ffb5018ffd6238f4d87270efb1d3ae37079b794a92d7ec95ffffffff0100c817a8040000001976a914b6efd80d99179f4f4ff6f4dd0a007d018c385d2188ac000000000100000001834537b2f1ce8ef9373a258e10545ce5a50b758df616cd4356e0032554ebd3c4000000008b483045022100e68f422dd7c34fdce11eeb4509ddae38201773dd62f284e8aa9d96f85099d0b002202243bd399ff96b649a0fad05fa759d6a882f0af8c90cf7632c2840c29070aec20141045e58067e815c2f464c6a2a15f987758374203895710c2d452442e28496ff38ba8f5fd901dc20e29e88477167fe4fc299bf818fd0d9e1632d467b2a3d9503b1aaffffffff0280d7e636030000001976a914f34c3e10eb387efe872acb614c89e78bfca7815d88ac404b4c00000000001976a914a84e272933aaf87e1715d7786c51dfaeb5b65a6f88ac00000000010000000143ac81c8e6f6ef307dfe17f3d906d999e23e0189fda838c5510d850927e03ae7000000008c4930460221009c87c344760a64cb8ae6685a3eec2c1ac1bed5b88c87de51acd0e124f266c16602210082d07c037359c3a257b5c63ebd90f5a5edf97b2ac1c434b08ca998839f346dd40141040ba7e521fa7946d12edbb1d1e95a15c34bd4398195e86433c92b431cd315f455fe30032ede69cad9d1e1ed6c3c4ec0dbfced53438c625462afb792dcb098544bffffffff0240420f00000000001976a9144676d1b820d63ec272f1900d59d43bc6463d96f888ac40420f00000000001976a914648d04341d00d7968b3405c034adc38d4d8fb9bd88ac00000000010000000248cc917501ea5c55f4a8d2009c0567c40cfe037c2e71af017d0a452ff705e3f1000000008b483045022100bf5fdc86dc5f08a5d5c8e43a8c9d5b1ed8c65562e280007b52b133021acd9acc02205e325d613e555f772802bf413d36ba807892ed1a690a77811d3033b3de226e0a01410429fa713b124484cb2bd7b5557b2c0b9df7b2b1fee61825eadc5ae6c37a9920d38bfccdc7dc3cb0c47d7b173dbc9db8d37db0a33ae487982c59c6f8606e9d1791ffffffff41ed70551dd7e841883ab8f0b16bf04176b7d1480e4f0af9f3d4c3595768d068000000008b4830450221008513ad65187b903aed1102d1d0c47688127658c51106753fed0151ce9c16b80902201432b9ebcb87bd04ceb2de66035fbbaf4bf8b00d1cfe41f1a1f7338f9ad79d210141049d4cf80125bf50be1709f718c07ad15d0fc612b7da1f5570dddc35f2a352f0f27c978b06820edca9ef982c35fda2d255afba340068c5035552368bc7200c1488ffffffff0100093d00000000001976a9148edb68822f1ad580b043c7b3df2e400f8699eb4888ac00000000"), SER_NETWORK, PROTOCOL_VERSION); + stream >> block; + + CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_ALL); + // Match the last transaction + filter.insert(uint256("0x0a2a92f0bda4727d0a13eaddf4dd9ac6b5c61a1429e6b2b818f19b15df0ac154")); + + CMerkleBlock merkleBlock(block, filter); + BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); + + BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 1); + pair pair = merkleBlock.vMatchedTxn[0]; + + BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256("0x0a2a92f0bda4727d0a13eaddf4dd9ac6b5c61a1429e6b2b818f19b15df0ac154")); + BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 6); + + vector vMatched; + BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched) == block.hashMerkleRoot); + BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); + for (unsigned int i = 0; i < vMatched.size(); i++) + BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); + + // Also match the 4th transaction + filter.insert(uint256("0x02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041")); + merkleBlock = CMerkleBlock(block, filter); + BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); + + BOOST_CHECK(merkleBlock.vMatchedTxn.size() == 2); + + BOOST_CHECK(merkleBlock.vMatchedTxn[0].second == uint256("0x02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041")); + BOOST_CHECK(merkleBlock.vMatchedTxn[0].first == 3); + + BOOST_CHECK(merkleBlock.vMatchedTxn[1] == pair); + + BOOST_CHECK(merkleBlock.txn.ExtractMatches(vMatched) == block.hashMerkleRoot); + BOOST_CHECK(vMatched.size() == merkleBlock.vMatchedTxn.size()); + for (unsigned int i = 0; i < vMatched.size(); i++) + BOOST_CHECK(vMatched[i] == merkleBlock.vMatchedTxn[i].second); +} + +BOOST_AUTO_TEST_CASE(merkle_block_4_test_p2pubkey_only) +{ + // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6dea4) + // With 7 txes + CBlock block; + CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc880670100000000007f16c5962e8bd963659c793ce370d95f093bc7e367117b3c30c1f8fdd0d9728776381b4d4c86041b554b85290701000000010000000000000000000000000000000000000000000000000000000000000000ffffffff07044c86041b0136ffffffff0100f2052a01000000434104eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2c01ec0f0dd5b2e86e7168cefe0d81113c3807420ce13ad1357231a2252247d97a46a91ac000000000100000001bcad20a6a29827d1424f08989255120bf7f3e9e3cdaaa6bb31b0737fe048724300000000494830450220356e834b046cadc0f8ebb5a8a017b02de59c86305403dad52cd77b55af062ea10221009253cd6c119d4729b77c978e1e2aa19f5ea6e0e52b3f16e32fa608cd5bab753901ffffffff02008d380c010000001976a9142b4b8072ecbba129b6453c63e129e643207249ca88ac0065cd1d000000001976a9141b8dd13b994bcfc787b32aeadf58ccb3615cbd5488ac000000000100000003fdacf9b3eb077412e7a968d2e4f11b9a9dee312d666187ed77ee7d26af16cb0b000000008c493046022100ea1608e70911ca0de5af51ba57ad23b9a51db8d28f82c53563c56a05c20f5a87022100a8bdc8b4a8acc8634c6b420410150775eb7f2474f5615f7fccd65af30f310fbf01410465fdf49e29b06b9a1582287b6279014f834edc317695d125ef623c1cc3aaece245bd69fcad7508666e9c74a49dc9056d5fc14338ef38118dc4afae5fe2c585caffffffff309e1913634ecb50f3c4f83e96e70b2df071b497b8973a3e75429df397b5af83000000004948304502202bdb79c596a9ffc24e96f4386199aba386e9bc7b6071516e2b51dda942b3a1ed022100c53a857e76b724fc14d45311eac5019650d415c3abb5428f3aae16d8e69bec2301ffffffff2089e33491695080c9edc18a428f7d834db5b6d372df13ce2b1b0e0cbcb1e6c10000000049483045022100d4ce67c5896ee251c810ac1ff9ceccd328b497c8f553ab6e08431e7d40bad6b5022033119c0c2b7d792d31f1187779c7bd95aefd93d90a715586d73801d9b47471c601ffffffff0100714460030000001976a914c7b55141d097ea5df7a0ed330cf794376e53ec8d88ac0000000001000000045bf0e214aa4069a3e792ecee1e1bf0c1d397cde8dd08138f4b72a00681743447000000008b48304502200c45de8c4f3e2c1821f2fc878cba97b1e6f8807d94930713aa1c86a67b9bf1e40221008581abfef2e30f957815fc89978423746b2086375ca8ecf359c85c2a5b7c88ad01410462bb73f76ca0994fcb8b4271e6fb7561f5c0f9ca0cf6485261c4a0dc894f4ab844c6cdfb97cd0b60ffb5018ffd6238f4d87270efb1d3ae37079b794a92d7ec95ffffffffd669f7d7958d40fc59d2253d88e0f248e29b599c80bbcec344a83dda5f9aa72c000000008a473044022078124c8beeaa825f9e0b30bff96e564dd859432f2d0cb3b72d3d5d93d38d7e930220691d233b6c0f995be5acb03d70a7f7a65b6bc9bdd426260f38a1346669507a3601410462bb73f76ca0994fcb8b4271e6fb7561f5c0f9ca0cf6485261c4a0dc894f4ab844c6cdfb97cd0b60ffb5018ffd6238f4d87270efb1d3ae37079b794a92d7ec95fffffffff878af0d93f5229a68166cf051fd372bb7a537232946e0a46f53636b4dafdaa4000000008c493046022100c717d1714551663f69c3c5759bdbb3a0fcd3fab023abc0e522fe6440de35d8290221008d9cbe25bffc44af2b18e81c58eb37293fd7fe1c2e7b46fc37ee8c96c50ab1e201410462bb73f76ca0994fcb8b4271e6fb7561f5c0f9ca0cf6485261c4a0dc894f4ab844c6cdfb97cd0b60ffb5018ffd6238f4d87270efb1d3ae37079b794a92d7ec95ffffffff27f2b668859cd7f2f894aa0fd2d9e60963bcd07c88973f425f999b8cbfd7a1e2000000008c493046022100e00847147cbf517bcc2f502f3ddc6d284358d102ed20d47a8aa788a62f0db780022100d17b2d6fa84dcaf1c95d88d7e7c30385aecf415588d749afd3ec81f6022cecd701410462bb73f76ca0994fcb8b4271e6fb7561f5c0f9ca0cf6485261c4a0dc894f4ab844c6cdfb97cd0b60ffb5018ffd6238f4d87270efb1d3ae37079b794a92d7ec95ffffffff0100c817a8040000001976a914b6efd80d99179f4f4ff6f4dd0a007d018c385d2188ac000000000100000001834537b2f1ce8ef9373a258e10545ce5a50b758df616cd4356e0032554ebd3c4000000008b483045022100e68f422dd7c34fdce11eeb4509ddae38201773dd62f284e8aa9d96f85099d0b002202243bd399ff96b649a0fad05fa759d6a882f0af8c90cf7632c2840c29070aec20141045e58067e815c2f464c6a2a15f987758374203895710c2d452442e28496ff38ba8f5fd901dc20e29e88477167fe4fc299bf818fd0d9e1632d467b2a3d9503b1aaffffffff0280d7e636030000001976a914f34c3e10eb387efe872acb614c89e78bfca7815d88ac404b4c00000000001976a914a84e272933aaf87e1715d7786c51dfaeb5b65a6f88ac00000000010000000143ac81c8e6f6ef307dfe17f3d906d999e23e0189fda838c5510d850927e03ae7000000008c4930460221009c87c344760a64cb8ae6685a3eec2c1ac1bed5b88c87de51acd0e124f266c16602210082d07c037359c3a257b5c63ebd90f5a5edf97b2ac1c434b08ca998839f346dd40141040ba7e521fa7946d12edbb1d1e95a15c34bd4398195e86433c92b431cd315f455fe30032ede69cad9d1e1ed6c3c4ec0dbfced53438c625462afb792dcb098544bffffffff0240420f00000000001976a9144676d1b820d63ec272f1900d59d43bc6463d96f888ac40420f00000000001976a914648d04341d00d7968b3405c034adc38d4d8fb9bd88ac00000000010000000248cc917501ea5c55f4a8d2009c0567c40cfe037c2e71af017d0a452ff705e3f1000000008b483045022100bf5fdc86dc5f08a5d5c8e43a8c9d5b1ed8c65562e280007b52b133021acd9acc02205e325d613e555f772802bf413d36ba807892ed1a690a77811d3033b3de226e0a01410429fa713b124484cb2bd7b5557b2c0b9df7b2b1fee61825eadc5ae6c37a9920d38bfccdc7dc3cb0c47d7b173dbc9db8d37db0a33ae487982c59c6f8606e9d1791ffffffff41ed70551dd7e841883ab8f0b16bf04176b7d1480e4f0af9f3d4c3595768d068000000008b4830450221008513ad65187b903aed1102d1d0c47688127658c51106753fed0151ce9c16b80902201432b9ebcb87bd04ceb2de66035fbbaf4bf8b00d1cfe41f1a1f7338f9ad79d210141049d4cf80125bf50be1709f718c07ad15d0fc612b7da1f5570dddc35f2a352f0f27c978b06820edca9ef982c35fda2d255afba340068c5035552368bc7200c1488ffffffff0100093d00000000001976a9148edb68822f1ad580b043c7b3df2e400f8699eb4888ac00000000"), SER_NETWORK, PROTOCOL_VERSION); + stream >> block; + + CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_P2PUBKEY_ONLY); + // Match the generation pubkey + filter.insert(ParseHex("04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2c01ec0f0dd5b2e86e7168cefe0d81113c3807420ce13ad1357231a2252247d97a46a91")); + // ...and the output address of the 4th transaction + filter.insert(ParseHex("b6efd80d99179f4f4ff6f4dd0a007d018c385d21")); + + CMerkleBlock merkleBlock(block, filter); + BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); + + // We should match the generation outpoint + BOOST_CHECK(filter.contains(COutPoint(uint256("0x147caa76786596590baa4e98f5d9f48b86c7765e489f7a6ff3360fe5c674360b"), 0))); + // ... but not the 4th transaction's output (its not pay-2-pubkey) + BOOST_CHECK(!filter.contains(COutPoint(uint256("0x02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041"), 0))); +} + +BOOST_AUTO_TEST_CASE(merkle_block_4_test_update_none) +{ + // Random real block (000000000000b731f2eef9e8c63173adfb07e41bd53eb0ef0a6b720d6cb6dea4) + // With 7 txes + CBlock block; + CDataStream stream(ParseHex("0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc880670100000000007f16c5962e8bd963659c793ce370d95f093bc7e367117b3c30c1f8fdd0d9728776381b4d4c86041b554b85290701000000010000000000000000000000000000000000000000000000000000000000000000ffffffff07044c86041b0136ffffffff0100f2052a01000000434104eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2c01ec0f0dd5b2e86e7168cefe0d81113c3807420ce13ad1357231a2252247d97a46a91ac000000000100000001bcad20a6a29827d1424f08989255120bf7f3e9e3cdaaa6bb31b0737fe048724300000000494830450220356e834b046cadc0f8ebb5a8a017b02de59c86305403dad52cd77b55af062ea10221009253cd6c119d4729b77c978e1e2aa19f5ea6e0e52b3f16e32fa608cd5bab753901ffffffff02008d380c010000001976a9142b4b8072ecbba129b6453c63e129e643207249ca88ac0065cd1d000000001976a9141b8dd13b994bcfc787b32aeadf58ccb3615cbd5488ac000000000100000003fdacf9b3eb077412e7a968d2e4f11b9a9dee312d666187ed77ee7d26af16cb0b000000008c493046022100ea1608e70911ca0de5af51ba57ad23b9a51db8d28f82c53563c56a05c20f5a87022100a8bdc8b4a8acc8634c6b420410150775eb7f2474f5615f7fccd65af30f310fbf01410465fdf49e29b06b9a1582287b6279014f834edc317695d125ef623c1cc3aaece245bd69fcad7508666e9c74a49dc9056d5fc14338ef38118dc4afae5fe2c585caffffffff309e1913634ecb50f3c4f83e96e70b2df071b497b8973a3e75429df397b5af83000000004948304502202bdb79c596a9ffc24e96f4386199aba386e9bc7b6071516e2b51dda942b3a1ed022100c53a857e76b724fc14d45311eac5019650d415c3abb5428f3aae16d8e69bec2301ffffffff2089e33491695080c9edc18a428f7d834db5b6d372df13ce2b1b0e0cbcb1e6c10000000049483045022100d4ce67c5896ee251c810ac1ff9ceccd328b497c8f553ab6e08431e7d40bad6b5022033119c0c2b7d792d31f1187779c7bd95aefd93d90a715586d73801d9b47471c601ffffffff0100714460030000001976a914c7b55141d097ea5df7a0ed330cf794376e53ec8d88ac0000000001000000045bf0e214aa4069a3e792ecee1e1bf0c1d397cde8dd08138f4b72a00681743447000000008b48304502200c45de8c4f3e2c1821f2fc878cba97b1e6f8807d94930713aa1c86a67b9bf1e40221008581abfef2e30f957815fc89978423746b2086375ca8ecf359c85c2a5b7c88ad01410462bb73f76ca0994fcb8b4271e6fb7561f5c0f9ca0cf6485261c4a0dc894f4ab844c6cdfb97cd0b60ffb5018ffd6238f4d87270efb1d3ae37079b794a92d7ec95ffffffffd669f7d7958d40fc59d2253d88e0f248e29b599c80bbcec344a83dda5f9aa72c000000008a473044022078124c8beeaa825f9e0b30bff96e564dd859432f2d0cb3b72d3d5d93d38d7e930220691d233b6c0f995be5acb03d70a7f7a65b6bc9bdd426260f38a1346669507a3601410462bb73f76ca0994fcb8b4271e6fb7561f5c0f9ca0cf6485261c4a0dc894f4ab844c6cdfb97cd0b60ffb5018ffd6238f4d87270efb1d3ae37079b794a92d7ec95fffffffff878af0d93f5229a68166cf051fd372bb7a537232946e0a46f53636b4dafdaa4000000008c493046022100c717d1714551663f69c3c5759bdbb3a0fcd3fab023abc0e522fe6440de35d8290221008d9cbe25bffc44af2b18e81c58eb37293fd7fe1c2e7b46fc37ee8c96c50ab1e201410462bb73f76ca0994fcb8b4271e6fb7561f5c0f9ca0cf6485261c4a0dc894f4ab844c6cdfb97cd0b60ffb5018ffd6238f4d87270efb1d3ae37079b794a92d7ec95ffffffff27f2b668859cd7f2f894aa0fd2d9e60963bcd07c88973f425f999b8cbfd7a1e2000000008c493046022100e00847147cbf517bcc2f502f3ddc6d284358d102ed20d47a8aa788a62f0db780022100d17b2d6fa84dcaf1c95d88d7e7c30385aecf415588d749afd3ec81f6022cecd701410462bb73f76ca0994fcb8b4271e6fb7561f5c0f9ca0cf6485261c4a0dc894f4ab844c6cdfb97cd0b60ffb5018ffd6238f4d87270efb1d3ae37079b794a92d7ec95ffffffff0100c817a8040000001976a914b6efd80d99179f4f4ff6f4dd0a007d018c385d2188ac000000000100000001834537b2f1ce8ef9373a258e10545ce5a50b758df616cd4356e0032554ebd3c4000000008b483045022100e68f422dd7c34fdce11eeb4509ddae38201773dd62f284e8aa9d96f85099d0b002202243bd399ff96b649a0fad05fa759d6a882f0af8c90cf7632c2840c29070aec20141045e58067e815c2f464c6a2a15f987758374203895710c2d452442e28496ff38ba8f5fd901dc20e29e88477167fe4fc299bf818fd0d9e1632d467b2a3d9503b1aaffffffff0280d7e636030000001976a914f34c3e10eb387efe872acb614c89e78bfca7815d88ac404b4c00000000001976a914a84e272933aaf87e1715d7786c51dfaeb5b65a6f88ac00000000010000000143ac81c8e6f6ef307dfe17f3d906d999e23e0189fda838c5510d850927e03ae7000000008c4930460221009c87c344760a64cb8ae6685a3eec2c1ac1bed5b88c87de51acd0e124f266c16602210082d07c037359c3a257b5c63ebd90f5a5edf97b2ac1c434b08ca998839f346dd40141040ba7e521fa7946d12edbb1d1e95a15c34bd4398195e86433c92b431cd315f455fe30032ede69cad9d1e1ed6c3c4ec0dbfced53438c625462afb792dcb098544bffffffff0240420f00000000001976a9144676d1b820d63ec272f1900d59d43bc6463d96f888ac40420f00000000001976a914648d04341d00d7968b3405c034adc38d4d8fb9bd88ac00000000010000000248cc917501ea5c55f4a8d2009c0567c40cfe037c2e71af017d0a452ff705e3f1000000008b483045022100bf5fdc86dc5f08a5d5c8e43a8c9d5b1ed8c65562e280007b52b133021acd9acc02205e325d613e555f772802bf413d36ba807892ed1a690a77811d3033b3de226e0a01410429fa713b124484cb2bd7b5557b2c0b9df7b2b1fee61825eadc5ae6c37a9920d38bfccdc7dc3cb0c47d7b173dbc9db8d37db0a33ae487982c59c6f8606e9d1791ffffffff41ed70551dd7e841883ab8f0b16bf04176b7d1480e4f0af9f3d4c3595768d068000000008b4830450221008513ad65187b903aed1102d1d0c47688127658c51106753fed0151ce9c16b80902201432b9ebcb87bd04ceb2de66035fbbaf4bf8b00d1cfe41f1a1f7338f9ad79d210141049d4cf80125bf50be1709f718c07ad15d0fc612b7da1f5570dddc35f2a352f0f27c978b06820edca9ef982c35fda2d255afba340068c5035552368bc7200c1488ffffffff0100093d00000000001976a9148edb68822f1ad580b043c7b3df2e400f8699eb4888ac00000000"), SER_NETWORK, PROTOCOL_VERSION); + stream >> block; + + CBloomFilter filter(10, 0.000001, 0, BLOOM_UPDATE_NONE); + // Match the generation pubkey + filter.insert(ParseHex("04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2c01ec0f0dd5b2e86e7168cefe0d81113c3807420ce13ad1357231a2252247d97a46a91")); + // ...and the output address of the 4th transaction + filter.insert(ParseHex("b6efd80d99179f4f4ff6f4dd0a007d018c385d21")); + + CMerkleBlock merkleBlock(block, filter); + BOOST_CHECK(merkleBlock.header.GetHash() == block.GetHash()); + + // We shouldn't match any outpoints (UPDATE_NONE) + BOOST_CHECK(!filter.contains(COutPoint(uint256("0x147caa76786596590baa4e98f5d9f48b86c7765e489f7a6ff3360fe5c674360b"), 0))); + BOOST_CHECK(!filter.contains(COutPoint(uint256("0x02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041"), 0))); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/canonical_tests.cpp b/src/test/canonical_tests.cpp index 799dea4..9fefe1a 100644 --- a/src/test/canonical_tests.cpp +++ b/src/test/canonical_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/canonical_tests.cpp~ b/src/test/canonical_tests.cpp~ new file mode 100644 index 0000000..2fa7036 --- /dev/null +++ b/src/test/canonical_tests.cpp~ @@ -0,0 +1,97 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "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& jsondata); + +BOOST_AUTO_TEST_SUITE(canonical_tests) + +// OpenSSL-based test for canonical signature (without test for hashtype byte) +bool static IsCanonicalSignature_OpenSSL_inner(const std::vector& vchSig) +{ + if (vchSig.size() == 0) + return false; + const unsigned char *input = &vchSig[0]; + ECDSA_SIG *psig = NULL; + d2i_ECDSA_SIG(&psig, &input, vchSig.size()); + if (psig == NULL) + return false; + unsigned char buf[256]; + unsigned char *pbuf = buf; + unsigned int nLen = i2d_ECDSA_SIG(psig, NULL); + if (nLen != vchSig.size()) { + ECDSA_SIG_free(psig); + return false; + } + nLen = i2d_ECDSA_SIG(psig, &pbuf); + ECDSA_SIG_free(psig); + return (memcmp(&vchSig[0], &buf[0], nLen) == 0); +} + +// OpenSSL-based test for canonical signature +bool static IsCanonicalSignature_OpenSSL(const std::vector &vchSignature) { + if (vchSignature.size() < 1) + return false; + if (vchSignature.size() > 127) + return false; + if (vchSignature[vchSignature.size() - 1] & 0x7C) + return false; + + std::vector vchSig(vchSignature); + vchSig.pop_back(); + if (!IsCanonicalSignature_OpenSSL_inner(vchSig)) + return false; + return true; +} + +BOOST_AUTO_TEST_CASE(script_canon) +{ + 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, SCRIPT_VERIFY_STRICTENC), test); + BOOST_CHECK_MESSAGE(IsCanonicalSignature_OpenSSL(sig), test); + } + } +} + +BOOST_AUTO_TEST_CASE(script_noncanon) +{ + 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, SCRIPT_VERIFY_STRICTENC), test); + BOOST_CHECK_MESSAGE(!IsCanonicalSignature_OpenSSL(sig), test); + } + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/compress_tests.cpp b/src/test/compress_tests.cpp index 53b1c79..e3e32fb 100644 --- a/src/test/compress_tests.cpp +++ b/src/test/compress_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/compress_tests.cpp~ b/src/test/compress_tests.cpp~ new file mode 100644 index 0000000..a9e0d3d --- /dev/null +++ b/src/test/compress_tests.cpp~ @@ -0,0 +1,65 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +// amounts 0.01 .. 100.00 +#define NUM_MULTIPLES_CENT 10000 + +// amounts 1 .. 10000 +#define NUM_MULTIPLES_1BTM 10000 + +// amounts 50 .. 21000000 +#define NUM_MULTIPLES_50BTM 420000 + +BOOST_AUTO_TEST_SUITE(compress_tests) + +bool static TestEncode(uint64_t in) { + return in == CTxOutCompressor::DecompressAmount(CTxOutCompressor::CompressAmount(in)); +} + +bool static TestDecode(uint64_t in) { + return in == CTxOutCompressor::CompressAmount(CTxOutCompressor::DecompressAmount(in)); +} + +bool static TestPair(uint64_t dec, uint64_t enc) { + return CTxOutCompressor::CompressAmount(dec) == enc && + CTxOutCompressor::DecompressAmount(enc) == dec; +} + +BOOST_AUTO_TEST_CASE(compress_amounts) +{ + BOOST_CHECK(TestPair( 0, 0x0)); + BOOST_CHECK(TestPair( 1, 0x1)); + BOOST_CHECK(TestPair( CENT, 0x7)); + BOOST_CHECK(TestPair( COIN, 0x9)); + BOOST_CHECK(TestPair( 50*COIN, 0x32)); + BOOST_CHECK(TestPair(21000000*COIN, 0x1406f40)); + + for (uint64_t i = 1; i <= NUM_MULTIPLES_UNIT; i++) + BOOST_CHECK(TestEncode(i)); + + for (uint64_t i = 1; i <= NUM_MULTIPLES_CENT; i++) + BOOST_CHECK(TestEncode(i * CENT)); + + for (uint64_t i = 1; i <= NUM_MULTIPLES_1BTM; i++) + BOOST_CHECK(TestEncode(i * COIN)); + + for (uint64_t i = 1; i <= NUM_MULTIPLES_50BTM; i++) + BOOST_CHECK(TestEncode(i * 50 * COIN)); + + for (uint64_t i = 0; i < 100000; i++) + BOOST_CHECK(TestDecode(i)); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/data/sighash.json b/src/test/data/sighash.json index f280396..89d5884 100644 --- a/src/test/data/sighash.json +++ b/src/test/data/sighash.json @@ -34,7 +34,7 @@ ["2b3bd0dd04a1832f893bf49a776cd567ec4b43945934f4786b615d6cb850dfc0349b33301a000000000565ac000051cf80c670f6ddafab63411adb4d91a69c11d9ac588898cbfb4cb16061821cc104325c895103000000025163ffffffffa9e2d7506d2d7d53b882bd377bbcc941f7a0f23fd15d2edbef3cd9df8a4c39d10200000009ac63006a52526a5265ffffffff44c099cdf10b10ce87d4b38658d002fd6ea17ae4a970053c05401d86d6e75f99000000000963ab53526a5252ab63ffffffff035af69c01000000000100ba9b8b0400000000004cead10500000000026a520b77d667", "ab52abac526553", 3, -1955078165, "eb9ceecc3b401224cb79a44d23aa8f428e29f1405daf69b4e01910b848ef1523"], ["35df11f004a48ba439aba878fe9df20cc935b4a761c262b1b707e6f2b33e2bb7565cd68b130000000000ffffffffb2a2f99abf64163bb57ca900500b863f40c02632dfd9ea2590854c5fb4811da90200000006ac006363636affffffffaf9d89b2a8d2670ca37c8f7c140600b81259f2e037cb4590578ec6e37af8bf200000000005abac6a655270a4751eb551f058a93301ffeda2e252b6614a1fdd0e283e1d9fe53c96c5bbaafaac57b8030000000153ffffffff020d9f3b02000000000100ed7008030000000004abac000000000000", "abac", 3, 593793071, "88fdee1c2d4aeead71d62396e28dc4d00e5a23498eea66844b9f5d26d1f21042"], ["a08ff466049fb7619e25502ec22fedfb229eaa1fe275aa0b5a23154b318441bf547989d0510000000005ab5363636affffffff2b0e335cb5383886751cdbd993dc0720817745a6b1c9b8ab3d15547fc9aafd03000000000965656a536a52656a532b53d10584c290d3ac1ab74ab0a19201a4a039cb59dc58719821c024f6bf2eb26322b33f010000000965ac6aac0053ab6353ffffffff048decba6ebbd2db81e416e39dde1f821ba69329725e702bcdea20c5cc0ecc6402000000086363ab5351ac6551466e377b0468c0fa00000000000651ab53ac6a513461c6010000000008636a636365535100eeb3dc010000000006526a52ac516a43f362010000000005000063536500000000", "0063516a", 1, -1158911348, "f6a1ecb50bd7c2594ebecea5a1aa23c905087553e40486dade793c2f127fdfae"], - ["5ac2f17d03bc902e2bac2469907ec7d01a62b5729340bc58c343b7145b66e6b97d434b30fa000000000163ffffffff44028aa674192caa0d0b4ebfeb969c284cb16b80c312d096efd80c6c6b094cca000000000763acabac516a52ffffffff10c809106e04b10f9b43085855521270fb48ab57RPCPORTe7474657c6c625062d2d030000000351636595a0a97004a1b69603000000000465ab005352ad68010000000008636a5263acac5100da7105010000000002acab90325200000000000000000000", "6a6aab516a63526353", 2, 1518400956, "f7efb74b1dcc49d316b49c632301bc46f98d333c427e55338be60c7ef0d953be"], + ["5ac2f17d03bc902e2bac2469907ec7d01a62b5729340bc58c343b7145b66e6b97d434b30fa000000000163ffffffff44028aa674192caa0d0b4ebfeb969c284cb16b80c312d096efd80c6c6b094cca000000000763acabac516a52ffffffff10c809106e04b10f9b43085855521270fb48ab5740001e7474657c6c625062d2d030000000351636595a0a97004a1b69603000000000465ab005352ad68010000000008636a5263acac5100da7105010000000002acab90325200000000000000000000", "6a6aab516a63526353", 2, 1518400956, "f7efb74b1dcc49d316b49c632301bc46f98d333c427e55338be60c7ef0d953be"], ["aeb2e11902dc3770c218b97f0b1960d6ee70459ecb6a95eff3f05295dc1ef4a0884f10ba460300000005516352526393e9b1b3e6ae834102d699ddd3845a1e159aa7cf7635edb5c02003f7830fee3788b795f20100000009ab006a526553ac006ad8809c570469290e0400000000050000abab00b10fd5040000000008ab655263abac53ab630b180300000000009d9993040000000002516300000000", "5351ababac6a65", 0, 1084852870, "f2286001af0b0170cbdad92693d0a5ebaa8262a4a9d66e002f6d79a8c94026d1"], ["9860ca9a0294ff4812534def8c3a3e3db35b817e1a2ddb7f0bf673f70eab71bb79e90a2f3100000000086a636551acac5165ffffffffed4d6d3cd9ff9b2d490e0c089739121161a1445844c3e204296816ab06e0a83702000000035100ac88d0db5201c3b59a050000000005ac6a0051ab00000000", "535263ab006a526aab", 1, -962088116, "30df2473e1403e2b8e637e576825f785528d998af127d501556e5f7f5ed89a2a"], ["4ddaa680026ec4d8060640304b86823f1ac760c260cef81d85bd847952863d629a3002b54b0200000008526365636a656aab65457861fc6c24bdc760c8b2e906b6656edaf9ed22b5f50e1fb29ec076ceadd9e8ebcb6b000000000152ffffffff033ff04f00000000000551526a00657a1d900300000000002153af040000000003006a6300000000", "ab526a53acabab", 0, 1055317633, "7f21b62267ed52462e371a917eb3542569a4049b9dfca2de3c75872b39510b26"], @@ -111,7 +111,7 @@ ["6dfd2f98046b08e7e2ef5fff153e00545faf7076699012993c7a30cb1a50ec528281a9022f030000000152ffffffff1f535e4851920b968e6c437d84d6ecf586984ebddb7d5db6ae035bd02ba222a8010000000651006a53ab51605072acb3e17939fa0737bc3ee43bc393b4acd58451fc4ffeeedc06df9fc649828822d5010000000253525a4955221715f27788d302382112cf60719be9ae159c51f394519bd5f7e70a4f9816c7020200000009526a6a51636aab656a36d3a5ff0445548e0100000000086a6a00516a52655167030b050000000004ac6a63525cfda8030000000000e158200000000000010000000000", "535263ac6a65515153", 3, 585774166, "72b7da10704c3ca7d1deb60c31b718ee12c70dc9dfb9ae3461edce50789fe2ba"], ["187eafed01389a45e75e9dda526d3acbbd41e6414936b3356473d1f9793d161603efdb45670100000002ab00ffffffff04371c8202000000000563630063523b3bde02000000000753516563006300e9e765010000000005516aac656a373f9805000000000665525352acab08d46763", "ab", 0, 122457992, "393aa6c758e0eed15fa4af6d9e2d7c63f49057246dbb92b4268ec24fc87301ca"], ["7d50b977035d50411d814d296da9f7965ddc56f3250961ca5ba805cadd0454e7c521e31b0300000000003d0416c2cf115a397bacf615339f0e54f6c35ffec95aa009284d38390bdde1595cc7aa7c0100000005ab52ac5365ffffffff4232c6e796544d5ac848c9dc8d25cfa74e32e847a5fc74c74d8f38ca51188562030000000653ac51006a51ffffffff016bd8bb00000000000465ab5253163526f3", "51ab526a00005353", 1, -1311316785, "60b7544319b42e4159976c35c32c2644f0adf42eff13be1dc2f726fc0b6bb492"], - ["2a45cd1001bf642a2315d4a427eddcc1e2b0209b1c6abd2db81a800c5f1af32812de42032702000000050051525200ffffffff032177db050000000005530051abac49186f000000000004ab6aab00645c0000000000000765655263acabac00000000", "6a65", 0, -1774715722, "6a9ac3f7da4c7735fbc91f728b52ecbd602233208f96ac55P2PPORT6074a5db118a"], + ["2a45cd1001bf642a2315d4a427eddcc1e2b0209b1c6abd2db81a800c5f1af32812de42032702000000050051525200ffffffff032177db050000000005530051abac49186f000000000004ab6aab00645c0000000000000765655263acabac00000000", "6a65", 0, -1774715722, "6a9ac3f7da4c7735fbc91f728b52ecbd602233208f96ac55400026074a5db118a"], ["479358c202427f3c8d19e2ea3def6d6d3ef2281b4a93cd76214f0c7d8f040aa042fe19f71f0300000001abffffffffa2709be556cf6ecaa5ef530df9e4d056d0ed57ce96de55a5b1f369fa40d4e74a020000000700006a51635365c426be3f02af578505000000000363ab63fd8f590500000000065153abac53632dfb14b3", "520063ab51", 1, -763226778, "cfe147982afacde044ce66008cbc5b1e9f0fd9b8ed52b59fc7c0fecf95a39b0e"], ["76179a8e03bec40747ad65ab0f8a21bc0d125b5c3c17ad5565556d5cb03ade7c83b4f32d98030000000151ffffffff99b900504e0c02b97a65e24f3ad8435dfa54e3c368f4e654803b756d011d24150200000003ac5353617a04ac61bb6cf697cfa4726657ba35ed0031432da8c0ffb252a190278830f9bd54f0320100000006656551005153c8e8fc8803677c77020000000007ac6553535253ac70f442030000000001535be0f20200000000026300bf46cb3a", "6aab52", 1, -58495673, "35e94b3776a6729d20aa2f3ddeeb06d3aad1c14cc4cde52fd21a4efc212ea16c"], ["75ae53c2042f7546223ce5d5f9e00a968ddc68d52e8932ef2013fa40ce4e8c6ed0b6195cde01000000056563ac630079da0452c20697382e3dba6f4fc300da5f52e95a9dca379bb792907db872ba751b8024ee0300000009655151536500005163ffffffffe091b6d43f51ff00eff0ccfbc99b72d3aff208e0f44b44dfa5e1c7322cfc0c5f01000000075200005363ab63ffffffff7e96c3b83443260ac5cfd18258574fbc4225c630d3950df812bf51dceaeb0f9103000000065365655165639a6bf70b01b3e14305000000000563530063ac00000000", "6300ab00ac", 2, 982422189, "ee4ea49d2aae0dbba05f0b9785172da54408eb1ec67d36759ff7ed25bfc28766"], @@ -431,7 +431,7 @@ ["584e8d6c035a6b2f9dac2791b980a485994bf38e876d9dda9b77ad156eee02fa39e19224a60300000003ab636529db326cc8686a339b79ab6b6e82794a18e0aabc19d9ad13f31dee9d7aad8eff38288588020000000452530052ffffffff09a41f07755c16cea1c7e193c765807d18cadddca6ec1c2ed7f5dcdca99e90e80000000001acffffffff01cba62305000000000451ac63acccdf1f67", "ab536a6363", 2, -27393461, "1125645b49202dca2df2d76dae51877387903a096a9d3f66b5ac80e042c95788"], ["83a583d204d926f2ee587a83dd526cf1e25a44bb668e45370798f91a2907d184f7cddcbbc7030000000700ab6565536a539f71d3776300dffdfa0cdd1c3784c9a1f773e34041ca400193612341a9c42df64e3f550e01000000050052515251ffffffff52dab2034ab0648553a1bb8fc4e924b2c89ed97c18dfc8a63e248b454035564b01000000015139ab54708c7d4d2c2886290f08a5221cf69592a810fd1979d7b63d35c271961e710424fd0300000005ac65ac5251ffffffff01168f7c030000000000a85e5fb0", "6a536353656a00", 0, 179595345, "5350a31ac954a0b49931239d0ecafbf34d035a537fd0c545816b8fdc355e9961"], ["ffd35d51042f290108fcb6ea49a560ba0a6560f9181da7453a55dfdbdfe672dc800b39e7320200000006630065516a65f2166db2e3827f44457e86dddfd27a8af3a19074e216348daa0204717d61825f198ec0030100000006ab51abab00abffffffffdf41807adb7dff7db9f14d95fd6dc4e65f8402c002d009a3f1ddedf6f4895fc8030000000500ab006a65a5a848345052f860620abd5fcd074195548ce3bd0839fa9ad8642ed80627bf43a0d47dbd010000000765ab006a656a53b38cdd6502a186da05000000000765ab00ab006a53527c0e0100000000085365ab51acacac52534bd1b1", "6a635253ac0000", 0, 1095082149, "3c05473a816621a3613f0e903faa1a1e44891dd40862b029e41fc520776350fa"], - ["6c9a4b98013c8f1cae1b1df9f0f2de518d0c50206a0ab871603ac682155504c0e0ce946f460100000000ffffffff04eRPCPORT305000000000753535100ac6aacded39e04000000000365ac6ab93ccd010000000002515397bf3d050000000003ab636300000000", "63520052ac656353", 0, -352633155, "936eff8cdfd771be24124da87c7b24feb48da7cbc2c25fb5ba13d1a23255d902"], + ["6c9a4b98013c8f1cae1b1df9f0f2de518d0c50206a0ab871603ac682155504c0e0ce946f460100000000ffffffff04e40001305000000000753535100ac6aacded39e04000000000365ac6ab93ccd010000000002515397bf3d050000000003ab636300000000", "63520052ac656353", 0, -352633155, "936eff8cdfd771be24124da87c7b24feb48da7cbc2c25fb5ba13d1a23255d902"], ["e01dc7f0021dc07928906b2946ca3e9ac95f14ad4026887101e2d722c26982c27dc2b59fdb0000000005ac5200516ab5a31ffadcbe74957a5a3f97d7f1475cc6423fc6dbc4f96471bd44c70cc736e7dec0d1ea020000000951636a526a52abac53ffffffff04bc2edd05000000000252ab528c7b02000000000952ac51526500525353324820040000000002005380c713000000000009630065ab00ac525252451bbb48", "53ab65ac", 0, -552384418, "69c0b30f4c630a6c878fde6ea6b74dae94f4eb3bcfbde2dc3649e1a9ada00757"], ["009046a1023f266d0113556d604931374d7932b4d6a7952d08fbd9c9b87cbd83f4f4c178b4030000000452ac526346e73b438c4516c60edd5488023131f07acb5f9ea1540b3e84de92f4e3c432289781ea4900000000046500655357dfd6da02baef910100000000026a007d101703000000000800516500abacac5100000000", "6aab6553ac", 0, -802456605, "f8757fbb4448ca34e0cd41b997685b37238d331e70316659a9cc9087d116169d"], ["df76ec0801a3fcf3d18862c5f686b878266dd5083f16cf655facab888b4cb3123b3ce5db7e01000000010010e7ac6a0233c83803000000000365ac51faf14a040000000004ac51655100000000", "6353acab", 0, 15705861, "e7d873aa079a19ec712b269a37d2670f60d8cb334c4f97e2e3fd10eeb8ee5f5e"], diff --git a/src/test/getarg_tests.cpp b/src/test/getarg_tests.cpp index df49f18..0ad6e4b 100644 --- a/src/test/getarg_tests.cpp +++ b/src/test/getarg_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/getarg_tests.cpp~ b/src/test/getarg_tests.cpp~ new file mode 100644 index 0000000..94bc795 --- /dev/null +++ b/src/test/getarg_tests.cpp~ @@ -0,0 +1,161 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +BOOST_AUTO_TEST_SUITE(getarg_tests) + +static void ResetArgs(const std::string& strArg) +{ + std::vector vecArg; + boost::split(vecArg, strArg, boost::is_space(), boost::token_compress_on); + + // Insert dummy executable name: + vecArg.insert(vecArg.begin(), "testbitmark"); + + // Convert to char*: + std::vector vecChar; + BOOST_FOREACH(std::string& s, vecArg) + vecChar.push_back(s.c_str()); + + ParseParameters(vecChar.size(), &vecChar[0]); +} + +BOOST_AUTO_TEST_CASE(boolarg) +{ + ResetArgs("-foo"); + BOOST_CHECK(GetBoolArg("-foo", false)); + BOOST_CHECK(GetBoolArg("-foo", true)); + + BOOST_CHECK(!GetBoolArg("-fo", false)); + BOOST_CHECK(GetBoolArg("-fo", true)); + + BOOST_CHECK(!GetBoolArg("-fooo", false)); + BOOST_CHECK(GetBoolArg("-fooo", true)); + + ResetArgs("-foo=0"); + BOOST_CHECK(!GetBoolArg("-foo", false)); + BOOST_CHECK(!GetBoolArg("-foo", true)); + + ResetArgs("-foo=1"); + BOOST_CHECK(GetBoolArg("-foo", false)); + BOOST_CHECK(GetBoolArg("-foo", true)); + + // New 0.6 feature: auto-map -nosomething to !-something: + ResetArgs("-nofoo"); + BOOST_CHECK(!GetBoolArg("-foo", false)); + BOOST_CHECK(!GetBoolArg("-foo", true)); + + ResetArgs("-nofoo=1"); + BOOST_CHECK(!GetBoolArg("-foo", false)); + BOOST_CHECK(!GetBoolArg("-foo", true)); + + ResetArgs("-foo -nofoo"); // -foo should win + BOOST_CHECK(GetBoolArg("-foo", false)); + BOOST_CHECK(GetBoolArg("-foo", true)); + + ResetArgs("-foo=1 -nofoo=1"); // -foo should win + BOOST_CHECK(GetBoolArg("-foo", false)); + BOOST_CHECK(GetBoolArg("-foo", true)); + + ResetArgs("-foo=0 -nofoo=0"); // -foo should win + BOOST_CHECK(!GetBoolArg("-foo", false)); + BOOST_CHECK(!GetBoolArg("-foo", true)); + + // New 0.6 feature: treat -- same as -: + ResetArgs("--foo=1"); + BOOST_CHECK(GetBoolArg("-foo", false)); + BOOST_CHECK(GetBoolArg("-foo", true)); + + ResetArgs("--nofoo=1"); + BOOST_CHECK(!GetBoolArg("-foo", false)); + BOOST_CHECK(!GetBoolArg("-foo", true)); + +} + +BOOST_AUTO_TEST_CASE(stringarg) +{ + ResetArgs(""); + BOOST_CHECK_EQUAL(GetArg("-foo", ""), ""); + BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "eleven"); + + ResetArgs("-foo -bar"); + BOOST_CHECK_EQUAL(GetArg("-foo", ""), ""); + BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), ""); + + ResetArgs("-foo="); + BOOST_CHECK_EQUAL(GetArg("-foo", ""), ""); + BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), ""); + + ResetArgs("-foo=11"); + BOOST_CHECK_EQUAL(GetArg("-foo", ""), "11"); + BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "11"); + + ResetArgs("-foo=eleven"); + BOOST_CHECK_EQUAL(GetArg("-foo", ""), "eleven"); + BOOST_CHECK_EQUAL(GetArg("-foo", "eleven"), "eleven"); + +} + +BOOST_AUTO_TEST_CASE(intarg) +{ + ResetArgs(""); + BOOST_CHECK_EQUAL(GetArg("-foo", 11), 11); + BOOST_CHECK_EQUAL(GetArg("-foo", 0), 0); + + ResetArgs("-foo -bar"); + BOOST_CHECK_EQUAL(GetArg("-foo", 11), 0); + BOOST_CHECK_EQUAL(GetArg("-bar", 11), 0); + + ResetArgs("-foo=11 -bar=12"); + BOOST_CHECK_EQUAL(GetArg("-foo", 0), 11); + BOOST_CHECK_EQUAL(GetArg("-bar", 11), 12); + + ResetArgs("-foo=NaN -bar=NotANumber"); + BOOST_CHECK_EQUAL(GetArg("-foo", 1), 0); + BOOST_CHECK_EQUAL(GetArg("-bar", 11), 0); +} + +BOOST_AUTO_TEST_CASE(doubledash) +{ + ResetArgs("--foo"); + BOOST_CHECK_EQUAL(GetBoolArg("-foo", false), true); + + ResetArgs("--foo=verbose --bar=1"); + BOOST_CHECK_EQUAL(GetArg("-foo", ""), "verbose"); + BOOST_CHECK_EQUAL(GetArg("-bar", 0), 1); +} + +BOOST_AUTO_TEST_CASE(boolargno) +{ + ResetArgs("-nofoo"); + BOOST_CHECK(!GetBoolArg("-foo", true)); + BOOST_CHECK(!GetBoolArg("-foo", false)); + + ResetArgs("-nofoo=1"); + BOOST_CHECK(!GetBoolArg("-foo", true)); + BOOST_CHECK(!GetBoolArg("-foo", false)); + + ResetArgs("-nofoo=0"); + BOOST_CHECK(GetBoolArg("-foo", true)); + BOOST_CHECK(GetBoolArg("-foo", false)); + + ResetArgs("-foo --nofoo"); + BOOST_CHECK(GetBoolArg("-foo", true)); + BOOST_CHECK(GetBoolArg("-foo", false)); + + ResetArgs("-nofoo -foo"); // foo always wins: + BOOST_CHECK(GetBoolArg("-foo", true)); + BOOST_CHECK(GetBoolArg("-foo", false)); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/hash_tests.cpp b/src/test/hash_tests.cpp index c4b7968..1c97f00 100644 --- a/src/test/hash_tests.cpp +++ b/src/test/hash_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2013-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/hash_tests.cpp~ b/src/test/hash_tests.cpp~ new file mode 100644 index 0000000..6f6c172 --- /dev/null +++ b/src/test/hash_tests.cpp~ @@ -0,0 +1,50 @@ +// Original Code: Copyright (c) 2013-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 Bitmark 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 index de016de..d3e8869 100644 --- a/src/test/hmac_tests.cpp +++ b/src/test/hmac_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2013-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/hmac_tests.cpp~ b/src/test/hmac_tests.cpp~ new file mode 100644 index 0000000..4a53c35 --- /dev/null +++ b/src/test/hmac_tests.cpp~ @@ -0,0 +1,130 @@ +// Original Code: Copyright (c) 2013-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 19b6ae0..e3e1e81 100644 --- a/src/test/key_tests.cpp +++ b/src/test/key_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/key_tests.cpp~ b/src/test/key_tests.cpp~ new file mode 100644 index 0000000..3033811 --- /dev/null +++ b/src/test/key_tests.cpp~ @@ -0,0 +1,119 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +using namespace std; + +static const string strSecret1 ("3T8LfmmT4UE526vZ5zfDYeca69GV5iBio8M6udc8wHQyQcsqFJD"); +static const string strSecret2 ("3UYjmH8Ye2jvDbwyDUWJx3LjmhL5sfeXg5ty7PjwUgMUg3tW66X"); +static const string strSecret1C ("BpKPp8bC2KAgjs9Nd3VgNh213hVLwnnKUbRj5Ja62bSoyEuTVvsN"); +static const string strSecret2C ("Bvb5kSCJeSgRtdFd84QNDwL7nH1EWdaePWcNfDNXTAhP8z8SLQYr"); +static const CBitmarkAddress addr1 ("bVkSsJU8pi7PvEWN4jgHkLAd6jo4ZWYd16"); +static const CBitmarkAddress addr2 ("bWRDtv3FPPAii7SSJ6zR3dMnDEAXFk1koe"); +static const CBitmarkAddress addr1C("bQ3Gyigyd12kJDkhwi9M9QSZ9qu6M4NZzR"); +static const CBitmarkAddress addr2C("bGvwzZoFyDvxGDjPGQmzA9hgeWRHXDsZQo"); + + +static const string strAddressBad("bHV9Lc3sNHZxwj4Zk6fB38tEmBryq2cBiF"); + +BOOST_AUTO_TEST_SUITE(key_tests) + +BOOST_AUTO_TEST_CASE(key_test1) +{ + CBitmarkSecret bsecret1, bsecret2, bsecret1C, bsecret2C, baddress1; + BOOST_CHECK( bsecret1.SetString (strSecret1)); + BOOST_CHECK( bsecret2.SetString (strSecret2)); + BOOST_CHECK( bsecret1C.SetString(strSecret1C)); + BOOST_CHECK( bsecret2C.SetString(strSecret2C)); + BOOST_CHECK(!baddress1.SetString(strAddressBad)); + + CKey key1 = bsecret1.GetKey(); + BOOST_CHECK(key1.IsCompressed() == false); + CKey key2 = bsecret2.GetKey(); + BOOST_CHECK(key2.IsCompressed() == false); + CKey key1C = bsecret1C.GetKey(); + BOOST_CHECK(key1C.IsCompressed() == true); + CKey key2C = bsecret2C.GetKey(); + BOOST_CHECK(key1C.IsCompressed() == true); + + CPubKey pubkey1 = key1. GetPubKey(); + CPubKey pubkey2 = key2. GetPubKey(); + CPubKey pubkey1C = key1C.GetPubKey(); + CPubKey pubkey2C = key2C.GetPubKey(); + + BOOST_CHECK(addr1.Get() == CTxDestination(pubkey1.GetID())); + BOOST_CHECK(addr2.Get() == CTxDestination(pubkey2.GetID())); + BOOST_CHECK(addr1C.Get() == CTxDestination(pubkey1C.GetID())); + BOOST_CHECK(addr2C.Get() == CTxDestination(pubkey2C.GetID())); + + for (int n=0; n<16; n++) + { + string strMsg = strprintf("Very secret message %i: 11", n); + uint256 hashMsg = Hash(strMsg.begin(), strMsg.end()); + + // normal signatures + + vector sign1, sign2, sign1C, sign2C; + + BOOST_CHECK(key1.Sign (hashMsg, sign1)); + BOOST_CHECK(key2.Sign (hashMsg, sign2)); + BOOST_CHECK(key1C.Sign(hashMsg, sign1C)); + BOOST_CHECK(key2C.Sign(hashMsg, sign2C)); + + BOOST_CHECK( pubkey1.Verify(hashMsg, sign1)); + BOOST_CHECK(!pubkey1.Verify(hashMsg, sign2)); + BOOST_CHECK( pubkey1.Verify(hashMsg, sign1C)); + BOOST_CHECK(!pubkey1.Verify(hashMsg, sign2C)); + + BOOST_CHECK(!pubkey2.Verify(hashMsg, sign1)); + BOOST_CHECK( pubkey2.Verify(hashMsg, sign2)); + BOOST_CHECK(!pubkey2.Verify(hashMsg, sign1C)); + BOOST_CHECK( pubkey2.Verify(hashMsg, sign2C)); + + BOOST_CHECK( pubkey1C.Verify(hashMsg, sign1)); + BOOST_CHECK(!pubkey1C.Verify(hashMsg, sign2)); + BOOST_CHECK( pubkey1C.Verify(hashMsg, sign1C)); + BOOST_CHECK(!pubkey1C.Verify(hashMsg, sign2C)); + + BOOST_CHECK(!pubkey2C.Verify(hashMsg, sign1)); + BOOST_CHECK( pubkey2C.Verify(hashMsg, sign2)); + BOOST_CHECK(!pubkey2C.Verify(hashMsg, sign1C)); + BOOST_CHECK( pubkey2C.Verify(hashMsg, sign2C)); + + // compact signatures (with key recovery) + + vector csign1, csign2, csign1C, csign2C; + + BOOST_CHECK(key1.SignCompact (hashMsg, csign1)); + BOOST_CHECK(key2.SignCompact (hashMsg, csign2)); + BOOST_CHECK(key1C.SignCompact(hashMsg, csign1C)); + BOOST_CHECK(key2C.SignCompact(hashMsg, csign2C)); + + CPubKey rkey1, rkey2, rkey1C, rkey2C; + + BOOST_CHECK(rkey1.RecoverCompact (hashMsg, csign1)); + BOOST_CHECK(rkey2.RecoverCompact (hashMsg, csign2)); + BOOST_CHECK(rkey1C.RecoverCompact(hashMsg, csign1C)); + BOOST_CHECK(rkey2C.RecoverCompact(hashMsg, csign2C)); + + BOOST_CHECK(rkey1 == pubkey1); + BOOST_CHECK(rkey2 == pubkey2); + BOOST_CHECK(rkey1C == pubkey1C); + BOOST_CHECK(rkey2C == pubkey2C); + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/main_tests.cpp b/src/test/main_tests.cpp index c5ee026..ffd3cc2 100644 --- a/src/test/main_tests.cpp +++ b/src/test/main_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/main_tests.cpp~ b/src/test/main_tests.cpp~ new file mode 100644 index 0000000..0004605 --- /dev/null +++ b/src/test/main_tests.cpp~ @@ -0,0 +1,25 @@ +// Original Code: Copyright (c) 2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 < 31520000; nHeight += 1000) { + uint64_t nSubsidy = GetBlockValue(nHeight, 0); + BOOST_CHECK(nSubsidy <= 20 * COIN); + nSum += nSubsidy * 1000; + BOOST_CHECK(MoneyRange(nSum)); + } + BOOST_CHECK(nSum == 2757989473108000ULL); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/miner_tests.cpp b/src/test/miner_tests.cpp index a239268..d266c93 100644 --- a/src/test/miner_tests.cpp +++ b/src/test/miner_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/miner_tests.cpp~ b/src/test/miner_tests.cpp~ new file mode 100644 index 0000000..3d502a5 --- /dev/null +++ b/src/test/miner_tests.cpp~ @@ -0,0 +1,289 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "miner.h" +#include "uint256.h" +#include "util.h" + +#include + +extern void SHA256Transform(void* pstate, void* pinput, const void* pinit); + +BOOST_AUTO_TEST_SUITE(miner_tests) + +static +struct { + unsigned char extranonce; + unsigned int nonce; +} blockinfo[] = { + {4, 0xa4a3e223}, {2, 0x15c32f9e}, {1, 0x0375b547}, {1, 0x7004a8a5}, + {2, 0xce440296}, {2, 0x52cfe198}, {1, 0x77a72cd0}, {2, 0xbb5d6f84}, + {2, 0x83f30c2c}, {1, 0x48a73d5b}, {1, 0xef7dcd01}, {2, 0x6809c6c4}, + {2, 0x0883ab3c}, {1, 0x087bbbe2}, {2, 0x2104a814}, {2, 0xdffb6daa}, + {1, 0xee8a0a08}, {2, 0xba4237c1}, {1, 0xa70349dc}, {1, 0x344722bb}, + {3, 0xd6294733}, {2, 0xec9f5c94}, {2, 0xca2fbc28}, {1, 0x6ba4f406}, + {2, 0x015d4532}, {1, 0x6e119b7c}, {2, 0x43e8f314}, {2, 0x27962f38}, + {2, 0xb571b51b}, {2, 0xb36bee23}, {2, 0xd17924a8}, {2, 0x6bc212d9}, + {1, 0x630d4948}, {2, 0x9a4c4ebb}, {2, 0x554be537}, {1, 0xd63ddfc7}, + {2, 0xa10acc11}, {1, 0x759a8363}, {2, 0xfb73090d}, {1, 0xe82c6a34}, + {1, 0xe33e92d7}, {3, 0x658ef5cb}, {2, 0xba32ff22}, {5, 0x0227a10c}, + {1, 0xa9a70155}, {5, 0xd096d809}, {1, 0x37176174}, {1, 0x830b8d0f}, + {1, 0xc6e3910e}, {2, 0x823f3ca8}, {1, 0x99850849}, {1, 0x7521fb81}, + {1, 0xaacaabab}, {1, 0xd645a2eb}, {5, 0x7aea1781}, {5, 0x9d6e4b78}, + {1, 0x4ce90fd8}, {1, 0xabdc832d}, {6, 0x4a34f32a}, {2, 0xf2524c1c}, + {2, 0x1bbeb08a}, {1, 0xad47f480}, {1, 0x9f026aeb}, {1, 0x15a95049}, + {2, 0xd1cb95b2}, {2, 0xf84bbda5}, {1, 0x0fa62cd1}, {1, 0xe05f9169}, + {1, 0x78d194a9}, {5, 0x3e38147b}, {5, 0x737ba0d4}, {1, 0x63378e10}, + {1, 0x6d5f91cf}, {2, 0x88612eb8}, {2, 0xe9639484}, {1, 0xb7fabc9d}, + {2, 0x19b01592}, {1, 0x5a90dd31}, {2, 0x5bd7e028}, {2, 0x94d00323}, + {1, 0xa9b9c01a}, {1, 0x3a40de61}, {1, 0x56e7eec7}, {5, 0x859f7ef6}, + {1, 0xfd8e5630}, {1, 0x2b0c9f7f}, {1, 0xba700e26}, {1, 0x7170a408}, + {1, 0x70de86a8}, {1, 0x74d64cd5}, {1, 0x49e738a1}, {2, 0x6910b602}, + {0, 0x643c565f}, {1, 0x54264b3f}, {2, 0x97ea6396}, {2, 0x55174459}, + {2, 0x03e8779a}, {1, 0x98f34d8f}, {1, 0xc07b2b07}, {1, 0xdfe29668}, + {1, 0x3141c7c1}, {1, 0xb3b595f4}, {1, 0x735abf08}, {5, 0x623bfbce}, + {2, 0xd351e722}, {1, 0xf4ca48c9}, {1, 0x5b19c670}, {1, 0xa164bf0e}, + {2, 0xbbbeb305}, {2, 0xfe1c810a}, +}; + +// NOTE: These tests rely on CreateNewBlock doing its own self-validation! +BOOST_AUTO_TEST_CASE(CreateNewBlock_validity) +{ + CScript scriptPubKey = CScript() << ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") << OP_CHECKSIG; + CBlockTemplate *pblocktemplate; + CTransaction tx,tx2; + CScript script; + uint256 hash; + + LOCK(cs_main); + + // Simple block creation, nothing special yet: + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey)); + + // We can't make transactions until we have inputs + // Therefore, load 100 blocks :) + std::vectortxFirst; + for (unsigned int i = 0; i < sizeof(blockinfo)/sizeof(*blockinfo); ++i) + { + CBlock *pblock = &pblocktemplate->block; // pointer for convenience + pblock->nVersion = 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(chainActive.Height()); + pblock->vtx[0].vout[0].scriptPubKey = CScript(); + if (txFirst.size() < 2) + txFirst.push_back(new CTransaction(pblock->vtx[0])); + pblock->hashMerkleRoot = pblock->BuildMerkleTree(); + pblock->nNonce = blockinfo[i].nonce; + CValidationState state; + BOOST_CHECK(ProcessBlock(state, NULL, pblock)); + BOOST_CHECK(state.IsValid()); + pblock->hashPrevBlock = pblock->GetHash(); + } + delete pblocktemplate; + + // Just to make sure we can still make simple blocks + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey)); + delete pblocktemplate; + + // block sigops > limit: 1000 CHECKMULTISIG + 1 + tx.vin.resize(1); + // NOTE: OP_NOP is used to force 20 SigOps for the CHECKMULTISIG + tx.vin[0].scriptSig = CScript() << OP_0 << OP_0 << OP_0 << OP_NOP << OP_CHECKMULTISIG << OP_1; + tx.vin[0].prevout.hash = txFirst[0]->GetHash(); + tx.vin[0].prevout.n = 0; + tx.vout.resize(1); + tx.vout[0].nValue = 5000000000LL; + for (unsigned int i = 0; i < 1001; ++i) + { + tx.vout[0].nValue -= 1000000; + hash = tx.GetHash(); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); + tx.vin[0].prevout.hash = hash; + } + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey)); + delete pblocktemplate; + mempool.clear(); + + // block size > limit + tx.vin[0].scriptSig = CScript(); + // 18 * (520char + DROP) + OP_1 = 9433 bytes + std::vector vchData(520); + for (unsigned int i = 0; i < 18; ++i) + tx.vin[0].scriptSig << vchData << OP_DROP; + tx.vin[0].scriptSig << OP_1; + tx.vin[0].prevout.hash = txFirst[0]->GetHash(); + tx.vout[0].nValue = 5000000000LL; + for (unsigned int i = 0; i < 128; ++i) + { + tx.vout[0].nValue -= 10000000; + hash = tx.GetHash(); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); + tx.vin[0].prevout.hash = hash; + } + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey)); + delete pblocktemplate; + mempool.clear(); + + // orphan in mempool + hash = tx.GetHash(); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey)); + delete pblocktemplate; + mempool.clear(); + + // child with higher priority than parent + tx.vin[0].scriptSig = CScript() << OP_1; + tx.vin[0].prevout.hash = txFirst[1]->GetHash(); + tx.vout[0].nValue = 4900000000LL; + hash = tx.GetHash(); + 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; + tx.vin[1].prevout.hash = txFirst[0]->GetHash(); + tx.vin[1].prevout.n = 0; + tx.vout[0].nValue = 5900000000LL; + hash = tx.GetHash(); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey)); + delete pblocktemplate; + mempool.clear(); + + // coinbase in mempool + tx.vin.resize(1); + tx.vin[0].prevout.SetNull(); + tx.vin[0].scriptSig = CScript() << OP_0 << OP_1; + tx.vout[0].nValue = 0; + hash = tx.GetHash(); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey)); + delete pblocktemplate; + mempool.clear(); + + // invalid (pre-p2sh) txn in mempool + tx.vin[0].prevout.hash = txFirst[0]->GetHash(); + tx.vin[0].prevout.n = 0; + tx.vin[0].scriptSig = CScript() << OP_1; + tx.vout[0].nValue = 4900000000LL; + script = CScript() << OP_0; + tx.vout[0].scriptPubKey.SetDestination(script.GetID()); + hash = tx.GetHash(); + 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, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey)); + delete pblocktemplate; + mempool.clear(); + + // double spend txn pair in mempool + tx.vin[0].prevout.hash = txFirst[0]->GetHash(); + tx.vin[0].scriptSig = CScript() << OP_1; + tx.vout[0].nValue = 4900000000LL; + tx.vout[0].scriptPubKey = CScript() << OP_1; + hash = tx.GetHash(); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); + tx.vout[0].scriptPubKey = CScript() << OP_2; + hash = tx.GetHash(); + mempool.addUnchecked(hash, CTxMemPoolEntry(tx, 11, GetTime(), 111.0, 11)); + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey)); + delete pblocktemplate; + mempool.clear(); + + // subsidy changing + int nHeight = chainActive.Height(); + chainActive.Tip()->nHeight = 209999; + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey)); + delete pblocktemplate; + chainActive.Tip()->nHeight = 210000; + BOOST_CHECK(pblocktemplate = CreateNewBlock(scriptPubKey)); + delete pblocktemplate; + 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)); + + // 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)); + 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) +{ + unsigned int pSHA256InitState[8] = {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19}; + + + // unsigned char pstate[32]; + unsigned char pinput[64]; + + int i; + + for (i = 0; i < 32; i++) { + pinput[i] = i; + pinput[i+32] = 0; + } + + uint256 hash; + + SHA256Transform(&hash, pinput, pSHA256InitState); + + BOOST_TEST_MESSAGE(hash.GetHex()); + + uint256 hash_reference("0x2df5e1c65ef9f8cde240d23cae2ec036d31a15ec64bc68f64be242b1da6631f3"); + + BOOST_CHECK(hash == hash_reference); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/mruset_tests.cpp b/src/test/mruset_tests.cpp index bf25f7b..652edb8 100644 --- a/src/test/mruset_tests.cpp +++ b/src/test/mruset_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/mruset_tests.cpp~ b/src/test/mruset_tests.cpp~ new file mode 100644 index 0000000..0ee284e --- /dev/null +++ b/src/test/mruset_tests.cpp~ @@ -0,0 +1,98 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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: + mruset mru; + std::set set; + +public: + mrutester() { mru.max_size(MAX_SIZE); } + int size() const { return set.size(); } + + void insert(int n) + { + mru.insert(n); + set.insert(n); + BOOST_CHECK(mru == set); + } +}; + +BOOST_AUTO_TEST_SUITE(mruset_tests) + +// Test that an mruset behaves like a set, as long as no more than MAX_SIZE elements are in it +BOOST_AUTO_TEST_CASE(mruset_like_set) +{ + + for (int nTest=0; nTest mru(MAX_SIZE); + for (int nAction=0; nAction<3*MAX_SIZE; nAction++) + { + int n = GetRandInt(2 * MAX_SIZE); + mru.insert(n); + BOOST_CHECK(mru.size() <= MAX_SIZE); + } + } +} + +// 16-bit permutation function +int static permute(int n) +{ + // hexadecimals of pi; verified to be linearly independent + static const int table[16] = {0x243F, 0x6A88, 0x85A3, 0x08D3, 0x1319, 0x8A2E, 0x0370, 0x7344, + 0xA409, 0x3822, 0x299F, 0x31D0, 0x082E, 0xFA98, 0xEC4E, 0x6C89}; + + int ret = 0; + for (int bit=0; bit<16; bit++) + if (n & (1< mru(MAX_SIZE); + for (int n=0; n<10*MAX_SIZE; n++) + { + mru.insert(permute(n)); + + set tester; + for (int m=max(0,n-MAX_SIZE+1); m<=n; m++) + tester.insert(permute(m)); + + BOOST_CHECK(mru == tester); + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/multisig_tests.cpp b/src/test/multisig_tests.cpp index 36340a2..cb39af2 100644 --- a/src/test/multisig_tests.cpp +++ b/src/test/multisig_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/multisig_tests.cpp~ b/src/test/multisig_tests.cpp~ new file mode 100644 index 0000000..e500d9d --- /dev/null +++ b/src/test/multisig_tests.cpp~ @@ -0,0 +1,297 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "uint256.h" + +#include +#include +#include + +using namespace std; +using namespace boost::assign; + +typedef vector valtype; + +extern uint256 SignatureHash(const CScript &scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType); + +BOOST_AUTO_TEST_SUITE(multisig_tests) + +CScript +sign_multisig(CScript scriptPubKey, vector keys, CTransaction transaction, int whichIn) +{ + uint256 hash = SignatureHash(scriptPubKey, transaction, whichIn, SIGHASH_ALL); + + CScript result; + result << OP_0; // CHECKMULTISIG bug workaround + BOOST_FOREACH(const CKey &key, keys) + { + vector vchSig; + BOOST_CHECK(key.Sign(hash, vchSig)); + vchSig.push_back((unsigned char)SIGHASH_ALL); + result << vchSig; + } + return result; +} + +BOOST_AUTO_TEST_CASE(multisig_verify) +{ + unsigned int flags = SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC; + + CKey key[4]; + for (int i = 0; i < 4; i++) + key[i].MakeNewKey(true); + + CScript a_and_b; + a_and_b << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + + CScript a_or_b; + a_or_b << OP_1 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + + CScript escrow; + escrow << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << key[2].GetPubKey() << OP_3 << OP_CHECKMULTISIG; + + CTransaction txFrom; // Funding transaction + txFrom.vout.resize(3); + txFrom.vout[0].scriptPubKey = a_and_b; + txFrom.vout[1].scriptPubKey = a_or_b; + txFrom.vout[2].scriptPubKey = escrow; + + CTransaction txTo[3]; // Spending transaction + for (int i = 0; i < 3; i++) + { + txTo[i].vin.resize(1); + txTo[i].vout.resize(1); + txTo[i].vin[0].prevout.n = i; + txTo[i].vin[0].prevout.hash = txFrom.GetHash(); + txTo[i].vout[0].nValue = 1; + } + + vector keys; + CScript s; + + // Test a AND b: + keys.clear(); + keys += key[0],key[1]; // magic operator+= from boost.assign + s = sign_multisig(a_and_b, keys, txTo[0], 0); + BOOST_CHECK(VerifyScript(s, a_and_b, txTo[0], 0, flags, 0)); + + for (int i = 0; i < 4; i++) + { + keys.clear(); + keys += key[i]; + s = sign_multisig(a_and_b, keys, txTo[0], 0); + BOOST_CHECK_MESSAGE(!VerifyScript(s, a_and_b, txTo[0], 0, flags, 0), strprintf("a&b 1: %d", i)); + + keys.clear(); + keys += key[1],key[i]; + s = sign_multisig(a_and_b, keys, txTo[0], 0); + BOOST_CHECK_MESSAGE(!VerifyScript(s, a_and_b, txTo[0], 0, flags, 0), strprintf("a&b 2: %d", i)); + } + + // Test a OR b: + for (int i = 0; i < 4; i++) + { + keys.clear(); + keys += key[i]; + s = sign_multisig(a_or_b, keys, txTo[1], 0); + if (i == 0 || i == 1) + BOOST_CHECK_MESSAGE(VerifyScript(s, a_or_b, txTo[1], 0, flags, 0), strprintf("a|b: %d", i)); + else + BOOST_CHECK_MESSAGE(!VerifyScript(s, a_or_b, txTo[1], 0, flags, 0), strprintf("a|b: %d", i)); + } + s.clear(); + s << OP_0 << OP_0; + BOOST_CHECK(!VerifyScript(s, a_or_b, txTo[1], 0, flags, 0)); + s.clear(); + s << OP_0 << OP_1; + BOOST_CHECK(!VerifyScript(s, a_or_b, txTo[1], 0, flags, 0)); + + + for (int i = 0; i < 4; i++) + for (int j = 0; j < 4; j++) + { + keys.clear(); + keys += key[i],key[j]; + s = sign_multisig(escrow, keys, txTo[2], 0); + if (i < j && i < 3 && j < 3) + BOOST_CHECK_MESSAGE(VerifyScript(s, escrow, txTo[2], 0, flags, 0), strprintf("escrow 1: %d %d", i, j)); + else + BOOST_CHECK_MESSAGE(!VerifyScript(s, escrow, txTo[2], 0, flags, 0), strprintf("escrow 2: %d %d", i, j)); + } +} + +BOOST_AUTO_TEST_CASE(multisig_IsStandard) +{ + CKey key[4]; + 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, 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, whichType)); + + CScript escrow; + escrow << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << key[2].GetPubKey() << OP_3 << OP_CHECKMULTISIG; + 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, whichType)); + + CScript malformed[6]; + malformed[0] << OP_3 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + malformed[1] << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << OP_3 << OP_CHECKMULTISIG; + malformed[2] << OP_0 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + malformed[3] << OP_1 << key[0].GetPubKey() << key[1].GetPubKey() << OP_0 << OP_CHECKMULTISIG; + malformed[4] << OP_1 << key[0].GetPubKey() << key[1].GetPubKey() << OP_CHECKMULTISIG; + malformed[5] << OP_1 << key[0].GetPubKey() << key[1].GetPubKey(); + + for (int i = 0; i < 6; i++) + BOOST_CHECK(!::IsStandard(malformed[i], whichType)); +} + +BOOST_AUTO_TEST_CASE(multisig_Solver1) +{ + // Tests Solver() that returns lists of keys that are + // required to satisfy a ScriptPubKey + // + // Also tests IsMine() and ExtractAddress() + // + // Note: ExtractAddress for the multisignature transactions + // always returns false for this release, even if you have + // one key that would satisfy an (a|b) or 2-of-3 keys needed + // to spend an escrow transaction. + // + CBasicKeyStore keystore, emptykeystore, partialkeystore; + CKey key[3]; + CTxDestination keyaddr[3]; + for (int i = 0; i < 3; i++) + { + key[i].MakeNewKey(true); + keystore.AddKey(key[i]); + keyaddr[i] = key[i].GetPubKey().GetID(); + } + partialkeystore.AddKey(key[0]); + + { + vector solutions; + txnouttype whichType; + CScript s; + s << key[0].GetPubKey() << OP_CHECKSIG; + BOOST_CHECK(Solver(s, whichType, solutions)); + BOOST_CHECK(solutions.size() == 1); + CTxDestination addr; + BOOST_CHECK(ExtractDestination(s, addr)); + BOOST_CHECK(addr == keyaddr[0]); + BOOST_CHECK(IsMine(keystore, s)); + BOOST_CHECK(!IsMine(emptykeystore, s)); + } + { + vector solutions; + txnouttype whichType; + CScript s; + s << OP_DUP << OP_HASH160 << key[0].GetPubKey().GetID() << OP_EQUALVERIFY << OP_CHECKSIG; + BOOST_CHECK(Solver(s, whichType, solutions)); + BOOST_CHECK(solutions.size() == 1); + CTxDestination addr; + BOOST_CHECK(ExtractDestination(s, addr)); + BOOST_CHECK(addr == keyaddr[0]); + BOOST_CHECK(IsMine(keystore, s)); + BOOST_CHECK(!IsMine(emptykeystore, s)); + } + { + vector solutions; + txnouttype whichType; + CScript s; + s << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + BOOST_CHECK(Solver(s, whichType, solutions)); + BOOST_CHECK_EQUAL(solutions.size(), 4U); + CTxDestination addr; + BOOST_CHECK(!ExtractDestination(s, addr)); + BOOST_CHECK(IsMine(keystore, s)); + BOOST_CHECK(!IsMine(emptykeystore, s)); + BOOST_CHECK(!IsMine(partialkeystore, s)); + } + { + vector solutions; + txnouttype whichType; + CScript s; + s << OP_1 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + BOOST_CHECK(Solver(s, whichType, solutions)); + BOOST_CHECK_EQUAL(solutions.size(), 4U); + vector addrs; + int nRequired; + BOOST_CHECK(ExtractDestinations(s, whichType, addrs, nRequired)); + BOOST_CHECK(addrs[0] == keyaddr[0]); + BOOST_CHECK(addrs[1] == keyaddr[1]); + BOOST_CHECK(nRequired == 1); + BOOST_CHECK(IsMine(keystore, s)); + BOOST_CHECK(!IsMine(emptykeystore, s)); + BOOST_CHECK(!IsMine(partialkeystore, s)); + } + { + vector solutions; + txnouttype whichType; + CScript s; + s << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << key[2].GetPubKey() << OP_3 << OP_CHECKMULTISIG; + BOOST_CHECK(Solver(s, whichType, solutions)); + BOOST_CHECK(solutions.size() == 5); + } +} + +BOOST_AUTO_TEST_CASE(multisig_Sign) +{ + // Test SignSignature() (and therefore the version of Solver() that signs transactions) + CBasicKeyStore keystore; + CKey key[4]; + for (int i = 0; i < 4; i++) + { + key[i].MakeNewKey(true); + keystore.AddKey(key[i]); + } + + CScript a_and_b; + a_and_b << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + + CScript a_or_b; + a_or_b << OP_1 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; + + CScript escrow; + escrow << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << key[2].GetPubKey() << OP_3 << OP_CHECKMULTISIG; + + CTransaction txFrom; // Funding transaction + txFrom.vout.resize(3); + txFrom.vout[0].scriptPubKey = a_and_b; + txFrom.vout[1].scriptPubKey = a_or_b; + txFrom.vout[2].scriptPubKey = escrow; + + CTransaction txTo[3]; // Spending transaction + for (int i = 0; i < 3; i++) + { + txTo[i].vin.resize(1); + txTo[i].vout.resize(1); + txTo[i].vin[0].prevout.n = i; + txTo[i].vin[0].prevout.hash = txFrom.GetHash(); + txTo[i].vout[0].nValue = 1; + } + + for (int i = 0; i < 3; i++) + { + BOOST_CHECK_MESSAGE(SignSignature(keystore, txFrom, txTo[i], 0), strprintf("SignSignature %d", i)); + } +} + + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/netbase_tests.cpp b/src/test/netbase_tests.cpp index 394cbd6..b0930d3 100644 --- a/src/test/netbase_tests.cpp +++ b/src/test/netbase_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -61,15 +61,15 @@ BOOST_AUTO_TEST_CASE(netbase_splithost) BOOST_CHECK(TestSplitHost("www.bitmark.org:80", "www.bitmark.org", 80)); BOOST_CHECK(TestSplitHost("[www.bitmark.org]:80", "www.bitmark.org", 80)); BOOST_CHECK(TestSplitHost("127.0.0.1", "127.0.0.1", -1)); - BOOST_CHECK(TestSplitHost("127.0.0.1:P2PPORT", "127.0.0.1", P2PPORT)); + BOOST_CHECK(TestSplitHost("127.0.0.1:40002", "127.0.0.1", 40002)); BOOST_CHECK(TestSplitHost("[127.0.0.1]", "127.0.0.1", -1)); - BOOST_CHECK(TestSplitHost("[127.0.0.1]:P2PPORT", "127.0.0.1", P2PPORT)); + BOOST_CHECK(TestSplitHost("[127.0.0.1]:40002", "127.0.0.1", 40002)); BOOST_CHECK(TestSplitHost("::ffff:127.0.0.1", "::ffff:127.0.0.1", -1)); - BOOST_CHECK(TestSplitHost("[::ffff:127.0.0.1]:P2PPORT", "::ffff:127.0.0.1", P2PPORT)); - BOOST_CHECK(TestSplitHost("[::]:P2PPORT", "::", P2PPORT)); - BOOST_CHECK(TestSplitHost("::P2PPORT", "::P2PPORT", -1)); - BOOST_CHECK(TestSplitHost(":P2PPORT", "", P2PPORT)); - BOOST_CHECK(TestSplitHost("[]:P2PPORT", "", P2PPORT)); + BOOST_CHECK(TestSplitHost("[::ffff:127.0.0.1]:40002", "::ffff:127.0.0.1", 40002)); + BOOST_CHECK(TestSplitHost("[::]:40002", "::", 40002)); + BOOST_CHECK(TestSplitHost("::40002", "::40002", -1)); + BOOST_CHECK(TestSplitHost(":40002", "", 40002)); + BOOST_CHECK(TestSplitHost("[]:40002", "", 40002)); BOOST_CHECK(TestSplitHost("", "", -1)); } @@ -84,10 +84,10 @@ bool static TestParse(string src, string canon) BOOST_AUTO_TEST_CASE(netbase_lookupnumeric) { BOOST_CHECK(TestParse("127.0.0.1", "127.0.0.1:65535")); - BOOST_CHECK(TestParse("127.0.0.1:P2PPORT", "127.0.0.1:P2PPORT")); + BOOST_CHECK(TestParse("127.0.0.1:40002", "127.0.0.1:40002")); BOOST_CHECK(TestParse("::ffff:127.0.0.1", "127.0.0.1:65535")); BOOST_CHECK(TestParse("::", "[::]:65535")); - BOOST_CHECK(TestParse("[::]:P2PPORT", "[::]:P2PPORT")); + BOOST_CHECK(TestParse("[::]:40002", "[::]:40002")); BOOST_CHECK(TestParse("[127.0.0.1]", "127.0.0.1:65535")); BOOST_CHECK(TestParse(":::", "")); } diff --git a/src/test/netbase_tests.cpp~ b/src/test/netbase_tests.cpp~ new file mode 100644 index 0000000..051cfc2 --- /dev/null +++ b/src/test/netbase_tests.cpp~ @@ -0,0 +1,106 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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) + +BOOST_AUTO_TEST_CASE(netbase_networks) +{ + BOOST_CHECK(CNetAddr("127.0.0.1").GetNetwork() == NET_UNROUTABLE); + BOOST_CHECK(CNetAddr("::1").GetNetwork() == NET_UNROUTABLE); + BOOST_CHECK(CNetAddr("8.8.8.8").GetNetwork() == NET_IPV4); + BOOST_CHECK(CNetAddr("2001::8888").GetNetwork() == NET_IPV6); + BOOST_CHECK(CNetAddr("FD87:D87E:EB43:edb1:8e4:3588:e546:35ca").GetNetwork() == NET_TOR); +} + +BOOST_AUTO_TEST_CASE(netbase_properties) +{ + BOOST_CHECK(CNetAddr("127.0.0.1").IsIPv4()); + BOOST_CHECK(CNetAddr("::FFFF:192.168.1.1").IsIPv4()); + BOOST_CHECK(CNetAddr("::1").IsIPv6()); + BOOST_CHECK(CNetAddr("10.0.0.1").IsRFC1918()); + BOOST_CHECK(CNetAddr("192.168.1.1").IsRFC1918()); + BOOST_CHECK(CNetAddr("172.31.255.255").IsRFC1918()); + BOOST_CHECK(CNetAddr("2001:0DB8::").IsRFC3849()); + BOOST_CHECK(CNetAddr("169.254.1.1").IsRFC3927()); + BOOST_CHECK(CNetAddr("2002::1").IsRFC3964()); + BOOST_CHECK(CNetAddr("FC00::").IsRFC4193()); + BOOST_CHECK(CNetAddr("2001::2").IsRFC4380()); + BOOST_CHECK(CNetAddr("2001:10::").IsRFC4843()); + BOOST_CHECK(CNetAddr("FE80::").IsRFC4862()); + BOOST_CHECK(CNetAddr("64:FF9B::").IsRFC6052()); + BOOST_CHECK(CNetAddr("FD87:D87E:EB43:edb1:8e4:3588:e546:35ca").IsTor()); + BOOST_CHECK(CNetAddr("127.0.0.1").IsLocal()); + BOOST_CHECK(CNetAddr("::1").IsLocal()); + BOOST_CHECK(CNetAddr("8.8.8.8").IsRoutable()); + BOOST_CHECK(CNetAddr("2001::1").IsRoutable()); + BOOST_CHECK(CNetAddr("127.0.0.1").IsValid()); +} + +bool static TestSplitHost(string test, string host, int port) +{ + string hostOut; + int portOut = -1; + SplitHostPort(test, portOut, hostOut); + return hostOut == host && port == portOut; +} + +BOOST_AUTO_TEST_CASE(netbase_splithost) +{ + BOOST_CHECK(TestSplitHost("www.bitmark.org", "www.bitmark.org", -1)); + BOOST_CHECK(TestSplitHost("[www.bitmark.org]", "www.bitmark.org", -1)); + BOOST_CHECK(TestSplitHost("www.bitmark.org:80", "www.bitmark.org", 80)); + BOOST_CHECK(TestSplitHost("[www.bitmark.org]:80", "www.bitmark.org", 80)); + BOOST_CHECK(TestSplitHost("127.0.0.1", "127.0.0.1", -1)); + BOOST_CHECK(TestSplitHost("127.0.0.1:40002", "127.0.0.1", 40002)); + BOOST_CHECK(TestSplitHost("[127.0.0.1]", "127.0.0.1", -1)); + BOOST_CHECK(TestSplitHost("[127.0.0.1]:40002", "127.0.0.1", 40002)); + BOOST_CHECK(TestSplitHost("::ffff:127.0.0.1", "::ffff:127.0.0.1", -1)); + BOOST_CHECK(TestSplitHost("[::ffff:127.0.0.1]:40002", "::ffff:127.0.0.1", 40002)); + BOOST_CHECK(TestSplitHost("[::]:40002", "::", 40002)); + BOOST_CHECK(TestSplitHost("::40002", "::40002", -1)); + BOOST_CHECK(TestSplitHost(":40002", "", 40002)); + BOOST_CHECK(TestSplitHost("[]:40002", "", 40002)); + BOOST_CHECK(TestSplitHost("", "", -1)); +} + +bool static TestParse(string src, string canon) +{ + CService addr; + if (!LookupNumeric(src.c_str(), addr, 65535)) + return canon == ""; + return canon == addr.ToString(); +} + +BOOST_AUTO_TEST_CASE(netbase_lookupnumeric) +{ + BOOST_CHECK(TestParse("127.0.0.1", "127.0.0.1:65535")); + BOOST_CHECK(TestParse("127.0.0.1:40002", "127.0.0.1:40002")); + BOOST_CHECK(TestParse("::ffff:127.0.0.1", "127.0.0.1:65535")); + BOOST_CHECK(TestParse("::", "[::]:65535")); + BOOST_CHECK(TestParse("[::]:40002", "[::]:40002")); + BOOST_CHECK(TestParse("[127.0.0.1]", "127.0.0.1:65535")); + BOOST_CHECK(TestParse(":::", "")); +} + +BOOST_AUTO_TEST_CASE(onioncat_test) +{ + // 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); + BOOST_CHECK(addr1.IsTor()); + BOOST_CHECK(addr1.ToStringIP() == "5wyqrzbvrdsumnok.onion"); + BOOST_CHECK(addr1.IsRoutable()); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/pmt_tests.cpp b/src/test/pmt_tests.cpp index c7c4208..ad366df 100644 --- a/src/test/pmt_tests.cpp +++ b/src/test/pmt_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/pmt_tests.cpp~ b/src/test/pmt_tests.cpp~ new file mode 100644 index 0000000..c8577e5 --- /dev/null +++ b/src/test/pmt_tests.cpp~ @@ -0,0 +1,106 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "serialize.h" +#include "uint256.h" + +#include + +#include + +using namespace std; + +class CPartialMerkleTreeTester : public CPartialMerkleTree +{ +public: + // flip one bit in one of the hashes - this should break the authentication + void Damage() { + unsigned int n = rand() % vHash.size(); + int bit = rand() % 256; + uint256 &hash = vHash[n]; + hash ^= ((uint256)1 << bit); + } +}; + +BOOST_AUTO_TEST_SUITE(pmt_tests) + +BOOST_AUTO_TEST_CASE(pmt_test1) +{ + static const unsigned int nTxCounts[] = {1, 4, 7, 17, 56, 100, 127, 256, 312, 513, 1000, 4095}; + + for (int n = 0; n < 12; n++) { + unsigned int nTx = nTxCounts[n]; + + // build a block with some dummy transactions + CBlock block; + for (unsigned int j=0; j vTxid(nTx, 0); + for (unsigned int j=0; j 1) { + nTx_ = (nTx_+1)/2; + nHeight++; + } + + // check with random subsets with inclusion chances 1, 1/2, 1/4, ..., 1/128 + for (int att = 1; att < 15; att++) { + // build random subset of txid's + std::vector vMatch(nTx, false); + std::vector vMatchTxid1; + for (unsigned int j=0; j(nTx, 1 + vMatchTxid1.size()*nHeight); + BOOST_CHECK(ss.size() <= 10 + (258*n+7)/8); + + // deserialize into a tester copy + CPartialMerkleTreeTester pmt2; + ss >> pmt2; + + // extract merkle root and matched txids from copy + std::vector vMatchTxid2; + uint256 merkleRoot2 = pmt2.ExtractMatches(vMatchTxid2); + + // check that it has the same merkle root as the original, and a valid one + BOOST_CHECK(merkleRoot1 == merkleRoot2); + BOOST_CHECK(merkleRoot2 != 0); + + // check that it contains the matched transactions (in the same order!) + BOOST_CHECK(vMatchTxid1 == vMatchTxid2); + + // check that random bit flips break the authentication + for (int j=0; j<4; j++) { + CPartialMerkleTreeTester pmt3(pmt2); + pmt3.Damage(); + std::vector vMatchTxid3; + uint256 merkleRoot3 = pmt3.ExtractMatches(vMatchTxid3); + BOOST_CHECK(merkleRoot3 != merkleRoot1); + } + } + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/rpc_tests.cpp b/src/test/rpc_tests.cpp index 32b075b..a9cbc61 100644 --- a/src/test/rpc_tests.cpp +++ b/src/test/rpc_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/rpc_tests.cpp~ b/src/test/rpc_tests.cpp~ new file mode 100644 index 0000000..701e926 --- /dev/null +++ b/src/test/rpc_tests.cpp~ @@ -0,0 +1,143 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 +#include + +using namespace std; +using namespace json_spirit; + +Array +createArgs(int nRequired, const char* address1=NULL, const char* address2=NULL) +{ + Array result; + result.push_back(nRequired); + Array addresses; + if (address1) addresses.push_back(address1); + if (address2) addresses.push_back(address2); + result.push_back(addresses); + return result; +} + +Value CallRPC(string args) +{ + vector vArgs; + boost::split(vArgs, args, boost::is_any_of(" \t")); + string strMethod = vArgs[0]; + vArgs.erase(vArgs.begin()); + Array params = RPCConvertValues(strMethod, vArgs); + + rpcfn_type method = tableRPC[strMethod]->actor; + try { + Value result = (*method)(params, false); + return result; + } + catch (Object& objError) + { + throw runtime_error(find_value(objError, "message").get_str()); + } +} + + +BOOST_AUTO_TEST_SUITE(rpc_tests) + +BOOST_AUTO_TEST_CASE(rpc_rawparams) +{ + // Test raw transaction API argument handling + Value r; + + BOOST_CHECK_THROW(CallRPC("getrawtransaction"), runtime_error); + BOOST_CHECK_THROW(CallRPC("getrawtransaction not_hex"), runtime_error); + BOOST_CHECK_THROW(CallRPC("getrawtransaction a3b807410df0b60fcb9736768df5823938b2f838694939ba45f3c0a1bff150ed not_int"), runtime_error); + + BOOST_CHECK_THROW(CallRPC("createrawtransaction"), runtime_error); + BOOST_CHECK_THROW(CallRPC("createrawtransaction null null"), runtime_error); + BOOST_CHECK_THROW(CallRPC("createrawtransaction not_array"), runtime_error); + BOOST_CHECK_THROW(CallRPC("createrawtransaction [] []"), runtime_error); + BOOST_CHECK_THROW(CallRPC("createrawtransaction {} {}"), runtime_error); + BOOST_CHECK_NO_THROW(CallRPC("createrawtransaction [] {}")); + BOOST_CHECK_THROW(CallRPC("createrawtransaction [] {} extra"), runtime_error); + + BOOST_CHECK_THROW(CallRPC("decoderawtransaction"), runtime_error); + BOOST_CHECK_THROW(CallRPC("decoderawtransaction null"), runtime_error); + BOOST_CHECK_THROW(CallRPC("decoderawtransaction DEADBEEF"), runtime_error); + string rawtx = "0100000001a15d57094aa7a21a28cb20b59aab8fc7d1149a3bdbcddba9c622e4f5f6a99ece010000006c493046022100f93bb0e7d8db7bd46e40132d1f8242026e045f03a0efe71bbb8e3f475e970d790221009337cd7f1f929f00cc6ff01f03729b069a7c21b59b1736ddfee5db5946c5da8c0121033b9b137ee87d5a812d6f506efdd37f0affa7ffc310711c06c7f3e097c9447c52ffffffff0100e1f505000000001976a9140389035a9225b3839e2bbf32d826a1e222031fd888ac00000000"; + BOOST_CHECK_NO_THROW(r = CallRPC(string("decoderawtransaction ")+rawtx)); + BOOST_CHECK_EQUAL(find_value(r.get_obj(), "version").get_int(), 1); + BOOST_CHECK_EQUAL(find_value(r.get_obj(), "locktime").get_int(), 0); + BOOST_CHECK_THROW(r = CallRPC(string("decoderawtransaction ")+rawtx+" extra"), runtime_error); + + BOOST_CHECK_THROW(CallRPC("signrawtransaction"), runtime_error); + BOOST_CHECK_THROW(CallRPC("signrawtransaction null"), runtime_error); + BOOST_CHECK_THROW(CallRPC("signrawtransaction ff00"), runtime_error); + BOOST_CHECK_NO_THROW(CallRPC(string("signrawtransaction ")+rawtx)); + BOOST_CHECK_NO_THROW(CallRPC(string("signrawtransaction ")+rawtx+" null null NONE|ANYONECANPAY")); + BOOST_CHECK_NO_THROW(CallRPC(string("signrawtransaction ")+rawtx+" [] [] NONE|ANYONECANPAY")); + BOOST_CHECK_THROW(CallRPC(string("signrawtransaction ")+rawtx+" null null badenum"), runtime_error); + + // Only check failure cases for sendrawtransaction, there's no network to send to... + BOOST_CHECK_THROW(CallRPC("sendrawtransaction"), runtime_error); + BOOST_CHECK_THROW(CallRPC("sendrawtransaction null"), runtime_error); + BOOST_CHECK_THROW(CallRPC("sendrawtransaction DEADBEEF"), runtime_error); + BOOST_CHECK_THROW(CallRPC(string("sendrawtransaction ")+rawtx+" extra"), runtime_error); +} + +BOOST_AUTO_TEST_CASE(rpc_rawsign) +{ + Value r; + // input is a 1-of-2 multisig (so is output): + string prevout = + "[{\"txid\":\"b4cc287e58f87cdae59417329f710f3ecd75a4ee1d2872b7248f50977c8493f3\"," + "\"vout\":1,\"scriptPubKey\":\"a914b10c9df5f7edf436c697f02f1efdba4cf399615187\"," + "\"redeemScript\":\"512103debedc17b3df2badbcdd86d5feb4562b86fe182e5998abd8bcd4f122c6155b1b21027e940bb73ab8732bfdf7f9216ecefca5b94d6df834e77e108f68e66f126044c052ae\"}]"; + r = CallRPC(string("createrawtransaction ")+prevout+" "+ + "{\"3HqAe9LtNBjnsfM4CyYaWTnvCaUYT7v4oZ\":11}"); + string notsigned = r.get_str(); + string privkey1 = "\"BpKPp8bC2KAgjs9Nd3VgNh213hVLwnnKUbRj5Ja62bSoyEuTVvsN\""; + string privkey2 = "\"Bvb5kSCJeSgRtdFd84QNDwL7nH1EWdaePWcNfDNXTAhP8z8SLQYr\""; + r = CallRPC(string("signrawtransaction ")+notsigned+" "+prevout+" "+"[]"); + // todo update + //BOOST_CHECK(find_value(r.get_obj(), "complete").get_bool() == false); + r = CallRPC(string("signrawtransaction ")+notsigned+" "+prevout+" "+"["+privkey1+","+privkey2+"]"); + //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 index ef6a38c..b6bba7d 100644 --- a/src/test/rpc_wallet_tests.cpp +++ b/src/test/rpc_wallet_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2013-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/rpc_wallet_tests.cpp~ b/src/test/rpc_wallet_tests.cpp~ new file mode 100644 index 0000000..0810859 --- /dev/null +++ b/src/test/rpc_wallet_tests.cpp~ @@ -0,0 +1,94 @@ +// Original Code: Copyright (c) 2013-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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; + CBitmarkAddress 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 030dbc2..dfe890e 100644 --- a/src/test/script_P2SH_tests.cpp +++ b/src/test/script_P2SH_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/script_P2SH_tests.cpp~ b/src/test/script_P2SH_tests.cpp~ new file mode 100644 index 0000000..32f24cf --- /dev/null +++ b/src/test/script_P2SH_tests.cpp~ @@ -0,0 +1,349 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "keystore.h" +#include "main.h" +#include "script.h" + +#include + +#include + +using namespace std; + +// Test routines internal to script.cpp: +extern uint256 SignatureHash(CScript scriptCode, const CTransaction& txTo, unsigned int nIn, int nHashType); + +// Helpers: +static std::vector +Serialize(const CScript& s) +{ + std::vector sSerialized(s); + return sSerialized; +} + +static bool +Verify(const CScript& scriptSig, const CScript& scriptPubKey, bool fStrict) +{ + // Create dummy to/from transactions: + CTransaction txFrom; + txFrom.vout.resize(1); + txFrom.vout[0].scriptPubKey = scriptPubKey; + + CTransaction txTo; + txTo.vin.resize(1); + txTo.vout.resize(1); + txTo.vin[0].prevout.n = 0; + txTo.vin[0].prevout.hash = txFrom.GetHash(); + txTo.vin[0].scriptSig = scriptSig; + txTo.vout[0].nValue = 1; + + return VerifyScript(scriptSig, scriptPubKey, txTo, 0, fStrict ? SCRIPT_VERIFY_P2SH : SCRIPT_VERIFY_NONE, 0); +} + + +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 + + // Test SignSignature() (and therefore the version of Solver() that signs transactions) + CBasicKeyStore keystore; + CKey key[4]; + for (int i = 0; i < 4; i++) + { + key[i].MakeNewKey(true); + keystore.AddKey(key[i]); + } + + // 8 Scripts: checking all combinations of + // different keys, straight/P2SH, pubkey/pubkeyhash + CScript standardScripts[4]; + standardScripts[0] << key[0].GetPubKey() << OP_CHECKSIG; + standardScripts[1].SetDestination(key[1].GetPubKey().GetID()); + standardScripts[2] << key[1].GetPubKey() << OP_CHECKSIG; + standardScripts[3].SetDestination(key[2].GetPubKey().GetID()); + CScript evalScripts[4]; + for (int i = 0; i < 4; i++) + { + keystore.AddCScript(standardScripts[i]); + evalScripts[i].SetDestination(standardScripts[i].GetID()); + } + + CTransaction txFrom; // Funding transaction: + string reason; + txFrom.vout.resize(8); + for (int i = 0; i < 4; i++) + { + txFrom.vout[i].scriptPubKey = evalScripts[i]; + txFrom.vout[i].nValue = COIN; + txFrom.vout[i+4].scriptPubKey = standardScripts[i]; + txFrom.vout[i+4].nValue = COIN; + } + BOOST_CHECK(IsStandardTx(txFrom, reason)); + + CTransaction txTo[8]; // Spending transactions + for (int i = 0; i < 8; i++) + { + txTo[i].vin.resize(1); + txTo[i].vout.resize(1); + txTo[i].vin[0].prevout.n = i; + txTo[i].vin[0].prevout.hash = txFrom.GetHash(); + txTo[i].vout[0].nValue = 1; + BOOST_CHECK_MESSAGE(IsMine(keystore, txFrom.vout[i].scriptPubKey), strprintf("IsMine %d", i)); + } + for (int i = 0; i < 8; i++) + { + BOOST_CHECK_MESSAGE(SignSignature(keystore, txFrom, txTo[i], 0), strprintf("SignSignature %d", i)); + } + // All of the above should be OK, and the txTos have valid signatures + // Check to make sure signature verification fails if we use the wrong ScriptSig: + for (int i = 0; i < 8; i++) + for (int j = 0; j < 8; j++) + { + CScript sigSave = txTo[i].vin[0].scriptSig; + txTo[i].vin[0].scriptSig = txTo[j].vin[0].scriptSig; + bool sigOK = VerifySignature(CCoins(txFrom, 0), txTo[i], 0, SCRIPT_VERIFY_P2SH | SCRIPT_VERIFY_STRICTENC, 0); + if (i == j) + BOOST_CHECK_MESSAGE(sigOK, strprintf("VerifySignature %d %d", i, j)); + else + BOOST_CHECK_MESSAGE(!sigOK, strprintf("VerifySignature %d %d", i, j)); + txTo[i].vin[0].scriptSig = sigSave; + } +} + +BOOST_AUTO_TEST_CASE(norecurse) +{ + // Make sure only the outer pay-to-script-hash does the + // extra-validation thing: + CScript invalidAsScript; + invalidAsScript << OP_INVALIDOPCODE << OP_INVALIDOPCODE; + + CScript p2sh; + p2sh.SetDestination(invalidAsScript.GetID()); + + CScript scriptSig; + scriptSig << Serialize(invalidAsScript); + + // Should not verify, because it will try to execute OP_INVALIDOPCODE + BOOST_CHECK(!Verify(scriptSig, p2sh, true)); + + // Try to recur, and verification should succeed because + // the inner HASH160 <> EQUAL should only check the hash: + CScript p2sh2; + p2sh2.SetDestination(p2sh.GetID()); + CScript scriptSig2; + scriptSig2 << Serialize(invalidAsScript) << Serialize(p2sh); + + BOOST_CHECK(Verify(scriptSig2, p2sh2, true)); +} + +BOOST_AUTO_TEST_CASE(set) +{ + LOCK(cs_main); + // Test the CScript::Set* methods + CBasicKeyStore keystore; + CKey key[4]; + std::vector keys; + for (int i = 0; i < 4; i++) + { + key[i].MakeNewKey(true); + keystore.AddKey(key[i]); + keys.push_back(key[i].GetPubKey()); + } + + CScript inner[4]; + inner[0].SetDestination(key[0].GetPubKey().GetID()); + inner[1].SetMultisig(2, std::vector(keys.begin(), keys.begin()+2)); + inner[2].SetMultisig(1, std::vector(keys.begin(), keys.begin()+2)); + inner[3].SetMultisig(2, std::vector(keys.begin(), keys.begin()+3)); + + CScript outer[4]; + for (int i = 0; i < 4; i++) + { + outer[i].SetDestination(inner[i].GetID()); + keystore.AddCScript(inner[i]); + } + + CTransaction txFrom; // Funding transaction: + string reason; + txFrom.vout.resize(4); + for (int i = 0; i < 4; i++) + { + txFrom.vout[i].scriptPubKey = outer[i]; + txFrom.vout[i].nValue = CENT; + } + BOOST_CHECK(IsStandardTx(txFrom, reason)); + + CTransaction txTo[4]; // Spending transactions + for (int i = 0; i < 4; i++) + { + txTo[i].vin.resize(1); + txTo[i].vout.resize(1); + txTo[i].vin[0].prevout.n = i; + txTo[i].vin[0].prevout.hash = txFrom.GetHash(); + txTo[i].vout[0].nValue = 1*CENT; + txTo[i].vout[0].scriptPubKey = inner[i]; + BOOST_CHECK_MESSAGE(IsMine(keystore, txFrom.vout[i].scriptPubKey), strprintf("IsMine %d", i)); + } + for (int i = 0; i < 4; i++) + { + BOOST_CHECK_MESSAGE(SignSignature(keystore, txFrom, txTo[i], 0), strprintf("SignSignature %d", i)); + BOOST_CHECK_MESSAGE(IsStandardTx(txTo[i], reason), strprintf("txTo[%d].IsStandard", i)); + } +} + +BOOST_AUTO_TEST_CASE(is) +{ + // Test CScript::IsPayToScriptHash() + uint160 dummy; + CScript p2sh; + p2sh << OP_HASH160 << dummy << OP_EQUAL; + BOOST_CHECK(p2sh.IsPayToScriptHash()); + + // Not considered pay-to-script-hash if using one of the OP_PUSHDATA opcodes: + static const unsigned char direct[] = { OP_HASH160, 20, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, OP_EQUAL }; + BOOST_CHECK(CScript(direct, direct+sizeof(direct)).IsPayToScriptHash()); + static const unsigned char pushdata1[] = { OP_HASH160, OP_PUSHDATA1, 20, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, OP_EQUAL }; + BOOST_CHECK(!CScript(pushdata1, pushdata1+sizeof(pushdata1)).IsPayToScriptHash()); + static const unsigned char pushdata2[] = { OP_HASH160, OP_PUSHDATA2, 20,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, OP_EQUAL }; + BOOST_CHECK(!CScript(pushdata2, pushdata2+sizeof(pushdata2)).IsPayToScriptHash()); + static const unsigned char pushdata4[] = { OP_HASH160, OP_PUSHDATA4, 20,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, OP_EQUAL }; + BOOST_CHECK(!CScript(pushdata4, pushdata4+sizeof(pushdata4)).IsPayToScriptHash()); + + CScript not_p2sh; + BOOST_CHECK(!not_p2sh.IsPayToScriptHash()); + + not_p2sh.clear(); not_p2sh << OP_HASH160 << dummy << dummy << OP_EQUAL; + BOOST_CHECK(!not_p2sh.IsPayToScriptHash()); + + not_p2sh.clear(); not_p2sh << OP_NOP << dummy << OP_EQUAL; + BOOST_CHECK(!not_p2sh.IsPayToScriptHash()); + + not_p2sh.clear(); not_p2sh << OP_HASH160 << dummy << OP_CHECKSIG; + BOOST_CHECK(!not_p2sh.IsPayToScriptHash()); +} + +BOOST_AUTO_TEST_CASE(switchover) +{ + // Test switch over code + CScript notValid; + notValid << OP_11 << OP_12 << OP_EQUALVERIFY; + CScript scriptSig; + scriptSig << Serialize(notValid); + + CScript fund; + fund.SetDestination(notValid.GetID()); + + + // Validation should succeed under old rules (hash is correct): + BOOST_CHECK(Verify(scriptSig, fund, false)); + // Fail under new: + BOOST_CHECK(!Verify(scriptSig, fund, true)); +} + +BOOST_AUTO_TEST_CASE(AreInputsStandard) +{ + LOCK(cs_main); + CCoinsView coinsDummy; + CCoinsViewCache coins(coinsDummy); + CBasicKeyStore keystore; + CKey key[3]; + vector keys; + for (int i = 0; i < 3; i++) + { + key[i].MakeNewKey(true); + keystore.AddKey(key[i]); + keys.push_back(key[i].GetPubKey()); + } + + CTransaction txFrom; + txFrom.vout.resize(6); + + // First three are standard: + CScript pay1; pay1.SetDestination(key[0].GetPubKey().GetID()); + keystore.AddCScript(pay1); + CScript payScriptHash1; payScriptHash1.SetDestination(pay1.GetID()); + CScript pay1of3; pay1of3.SetMultisig(1, keys); + + txFrom.vout[0].scriptPubKey = payScriptHash1; + txFrom.vout[0].nValue = 1000; + txFrom.vout[1].scriptPubKey = pay1; + txFrom.vout[1].nValue = 2000; + txFrom.vout[2].scriptPubKey = pay1of3; + txFrom.vout[2].nValue = 3000; + + // Last three non-standard: + CScript empty; + keystore.AddCScript(empty); + txFrom.vout[3].scriptPubKey = empty; + txFrom.vout[3].nValue = 4000; + // Can't use SetPayToScriptHash, it checks for the empty Script. So: + txFrom.vout[4].scriptPubKey << OP_HASH160 << Hash160(empty) << OP_EQUAL; + txFrom.vout[4].nValue = 5000; + CScript oneOfEleven; + oneOfEleven << OP_1; + for (int i = 0; i < 11; i++) + oneOfEleven << key[0].GetPubKey(); + oneOfEleven << OP_11 << OP_CHECKMULTISIG; + txFrom.vout[5].scriptPubKey.SetDestination(oneOfEleven.GetID()); + txFrom.vout[5].nValue = 6000; + + coins.SetCoins(txFrom.GetHash(), CCoins(txFrom, 0)); + + CTransaction txTo; + txTo.vout.resize(1); + txTo.vout[0].scriptPubKey.SetDestination(key[1].GetPubKey().GetID()); + + txTo.vin.resize(3); + txTo.vin[0].prevout.n = 0; + txTo.vin[0].prevout.hash = txFrom.GetHash(); + BOOST_CHECK(SignSignature(keystore, txFrom, txTo, 0)); + txTo.vin[1].prevout.n = 1; + txTo.vin[1].prevout.hash = txFrom.GetHash(); + BOOST_CHECK(SignSignature(keystore, txFrom, txTo, 1)); + txTo.vin[2].prevout.n = 2; + txTo.vin[2].prevout.hash = txFrom.GetHash(); + BOOST_CHECK(SignSignature(keystore, txFrom, txTo, 2)); + + BOOST_CHECK(::AreInputsStandard(txTo, coins)); + BOOST_CHECK_EQUAL(GetP2SHSigOpCount(txTo, coins), 1U); + + // Make sure adding crap to the scriptSigs makes them non-standard: + for (int i = 0; i < 3; i++) + { + CScript t = txTo.vin[i].scriptSig; + txTo.vin[i].scriptSig = (CScript() << 11) + t; + BOOST_CHECK(!::AreInputsStandard(txTo, coins)); + txTo.vin[i].scriptSig = t; + } + + CTransaction txToNonStd; + txToNonStd.vout.resize(1); + txToNonStd.vout[0].scriptPubKey.SetDestination(key[1].GetPubKey().GetID()); + txToNonStd.vout[0].nValue = 1000; + txToNonStd.vin.resize(2); + txToNonStd.vin[0].prevout.n = 4; + txToNonStd.vin[0].prevout.hash = txFrom.GetHash(); + txToNonStd.vin[0].scriptSig << Serialize(empty); + txToNonStd.vin[1].prevout.n = 5; + txToNonStd.vin[1].prevout.hash = txFrom.GetHash(); + txToNonStd.vin[1].scriptSig << OP_0 << Serialize(oneOfEleven); + + BOOST_CHECK(!::AreInputsStandard(txToNonStd, coins)); + BOOST_CHECK_EQUAL(GetP2SHSigOpCount(txToNonStd, coins), 11U); + + txToNonStd.vin[0].scriptSig.clear(); + BOOST_CHECK(!::AreInputsStandard(txToNonStd, coins)); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/script_tests.cpp b/src/test/script_tests.cpp index ca03765..42dd2f5 100644 --- a/src/test/script_tests.cpp +++ b/src/test/script_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/script_tests.cpp~ b/src/test/script_tests.cpp~ new file mode 100644 index 0000000..179495d --- /dev/null +++ b/src/test/script_tests.cpp~ @@ -0,0 +1,464 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "json/json_spirit_reader_template.h" +#include "json/json_spirit_utils.h" +#include "json/json_spirit_writer_template.h" + +using namespace std; +using namespace json_spirit; +using namespace boost::algorithm; + +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; + +CScript +ParseScript(string s) +{ + CScript result; + + static map mapOpNames; + + if (mapOpNames.size() == 0) + { + 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; + string strName(name); + mapOpNames[strName] = (opcodetype)op; + // Convenience: OP_ADD and just ADD are both recognized: + replace_first(strName, "OP_", ""); + mapOpNames[strName] = (opcodetype)op; + } + } + + vector words; + split(words, s, is_any_of(" \t\n"), token_compress_on); + + BOOST_FOREACH(string w, words) + { + if (all(w, is_digit()) || + (starts_with(w, "-") && all(string(w.begin()+1, w.end()), is_digit()))) + { + // Number + int64_t n = atoi64(w); + result << n; + } + else if (starts_with(w, "0x") && IsHex(string(w.begin()+2, w.end()))) + { + // Raw hex data, inserted NOT pushed onto stack: + std::vector raw = ParseHex(string(w.begin()+2, w.end())); + result.insert(result.end(), raw.begin(), raw.end()); + } + else if (w.size() >= 2 && starts_with(w, "'") && ends_with(w, "'")) + { + // Single-quoted string, pushed as data. NOTE: this is poor-man's + // parsing, spaces/tabs/newlines in single-quoted strings won't work. + std::vector value(w.begin()+1, w.end()-1); + result << value; + } + else if (mapOpNames.count(w)) + { + // opcode, e.g. OP_ADD or ADD: + result << mapOpNames[w]; + } + else + { + BOOST_ERROR("Parse error: " << s); + return CScript(); + } + } + + return result; +} + +Array +read_json(const std::string& jsondata) +{ + Value v; + + if (!read_string(jsondata, v) || v.type() != array_type) + { + BOOST_ERROR("Parse error."); + return Array(); + } + return v.get_array(); +} + +BOOST_AUTO_TEST_SUITE(script_tests) + +BOOST_AUTO_TEST_CASE(script_valid) +{ + // Read tests from test/data/script_valid.json + // Format is an array of arrays + // Inner arrays are [ "scriptSig", "scriptPubKey" ] + // ... where scriptSig and scriptPubKey are stringified + // scripts. + Array tests = read_json(std::string(json_tests::script_valid, json_tests::script_valid + sizeof(json_tests::script_valid))); + + BOOST_FOREACH(Value& tv, tests) + { + Array test = tv.get_array(); + string strTest = write_string(tv, false); + if (test.size() < 2) // Allow size > 2; extra stuff ignored (useful for comments) + { + BOOST_ERROR("Bad test: " << strTest); + continue; + } + string scriptSigString = test[0].get_str(); + CScript scriptSig = ParseScript(scriptSigString); + string scriptPubKeyString = test[1].get_str(); + CScript scriptPubKey = ParseScript(scriptPubKeyString); + + CTransaction tx; + BOOST_CHECK_MESSAGE(VerifyScript(scriptSig, scriptPubKey, tx, 0, flags, SIGHASH_NONE), strTest); + } +} + +BOOST_AUTO_TEST_CASE(script_invalid) +{ + // Scripts that should evaluate as invalid + Array tests = read_json(std::string(json_tests::script_invalid, json_tests::script_invalid + sizeof(json_tests::script_invalid))); + + BOOST_FOREACH(Value& tv, tests) + { + Array test = tv.get_array(); + string strTest = write_string(tv, false); + if (test.size() < 2) // Allow size > 2; extra stuff ignored (useful for comments) + { + BOOST_ERROR("Bad test: " << strTest); + continue; + } + string scriptSigString = test[0].get_str(); + CScript scriptSig = ParseScript(scriptSigString); + string scriptPubKeyString = test[1].get_str(); + CScript scriptPubKey = ParseScript(scriptPubKeyString); + + CTransaction tx; + BOOST_CHECK_MESSAGE(!VerifyScript(scriptSig, scriptPubKey, tx, 0, flags, SIGHASH_NONE), strTest); + } +} + +BOOST_AUTO_TEST_CASE(script_PushData) +{ + // Check that PUSHDATA1, PUSHDATA2, and PUSHDATA4 create the same value on + // the stack as the 1-75 opcodes do. + static const unsigned char direct[] = { 1, 0x5a }; + static const unsigned char pushdata1[] = { OP_PUSHDATA1, 1, 0x5a }; + static const unsigned char pushdata2[] = { OP_PUSHDATA2, 1, 0, 0x5a }; + static const unsigned char pushdata4[] = { OP_PUSHDATA4, 1, 0, 0, 0, 0x5a }; + + vector > directStack; + BOOST_CHECK(EvalScript(directStack, CScript(&direct[0], &direct[sizeof(direct)]), CTransaction(), 0, true, 0)); + + vector > pushdata1Stack; + BOOST_CHECK(EvalScript(pushdata1Stack, CScript(&pushdata1[0], &pushdata1[sizeof(pushdata1)]), CTransaction(), 0, true, 0)); + BOOST_CHECK(pushdata1Stack == directStack); + + vector > pushdata2Stack; + BOOST_CHECK(EvalScript(pushdata2Stack, CScript(&pushdata2[0], &pushdata2[sizeof(pushdata2)]), CTransaction(), 0, true, 0)); + BOOST_CHECK(pushdata2Stack == directStack); + + vector > pushdata4Stack; + BOOST_CHECK(EvalScript(pushdata4Stack, CScript(&pushdata4[0], &pushdata4[sizeof(pushdata4)]), CTransaction(), 0, true, 0)); + BOOST_CHECK(pushdata4Stack == directStack); +} + +CScript +sign_multisig(CScript scriptPubKey, std::vector keys, CTransaction transaction) +{ + uint256 hash = SignatureHash(scriptPubKey, transaction, 0, SIGHASH_ALL); + + CScript result; + // + // NOTE: CHECKMULTISIG has an unfortunate bug; it requires + // one extra item on the stack, before the signatures. + // Putting OP_0 on the stack is the workaround; + // fixing the bug would mean splitting the block chain (old + // clients would not accept new CHECKMULTISIG transactions, + // and vice-versa) + // + result << OP_0; + BOOST_FOREACH(const CKey &key, keys) + { + vector vchSig; + BOOST_CHECK(key.Sign(hash, vchSig)); + vchSig.push_back((unsigned char)SIGHASH_ALL); + result << vchSig; + } + return result; +} +CScript +sign_multisig(CScript scriptPubKey, const CKey &key, CTransaction transaction) +{ + std::vector keys; + keys.push_back(key); + return sign_multisig(scriptPubKey, keys, transaction); +} + +BOOST_AUTO_TEST_CASE(script_CHECKMULTISIG12) +{ + CKey key1, key2, key3; + key1.MakeNewKey(true); + key2.MakeNewKey(false); + key3.MakeNewKey(true); + + CScript scriptPubKey12; + scriptPubKey12 << OP_1 << key1.GetPubKey() << key2.GetPubKey() << OP_2 << OP_CHECKMULTISIG; + + CTransaction txFrom12; + txFrom12.vout.resize(1); + txFrom12.vout[0].scriptPubKey = scriptPubKey12; + + CTransaction txTo12; + txTo12.vin.resize(1); + txTo12.vout.resize(1); + txTo12.vin[0].prevout.n = 0; + txTo12.vin[0].prevout.hash = txFrom12.GetHash(); + txTo12.vout[0].nValue = 1; + + CScript goodsig1 = sign_multisig(scriptPubKey12, key1, txTo12); + BOOST_CHECK(VerifyScript(goodsig1, scriptPubKey12, txTo12, 0, flags, 0)); + txTo12.vout[0].nValue = 2; + BOOST_CHECK(!VerifyScript(goodsig1, scriptPubKey12, txTo12, 0, flags, 0)); + + CScript goodsig2 = sign_multisig(scriptPubKey12, key2, txTo12); + BOOST_CHECK(VerifyScript(goodsig2, scriptPubKey12, txTo12, 0, flags, 0)); + + CScript badsig1 = sign_multisig(scriptPubKey12, key3, txTo12); + BOOST_CHECK(!VerifyScript(badsig1, scriptPubKey12, txTo12, 0, flags, 0)); +} + +BOOST_AUTO_TEST_CASE(script_CHECKMULTISIG23) +{ + CKey key1, key2, key3, key4; + key1.MakeNewKey(true); + key2.MakeNewKey(false); + key3.MakeNewKey(true); + key4.MakeNewKey(false); + + CScript scriptPubKey23; + scriptPubKey23 << OP_2 << key1.GetPubKey() << key2.GetPubKey() << key3.GetPubKey() << OP_3 << OP_CHECKMULTISIG; + + CTransaction txFrom23; + txFrom23.vout.resize(1); + txFrom23.vout[0].scriptPubKey = scriptPubKey23; + + CTransaction txTo23; + txTo23.vin.resize(1); + txTo23.vout.resize(1); + txTo23.vin[0].prevout.n = 0; + txTo23.vin[0].prevout.hash = txFrom23.GetHash(); + txTo23.vout[0].nValue = 1; + + std::vector keys; + keys.push_back(key1); keys.push_back(key2); + CScript goodsig1 = sign_multisig(scriptPubKey23, keys, txTo23); + BOOST_CHECK(VerifyScript(goodsig1, scriptPubKey23, txTo23, 0, flags, 0)); + + keys.clear(); + keys.push_back(key1); keys.push_back(key3); + CScript goodsig2 = sign_multisig(scriptPubKey23, keys, txTo23); + BOOST_CHECK(VerifyScript(goodsig2, scriptPubKey23, txTo23, 0, flags, 0)); + + keys.clear(); + keys.push_back(key2); keys.push_back(key3); + CScript goodsig3 = sign_multisig(scriptPubKey23, keys, txTo23); + BOOST_CHECK(VerifyScript(goodsig3, scriptPubKey23, txTo23, 0, flags, 0)); + + keys.clear(); + keys.push_back(key2); keys.push_back(key2); // Can't re-use sig + CScript badsig1 = sign_multisig(scriptPubKey23, keys, txTo23); + BOOST_CHECK(!VerifyScript(badsig1, scriptPubKey23, txTo23, 0, flags, 0)); + + keys.clear(); + keys.push_back(key2); keys.push_back(key1); // sigs must be in correct order + CScript badsig2 = sign_multisig(scriptPubKey23, keys, txTo23); + BOOST_CHECK(!VerifyScript(badsig2, scriptPubKey23, txTo23, 0, flags, 0)); + + keys.clear(); + keys.push_back(key3); keys.push_back(key2); // sigs must be in correct order + CScript badsig3 = sign_multisig(scriptPubKey23, keys, txTo23); + BOOST_CHECK(!VerifyScript(badsig3, scriptPubKey23, txTo23, 0, flags, 0)); + + keys.clear(); + keys.push_back(key4); keys.push_back(key2); // sigs must match pubkeys + CScript badsig4 = sign_multisig(scriptPubKey23, keys, txTo23); + BOOST_CHECK(!VerifyScript(badsig4, scriptPubKey23, txTo23, 0, flags, 0)); + + keys.clear(); + keys.push_back(key1); keys.push_back(key4); // sigs must match pubkeys + CScript badsig5 = sign_multisig(scriptPubKey23, keys, txTo23); + BOOST_CHECK(!VerifyScript(badsig5, scriptPubKey23, txTo23, 0, flags, 0)); + + keys.clear(); // Must have signatures + CScript badsig6 = sign_multisig(scriptPubKey23, keys, txTo23); + BOOST_CHECK(!VerifyScript(badsig6, scriptPubKey23, txTo23, 0, flags, 0)); +} + +BOOST_AUTO_TEST_CASE(script_combineSigs) +{ + // Test the CombineSignatures function + CBasicKeyStore keystore; + vector keys; + vector pubkeys; + for (int i = 0; i < 3; i++) + { + CKey key; + key.MakeNewKey(i%2 == 1); + keys.push_back(key); + pubkeys.push_back(key.GetPubKey()); + keystore.AddKey(key); + } + + CTransaction txFrom; + txFrom.vout.resize(1); + txFrom.vout[0].scriptPubKey.SetDestination(keys[0].GetPubKey().GetID()); + CScript& scriptPubKey = txFrom.vout[0].scriptPubKey; + CTransaction txTo; + txTo.vin.resize(1); + txTo.vout.resize(1); + txTo.vin[0].prevout.n = 0; + txTo.vin[0].prevout.hash = txFrom.GetHash(); + CScript& scriptSig = txTo.vin[0].scriptSig; + txTo.vout[0].nValue = 1; + + CScript empty; + CScript combined = CombineSignatures(scriptPubKey, txTo, 0, empty, empty); + BOOST_CHECK(combined.empty()); + + // Single signature case: + SignSignature(keystore, txFrom, txTo, 0); // changes scriptSig + combined = CombineSignatures(scriptPubKey, txTo, 0, scriptSig, empty); + BOOST_CHECK(combined == scriptSig); + combined = CombineSignatures(scriptPubKey, txTo, 0, empty, scriptSig); + BOOST_CHECK(combined == scriptSig); + CScript scriptSigCopy = scriptSig; + // Signing again will give a different, valid signature: + SignSignature(keystore, txFrom, txTo, 0); + combined = CombineSignatures(scriptPubKey, txTo, 0, scriptSigCopy, scriptSig); + BOOST_CHECK(combined == scriptSigCopy || combined == scriptSig); + + // P2SH, single-signature case: + CScript pkSingle; pkSingle << keys[0].GetPubKey() << OP_CHECKSIG; + keystore.AddCScript(pkSingle); + scriptPubKey.SetDestination(pkSingle.GetID()); + SignSignature(keystore, txFrom, txTo, 0); + combined = CombineSignatures(scriptPubKey, txTo, 0, scriptSig, empty); + BOOST_CHECK(combined == scriptSig); + combined = CombineSignatures(scriptPubKey, txTo, 0, empty, scriptSig); + BOOST_CHECK(combined == scriptSig); + scriptSigCopy = scriptSig; + SignSignature(keystore, txFrom, txTo, 0); + combined = CombineSignatures(scriptPubKey, txTo, 0, scriptSigCopy, scriptSig); + BOOST_CHECK(combined == scriptSigCopy || combined == scriptSig); + // dummy scriptSigCopy with placeholder, should always choose non-placeholder: + scriptSigCopy = CScript() << OP_0 << static_cast >(pkSingle); + combined = CombineSignatures(scriptPubKey, txTo, 0, scriptSigCopy, scriptSig); + BOOST_CHECK(combined == scriptSig); + combined = CombineSignatures(scriptPubKey, txTo, 0, scriptSig, scriptSigCopy); + BOOST_CHECK(combined == scriptSig); + + // Hardest case: Multisig 2-of-3 + scriptPubKey.SetMultisig(2, pubkeys); + keystore.AddCScript(scriptPubKey); + SignSignature(keystore, txFrom, txTo, 0); + combined = CombineSignatures(scriptPubKey, txTo, 0, scriptSig, empty); + BOOST_CHECK(combined == scriptSig); + combined = CombineSignatures(scriptPubKey, txTo, 0, empty, scriptSig); + BOOST_CHECK(combined == scriptSig); + + // A couple of partially-signed versions: + vector sig1; + uint256 hash1 = SignatureHash(scriptPubKey, txTo, 0, SIGHASH_ALL); + BOOST_CHECK(keys[0].Sign(hash1, sig1)); + sig1.push_back(SIGHASH_ALL); + vector sig2; + uint256 hash2 = SignatureHash(scriptPubKey, txTo, 0, SIGHASH_NONE); + BOOST_CHECK(keys[1].Sign(hash2, sig2)); + sig2.push_back(SIGHASH_NONE); + vector sig3; + uint256 hash3 = SignatureHash(scriptPubKey, txTo, 0, SIGHASH_SINGLE); + BOOST_CHECK(keys[2].Sign(hash3, sig3)); + sig3.push_back(SIGHASH_SINGLE); + + // Not fussy about order (or even existence) of placeholders or signatures: + CScript partial1a = CScript() << OP_0 << sig1 << OP_0; + CScript partial1b = CScript() << OP_0 << OP_0 << sig1; + CScript partial2a = CScript() << OP_0 << sig2; + CScript partial2b = CScript() << sig2 << OP_0; + CScript partial3a = CScript() << sig3; + CScript partial3b = CScript() << OP_0 << OP_0 << sig3; + CScript partial3c = CScript() << OP_0 << sig3 << OP_0; + CScript complete12 = CScript() << OP_0 << sig1 << sig2; + CScript complete13 = CScript() << OP_0 << sig1 << sig3; + CScript complete23 = CScript() << OP_0 << sig2 << sig3; + + combined = CombineSignatures(scriptPubKey, txTo, 0, partial1a, partial1b); + BOOST_CHECK(combined == partial1a); + combined = CombineSignatures(scriptPubKey, txTo, 0, partial1a, partial2a); + BOOST_CHECK(combined == complete12); + combined = CombineSignatures(scriptPubKey, txTo, 0, partial2a, partial1a); + BOOST_CHECK(combined == complete12); + combined = CombineSignatures(scriptPubKey, txTo, 0, partial1b, partial2b); + BOOST_CHECK(combined == complete12); + combined = CombineSignatures(scriptPubKey, txTo, 0, partial3b, partial1b); + BOOST_CHECK(combined == complete13); + combined = CombineSignatures(scriptPubKey, txTo, 0, partial2a, partial3a); + BOOST_CHECK(combined == complete23); + combined = CombineSignatures(scriptPubKey, txTo, 0, partial3b, partial2b); + BOOST_CHECK(combined == complete23); + combined = CombineSignatures(scriptPubKey, txTo, 0, partial3b, partial3a); + 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/scriptnum_tests.cpp b/src/test/scriptnum_tests.cpp index 729ece6..a02d6b9 100644 --- a/src/test/scriptnum_tests.cpp +++ b/src/test/scriptnum_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/scriptnum_tests.cpp~ b/src/test/scriptnum_tests.cpp~ new file mode 100644 index 0000000..ae2a0a0 --- /dev/null +++ b/src/test/scriptnum_tests.cpp~ @@ -0,0 +1,197 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "script.h" +#include +#include +#include +BOOST_AUTO_TEST_SUITE(scriptnum_tests) + +static const int64_t values[] = \ +{ 0, 1, CHAR_MIN, CHAR_MAX, UCHAR_MAX, SHRT_MIN, USHRT_MAX, INT_MIN, INT_MAX, UINT_MAX, LONG_MIN, LONG_MAX }; +static const int64_t offsets[] = { 1, 0x79, 0x80, 0x81, 0xFF, 0x7FFF, 0x8000, 0xFFFF, 0x10000}; + +static bool verify(const CBigNum& bignum, const CScriptNum& scriptnum) +{ + return bignum.getvch() == scriptnum.getvch() && bignum.getint() == scriptnum.getint(); +} + +static void CheckCreateVch(const int64_t& num) +{ + CBigNum bignum(num); + CScriptNum scriptnum(num); + BOOST_CHECK(verify(bignum, scriptnum)); + + CBigNum bignum2(bignum.getvch()); + CScriptNum scriptnum2(scriptnum.getvch()); + BOOST_CHECK(verify(bignum2, scriptnum2)); + + CBigNum bignum3(scriptnum2.getvch()); + CScriptNum scriptnum3(bignum2.getvch()); + BOOST_CHECK(verify(bignum3, scriptnum3)); +} + +static void CheckCreateInt(const int64_t& num) +{ + CBigNum bignum(num); + CScriptNum scriptnum(num); + BOOST_CHECK(verify(bignum, scriptnum)); + BOOST_CHECK(verify(bignum.getint(), CScriptNum(scriptnum.getint()))); + BOOST_CHECK(verify(scriptnum.getint(), CScriptNum(bignum.getint()))); + BOOST_CHECK(verify(CBigNum(scriptnum.getint()).getint(), CScriptNum(CScriptNum(bignum.getint()).getint()))); +} + + +static void CheckAdd(const int64_t& num1, const int64_t& num2) +{ + const CBigNum bignum1(num1); + const CBigNum bignum2(num2); + const CScriptNum scriptnum1(num1); + const CScriptNum scriptnum2(num2); + CBigNum bignum3(num1); + CBigNum bignum4(num1); + CScriptNum scriptnum3(num1); + CScriptNum scriptnum4(num1); + + // int64_t overflow is undefined. + bool invalid = (((num2 > 0) && (num1 > (std::numeric_limits::max() - num2))) || + ((num2 < 0) && (num1 < (std::numeric_limits::min() - num2)))); + if (!invalid) + { + BOOST_CHECK(verify(bignum1 + bignum2, scriptnum1 + scriptnum2)); + BOOST_CHECK(verify(bignum1 + bignum2, scriptnum1 + num2)); + BOOST_CHECK(verify(bignum1 + bignum2, scriptnum2 + num1)); + } +} + +static void CheckNegate(const int64_t& num) +{ + const CBigNum bignum(num); + const CScriptNum scriptnum(num); + + // -INT64_MIN is undefined + if (num != std::numeric_limits::min()) + BOOST_CHECK(verify(-bignum, -scriptnum)); +} + +static void CheckSubtract(const int64_t& num1, const int64_t& num2) +{ + const CBigNum bignum1(num1); + const CBigNum bignum2(num2); + const CScriptNum scriptnum1(num1); + const CScriptNum scriptnum2(num2); + bool invalid = false; + + // int64_t overflow is undefined. + invalid = ((num2 > 0 && num1 < std::numeric_limits::min() + num2) || + (num2 < 0 && num1 > std::numeric_limits::max() + num2)); + if (!invalid) + { + BOOST_CHECK(verify(bignum1 - bignum2, scriptnum1 - scriptnum2)); + BOOST_CHECK(verify(bignum1 - bignum2, scriptnum1 - num2)); + } + + invalid = ((num1 > 0 && num2 < std::numeric_limits::min() + num1) || + (num1 < 0 && num2 > std::numeric_limits::max() + num1)); + if (!invalid) + { + BOOST_CHECK(verify(bignum2 - bignum1, scriptnum2 - scriptnum1)); + BOOST_CHECK(verify(bignum2 - bignum1, scriptnum2 - num1)); + } +} + +static void CheckCompare(const int64_t& num1, const int64_t& num2) +{ + const CBigNum bignum1(num1); + const CBigNum bignum2(num2); + const CScriptNum scriptnum1(num1); + const CScriptNum scriptnum2(num2); + + BOOST_CHECK((bignum1 == bignum1) == (scriptnum1 == scriptnum1)); + BOOST_CHECK((bignum1 != bignum1) == (scriptnum1 != scriptnum1)); + BOOST_CHECK((bignum1 < bignum1) == (scriptnum1 < scriptnum1)); + BOOST_CHECK((bignum1 > bignum1) == (scriptnum1 > scriptnum1)); + BOOST_CHECK((bignum1 >= bignum1) == (scriptnum1 >= scriptnum1)); + BOOST_CHECK((bignum1 <= bignum1) == (scriptnum1 <= scriptnum1)); + + BOOST_CHECK((bignum1 == bignum1) == (scriptnum1 == num1)); + BOOST_CHECK((bignum1 != bignum1) == (scriptnum1 != num1)); + BOOST_CHECK((bignum1 < bignum1) == (scriptnum1 < num1)); + BOOST_CHECK((bignum1 > bignum1) == (scriptnum1 > num1)); + BOOST_CHECK((bignum1 >= bignum1) == (scriptnum1 >= num1)); + BOOST_CHECK((bignum1 <= bignum1) == (scriptnum1 <= num1)); + + BOOST_CHECK((bignum1 == bignum2) == (scriptnum1 == scriptnum2)); + BOOST_CHECK((bignum1 != bignum2) == (scriptnum1 != scriptnum2)); + BOOST_CHECK((bignum1 < bignum2) == (scriptnum1 < scriptnum2)); + BOOST_CHECK((bignum1 > bignum2) == (scriptnum1 > scriptnum2)); + BOOST_CHECK((bignum1 >= bignum2) == (scriptnum1 >= scriptnum2)); + BOOST_CHECK((bignum1 <= bignum2) == (scriptnum1 <= scriptnum2)); + + BOOST_CHECK((bignum1 == bignum2) == (scriptnum1 == num2)); + BOOST_CHECK((bignum1 != bignum2) == (scriptnum1 != num2)); + BOOST_CHECK((bignum1 < bignum2) == (scriptnum1 < num2)); + BOOST_CHECK((bignum1 > bignum2) == (scriptnum1 > num2)); + BOOST_CHECK((bignum1 >= bignum2) == (scriptnum1 >= num2)); + BOOST_CHECK((bignum1 <= bignum2) == (scriptnum1 <= num2)); +} + +static void RunCreate(const int64_t& num) +{ + CheckCreateInt(num); + CScriptNum scriptnum(num); + if (scriptnum.getvch().size() <= CScriptNum::nMaxNumSize) + CheckCreateVch(num); + else + { + BOOST_CHECK_THROW (CheckCreateVch(num), scriptnum_error); + } +} + +static void RunOperators(const int64_t& num1, const int64_t& num2) +{ + CheckAdd(num1, num2); + CheckSubtract(num1, num2); + CheckNegate(num1); + CheckCompare(num1, num2); +} + +BOOST_AUTO_TEST_CASE(creation) +{ + for(size_t i = 0; i < sizeof(values) / sizeof(values[0]); ++i) + { + for(size_t j = 0; j < sizeof(offsets) / sizeof(offsets[0]); ++j) + { + RunCreate(values[i]); + RunCreate(values[i] + offsets[j]); + RunCreate(values[i] - offsets[j]); + } + } +} + +BOOST_AUTO_TEST_CASE(operators) +{ + for(size_t i = 0; i < sizeof(values) / sizeof(values[0]); ++i) + { + for(size_t j = 0; j < sizeof(offsets) / sizeof(offsets[0]); ++j) + { + RunOperators(values[i], values[i]); + RunOperators(values[i], -values[i]); + RunOperators(values[i], values[j]); + RunOperators(values[i], -values[j]); + RunOperators(values[i] + values[j], values[j]); + RunOperators(values[i] + values[j], -values[j]); + RunOperators(values[i] - values[j], values[j]); + RunOperators(values[i] - values[j], -values[j]); + RunOperators(values[i] + values[j], values[i] + values[j]); + RunOperators(values[i] + values[j], values[i] - values[j]); + RunOperators(values[i] - values[j], values[i] + values[j]); + RunOperators(values[i] - values[j], values[i] - values[j]); + } + } +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/serialize_tests.cpp b/src/test/serialize_tests.cpp index 54d74a0..dfd57c3 100644 --- a/src/test/serialize_tests.cpp +++ b/src/test/serialize_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/serialize_tests.cpp~ b/src/test/serialize_tests.cpp~ new file mode 100644 index 0000000..cc2cb5b --- /dev/null +++ b/src/test/serialize_tests.cpp~ @@ -0,0 +1,164 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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) + +BOOST_AUTO_TEST_CASE(varints) +{ + // encode + + CDataStream ss(SER_DISK, 0); + CDataStream::size_type size = 0; + for (int i = 0; i < 100000; i++) { + ss << VARINT(i); + size += ::GetSerializeSize(VARINT(i), 0, 0); + BOOST_CHECK(size == ss.size()); + } + + for (uint64_t i = 0; i < 100000000000ULL; i += 999999937) { + ss << VARINT(i); + size += ::GetSerializeSize(VARINT(i), 0, 0); + BOOST_CHECK(size == ss.size()); + } + + // decode + for (int i = 0; i < 100000; i++) { + int j = -1; + ss >> VARINT(j); + BOOST_CHECK_MESSAGE(i == j, "decoded:" << j << " expected:" << i); + } + + 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 index a3deb40..cf5e521 100644 --- a/src/test/sighash_tests.cpp +++ b/src/test/sighash_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2013-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/sighash_tests.cpp~ b/src/test/sighash_tests.cpp~ new file mode 100644 index 0000000..cf0d195 --- /dev/null +++ b/src/test/sighash_tests.cpp~ @@ -0,0 +1,215 @@ +// Original Code: Copyright (c) 2013-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 285b935..6481acc 100644 --- a/src/test/sigopcount_tests.cpp +++ b/src/test/sigopcount_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/sigopcount_tests.cpp~ b/src/test/sigopcount_tests.cpp~ new file mode 100644 index 0000000..a64a9cc --- /dev/null +++ b/src/test/sigopcount_tests.cpp~ @@ -0,0 +1,67 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "script.h" +#include "uint256.h" + +#include + +#include +#include + +using namespace std; + +// Helpers: +static std::vector +Serialize(const CScript& s) +{ + std::vector sSerialized(s); + return sSerialized; +} + +BOOST_AUTO_TEST_SUITE(sigopcount_tests) + +BOOST_AUTO_TEST_CASE(GetSigOpCount) +{ + // Test CScript::GetSigOpCount() + CScript s1; + BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 0U); + BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 0U); + + uint160 dummy; + s1 << OP_1 << dummy << dummy << OP_2 << OP_CHECKMULTISIG; + BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 2U); + s1 << OP_IF << OP_CHECKSIG << OP_ENDIF; + BOOST_CHECK_EQUAL(s1.GetSigOpCount(true), 3U); + BOOST_CHECK_EQUAL(s1.GetSigOpCount(false), 21U); + + CScript p2sh; + p2sh.SetDestination(s1.GetID()); + CScript scriptSig; + scriptSig << OP_0 << Serialize(s1); + BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig), 3U); + + std::vector keys; + for (int i = 0; i < 3; i++) + { + CKey k; + k.MakeNewKey(true); + keys.push_back(k.GetPubKey()); + } + CScript s2; + s2.SetMultisig(1, keys); + BOOST_CHECK_EQUAL(s2.GetSigOpCount(true), 3U); + BOOST_CHECK_EQUAL(s2.GetSigOpCount(false), 20U); + + p2sh.SetDestination(s2.GetID()); + BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(true), 0U); + BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(false), 0U); + CScript scriptSig2; + scriptSig2 << OP_1 << dummy << dummy << Serialize(s2); + BOOST_CHECK_EQUAL(p2sh.GetSigOpCount(scriptSig2), 3U); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/test/test_bitmark.cpp b/src/test/test_bitmark.cpp index 24b2581..8b88516 100644 --- a/src/test/test_bitmark.cpp +++ b/src/test/test_bitmark.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/test_bitmark.cpp~ b/src/test/test_bitmark.cpp~ new file mode 100644 index 0000000..0e37250 --- /dev/null +++ b/src/test/test_bitmark.cpp~ @@ -0,0 +1,92 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 Bitmark Test Suite + + + +#include "main.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; + +extern bool fPrintToConsole; +extern void noui_connect(); + +struct TestingSetup { + CCoinsViewDB *pcoinsdbview; + boost::filesystem::path pathTemp; + boost::thread_group threadGroup; + + TestingSetup() { + fPrintToDebugLog = false; // don't want to write to debug.log file + noui_connect(); +#ifdef ENABLE_WALLET + bitdb.MakeMock(); +#endif + pathTemp = GetTempPath() / strprintf("test_bitmark_%lu_%i", (unsigned long)GetTime(), (int)(GetRand(100000))); + boost::filesystem::create_directories(pathTemp); + mapArgs["-datadir"] = pathTemp.string(); + pblocktree = new CBlockTreeDB(1 << 20, true); + 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); + } +}; + +BOOST_GLOBAL_FIXTURE(TestingSetup); + +void Shutdown(void* parg) +{ + exit(0); +} + +void StartShutdown() +{ + exit(0); +} + +bool ShutdownRequested() +{ + return false; +} + diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index 8314b81..5d31c09 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/transaction_tests.cpp~ b/src/test/transaction_tests.cpp~ new file mode 100644 index 0000000..12dd97b --- /dev/null +++ b/src/test/transaction_tests.cpp~ @@ -0,0 +1,315 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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" + +using namespace std; +using namespace json_spirit; + +// In script_tests.cpp +extern Array read_json(const std::string& jsondata); +extern CScript ParseScript(string s); + +BOOST_AUTO_TEST_SUITE(transaction_tests) + +BOOST_AUTO_TEST_CASE(tx_valid) +{ + // Read tests from test/data/tx_valid.json + // Format is an array of arrays + // 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(std::string(json_tests::tx_valid, json_tests::tx_valid + sizeof(json_tests::tx_valid))); + + BOOST_FOREACH(Value& tv, tests) + { + Array test = tv.get_array(); + string strTest = write_string(tv, false); + if (test[0].type() == array_type) + { + if (test.size() != 3 || test[1].type() != str_type || test[2].type() != bool_type) + { + BOOST_ERROR("Bad test: " << strTest); + continue; + } + + map mapprevOutScriptPubKeys; + Array inputs = test[0].get_array(); + bool fValid = true; + BOOST_FOREACH(Value& input, inputs) + { + if (input.type() != array_type) + { + fValid = false; + break; + } + Array vinput = input.get_array(); + if (vinput.size() != 3) + { + fValid = false; + break; + } + + mapprevOutScriptPubKeys[COutPoint(uint256(vinput[0].get_str()), vinput[1].get_int())] = ParseScript(vinput[2].get_str()); + } + if (!fValid) + { + BOOST_ERROR("Bad test: " << strTest); + continue; + } + + string transaction = test[1].get_str(); + CDataStream stream(ParseHex(transaction), SER_NETWORK, PROTOCOL_VERSION); + CTransaction tx; + stream >> tx; + + CValidationState state; + BOOST_CHECK_MESSAGE(CheckTransaction(tx, state), strTest); + BOOST_CHECK(state.IsValid()); + + for (unsigned int i = 0; i < tx.vin.size(); i++) + { + if (!mapprevOutScriptPubKeys.count(tx.vin[i].prevout)) + { + BOOST_ERROR("Bad test: " << strTest); + break; + } + + BOOST_CHECK_MESSAGE(VerifyScript(tx.vin[i].scriptSig, mapprevOutScriptPubKeys[tx.vin[i].prevout], tx, i, test[2].get_bool() ? SCRIPT_VERIFY_P2SH : SCRIPT_VERIFY_NONE, 0), strTest); + } + } + } +} + +BOOST_AUTO_TEST_CASE(tx_invalid) +{ + // Read tests from test/data/tx_invalid.json + // Format is an array of arrays + // 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(std::string(json_tests::tx_invalid, json_tests::tx_invalid + sizeof(json_tests::tx_invalid))); + + BOOST_FOREACH(Value& tv, tests) + { + Array test = tv.get_array(); + string strTest = write_string(tv, false); + if (test[0].type() == array_type) + { + if (test.size() != 3 || test[1].type() != str_type || test[2].type() != bool_type) + { + BOOST_ERROR("Bad test: " << strTest); + continue; + } + + map mapprevOutScriptPubKeys; + Array inputs = test[0].get_array(); + bool fValid = true; + BOOST_FOREACH(Value& input, inputs) + { + if (input.type() != array_type) + { + fValid = false; + break; + } + Array vinput = input.get_array(); + if (vinput.size() != 3) + { + fValid = false; + break; + } + + mapprevOutScriptPubKeys[COutPoint(uint256(vinput[0].get_str()), vinput[1].get_int())] = ParseScript(vinput[2].get_str()); + } + if (!fValid) + { + BOOST_ERROR("Bad test: " << strTest); + continue; + } + + string transaction = test[1].get_str(); + CDataStream stream(ParseHex(transaction), SER_NETWORK, PROTOCOL_VERSION); + CTransaction tx; + stream >> tx; + + CValidationState state; + fValid = CheckTransaction(tx, state) && state.IsValid(); + + for (unsigned int i = 0; i < tx.vin.size() && fValid; i++) + { + if (!mapprevOutScriptPubKeys.count(tx.vin[i].prevout)) + { + BOOST_ERROR("Bad test: " << strTest); + break; + } + + fValid = VerifyScript(tx.vin[i].scriptSig, mapprevOutScriptPubKeys[tx.vin[i].prevout], tx, i, test[2].get_bool() ? SCRIPT_VERIFY_P2SH : SCRIPT_VERIFY_NONE, 0); + } + + BOOST_CHECK_MESSAGE(!fValid, strTest); + } + } +} + +BOOST_AUTO_TEST_CASE(basic_transaction_tests) +{ + // Random real transaction (e2769b09e784f32f62ef849763d4f45b98e07ba658647343b915ff832b110436) + unsigned char ch[] = {0x01, 0x00, 0x00, 0x00, 0x01, 0x6b, 0xff, 0x7f, 0xcd, 0x4f, 0x85, 0x65, 0xef, 0x40, 0x6d, 0xd5, 0xd6, 0x3d, 0x4f, 0xf9, 0x4f, 0x31, 0x8f, 0xe8, 0x20, 0x27, 0xfd, 0x4d, 0xc4, 0x51, 0xb0, 0x44, 0x74, 0x01, 0x9f, 0x74, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x49, 0x30, 0x46, 0x02, 0x21, 0x00, 0xda, 0x0d, 0xc6, 0xae, 0xce, 0xfe, 0x1e, 0x06, 0xef, 0xdf, 0x05, 0x77, 0x37, 0x57, 0xde, 0xb1, 0x68, 0x82, 0x09, 0x30, 0xe3, 0xb0, 0xd0, 0x3f, 0x46, 0xf5, 0xfc, 0xf1, 0x50, 0xbf, 0x99, 0x0c, 0x02, 0x21, 0x00, 0xd2, 0x5b, 0x5c, 0x87, 0x04, 0x00, 0x76, 0xe4, 0xf2, 0x53, 0xf8, 0x26, 0x2e, 0x76, 0x3e, 0x2d, 0xd5, 0x1e, 0x7f, 0xf0, 0xbe, 0x15, 0x77, 0x27, 0xc4, 0xbc, 0x42, 0x80, 0x7f, 0x17, 0xbd, 0x39, 0x01, 0x41, 0x04, 0xe6, 0xc2, 0x6e, 0xf6, 0x7d, 0xc6, 0x10, 0xd2, 0xcd, 0x19, 0x24, 0x84, 0x78, 0x9a, 0x6c, 0xf9, 0xae, 0xa9, 0x93, 0x0b, 0x94, 0x4b, 0x7e, 0x2d, 0xb5, 0x34, 0x2b, 0x9d, 0x9e, 0x5b, 0x9f, 0xf7, 0x9a, 0xff, 0x9a, 0x2e, 0xe1, 0x97, 0x8d, 0xd7, 0xfd, 0x01, 0xdf, 0xc5, 0x22, 0xee, 0x02, 0x28, 0x3d, 0x3b, 0x06, 0xa9, 0xd0, 0x3a, 0xcf, 0x80, 0x96, 0x96, 0x8d, 0x7d, 0xbb, 0x0f, 0x91, 0x78, 0xff, 0xff, 0xff, 0xff, 0x02, 0x8b, 0xa7, 0x94, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x19, 0x76, 0xa9, 0x14, 0xba, 0xde, 0xec, 0xfd, 0xef, 0x05, 0x07, 0x24, 0x7f, 0xc8, 0xf7, 0x42, 0x41, 0xd7, 0x3b, 0xc0, 0x39, 0x97, 0x2d, 0x7b, 0x88, 0xac, 0x40, 0x94, 0xa8, 0x02, 0x00, 0x00, 0x00, 0x00, 0x19, 0x76, 0xa9, 0x14, 0xc1, 0x09, 0x32, 0x48, 0x3f, 0xec, 0x93, 0xed, 0x51, 0xf5, 0xfe, 0x95, 0xe7, 0x25, 0x59, 0xf2, 0xcc, 0x70, 0x43, 0xf9, 0x88, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00}; + vector vch(ch, ch + sizeof(ch) -1); + CDataStream stream(vch, SER_DISK, CLIENT_VERSION); + CTransaction tx; + stream >> tx; + CValidationState state; + BOOST_CHECK_MESSAGE(CheckTransaction(tx, state) && state.IsValid(), "Simple deserialized transaction should be valid."); + + // Check that duplicate txins fail + tx.vin.push_back(tx.vin[0]); + BOOST_CHECK_MESSAGE(!CheckTransaction(tx, state) || !state.IsValid(), "Transaction with duplicate txins should be invalid."); +} + +// +// Helper: create two dummy transactions, each with +// two outputs. The first has 11 and 50 CENT outputs +// paid to a TX_PUBKEY, the second 21 and 22 CENT outputs +// paid to a TX_PUBKEYHASH. +// +static std::vector +SetupDummyInputs(CBasicKeyStore& keystoreRet, CCoinsView & coinsRet) +{ + std::vector dummyTransactions; + dummyTransactions.resize(2); + + // Add some keys to the keystore: + CKey key[4]; + for (int i = 0; i < 4; i++) + { + key[i].MakeNewKey(i % 2); + keystoreRet.AddKey(key[i]); + } + + // Create some dummy input transactions + dummyTransactions[0].vout.resize(2); + dummyTransactions[0].vout[0].nValue = 11*CENT; + dummyTransactions[0].vout[0].scriptPubKey << key[0].GetPubKey() << OP_CHECKSIG; + dummyTransactions[0].vout[1].nValue = 50*CENT; + dummyTransactions[0].vout[1].scriptPubKey << key[1].GetPubKey() << OP_CHECKSIG; + coinsRet.SetCoins(dummyTransactions[0].GetHash(), CCoins(dummyTransactions[0], 0)); + + dummyTransactions[1].vout.resize(2); + dummyTransactions[1].vout[0].nValue = 21*CENT; + dummyTransactions[1].vout[0].scriptPubKey.SetDestination(key[2].GetPubKey().GetID()); + dummyTransactions[1].vout[1].nValue = 22*CENT; + dummyTransactions[1].vout[1].scriptPubKey.SetDestination(key[3].GetPubKey().GetID()); + coinsRet.SetCoins(dummyTransactions[1].GetHash(), CCoins(dummyTransactions[1], 0)); + + return dummyTransactions; +} + +BOOST_AUTO_TEST_CASE(test_Get) +{ + CBasicKeyStore keystore; + CCoinsView coinsDummy; + CCoinsViewCache coins(coinsDummy); + std::vector dummyTransactions = SetupDummyInputs(keystore, coins); + + CTransaction t1; + t1.vin.resize(3); + t1.vin[0].prevout.hash = dummyTransactions[0].GetHash(); + t1.vin[0].prevout.n = 1; + t1.vin[0].scriptSig << std::vector(65, 0); + t1.vin[1].prevout.hash = dummyTransactions[1].GetHash(); + t1.vin[1].prevout.n = 0; + t1.vin[1].scriptSig << std::vector(65, 0) << std::vector(33, 4); + t1.vin[2].prevout.hash = dummyTransactions[1].GetHash(); + t1.vin[2].prevout.n = 1; + t1.vin[2].scriptSig << std::vector(65, 0) << std::vector(33, 4); + t1.vout.resize(2); + t1.vout[0].nValue = 90*CENT; + t1.vout[0].scriptPubKey << OP_1; + + BOOST_CHECK(AreInputsStandard(t1, coins)); + BOOST_CHECK_EQUAL(coins.GetValueIn(t1), (50+21+22)*CENT); + + // Adding extra junk to the scriptSig should make it non-standard: + t1.vin[0].scriptSig << OP_11; + BOOST_CHECK(!AreInputsStandard(t1, coins)); + + // ... as should not having enough: + t1.vin[0].scriptSig = CScript(); + BOOST_CHECK(!AreInputsStandard(t1, coins)); +} + +BOOST_AUTO_TEST_CASE(test_IsStandard) +{ + LOCK(cs_main); + CBasicKeyStore keystore; + CCoinsView coinsDummy; + CCoinsViewCache coins(coinsDummy); + std::vector dummyTransactions = SetupDummyInputs(keystore, coins); + + CTransaction t; + t.vin.resize(1); + t.vin[0].prevout.hash = dummyTransactions[0].GetHash(); + t.vin[0].prevout.n = 1; + t.vin[0].scriptSig << std::vector(65, 0); + t.vout.resize(1); + t.vout[0].nValue = 90*CENT; + CKey key; + key.MakeNewKey(true); + t.vout[0].scriptPubKey.SetDestination(key.GetPubKey().GetID()); + + string reason; + BOOST_CHECK(IsStandardTx(t, reason)); + + t.vout[0].nValue = 501; // dust + BOOST_CHECK(!IsStandardTx(t, reason)); + + 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/uint256_tests.cpp b/src/test/uint256_tests.cpp index 8f859ac..0a65da8 100644 --- a/src/test/uint256_tests.cpp +++ b/src/test/uint256_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/uint256_tests.cpp~ b/src/test/uint256_tests.cpp~ new file mode 100644 index 0000000..1de97fe --- /dev/null +++ b/src/test/uint256_tests.cpp~ @@ -0,0 +1,638 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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; + +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) +{ + 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 37496b0..ec0fbb2 100644 --- a/src/test/util_tests.cpp +++ b/src/test/util_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/util_tests.cpp~ b/src/test/util_tests.cpp~ new file mode 100644 index 0000000..2475a0c --- /dev/null +++ b/src/test/util_tests.cpp~ @@ -0,0 +1,344 @@ +// Original Code: Copyright (c) 2011-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "sync.h" + +#include +#include + +#include + +using namespace std; + +BOOST_AUTO_TEST_SUITE(util_tests) + +BOOST_AUTO_TEST_CASE(util_criticalsection) +{ + CCriticalSection cs; + + do { + LOCK(cs); + break; + + BOOST_ERROR("break was swallowed!"); + } while(0); + + do { + TRY_LOCK(cs, lockTest); + if (lockTest) + break; + + BOOST_ERROR("break was swallowed!"); + } while(0); +} + +BOOST_AUTO_TEST_CASE(util_MedianFilter) +{ + CMedianFilter filter(5, 15); + + BOOST_CHECK_EQUAL(filter.median(), 15); + + filter.input(20); // [15 20] + BOOST_CHECK_EQUAL(filter.median(), 17); + + filter.input(30); // [15 20 30] + BOOST_CHECK_EQUAL(filter.median(), 20); + + filter.input(3); // [3 15 20 30] + BOOST_CHECK_EQUAL(filter.median(), 17); + + filter.input(7); // [3 7 15 20 30] + BOOST_CHECK_EQUAL(filter.median(), 15); + + filter.input(18); // [3 7 18 20 30] + BOOST_CHECK_EQUAL(filter.median(), 18); + + filter.input(0); // [0 3 7 18 30] + BOOST_CHECK_EQUAL(filter.median(), 7); +} + +static const unsigned char ParseHex_expected[65] = { + 0x04, 0x67, 0x8a, 0xfd, 0xb0, 0xfe, 0x55, 0x48, 0x27, 0x19, 0x67, 0xf1, 0xa6, 0x71, 0x30, 0xb7, + 0x10, 0x5c, 0xd6, 0xa8, 0x28, 0xe0, 0x39, 0x09, 0xa6, 0x79, 0x62, 0xe0, 0xea, 0x1f, 0x61, 0xde, + 0xb6, 0x49, 0xf6, 0xbc, 0x3f, 0x4c, 0xef, 0x38, 0xc4, 0xf3, 0x55, 0x04, 0xe5, 0x1e, 0xc1, 0x12, + 0xde, 0x5c, 0x38, 0x4d, 0xf7, 0xba, 0x0b, 0x8d, 0x57, 0x8a, 0x4c, 0x70, 0x2b, 0x6b, 0xf1, 0x1d, + 0x5f +}; +BOOST_AUTO_TEST_CASE(util_ParseHex) +{ + std::vector result; + std::vector expected(ParseHex_expected, ParseHex_expected + sizeof(ParseHex_expected)); + // Basic test vector + result = ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f"); + BOOST_CHECK_EQUAL_COLLECTIONS(result.begin(), result.end(), expected.begin(), expected.end()); + + // Spaces between bytes must be supported + result = ParseHex("12 34 56 78"); + BOOST_CHECK(result.size() == 4 && result[0] == 0x12 && result[1] == 0x34 && result[2] == 0x56 && result[3] == 0x78); + + // Stop parsing at invalid value + result = ParseHex("1234 invalid 1234"); + BOOST_CHECK(result.size() == 2 && result[0] == 0x12 && result[1] == 0x34); +} + +BOOST_AUTO_TEST_CASE(util_HexStr) +{ + BOOST_CHECK_EQUAL( + HexStr(ParseHex_expected, ParseHex_expected + sizeof(ParseHex_expected)), + "04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f"); + + BOOST_CHECK_EQUAL( + HexStr(ParseHex_expected, ParseHex_expected + 5, true), + "04 67 8a fd b0"); + + BOOST_CHECK_EQUAL( + HexStr(ParseHex_expected, ParseHex_expected, true), + ""); + + std::vector ParseHex_vec(ParseHex_expected, ParseHex_expected + 5); + + BOOST_CHECK_EQUAL( + HexStr(ParseHex_vec, true), + "04 67 8a fd b0"); +} + + +BOOST_AUTO_TEST_CASE(util_DateTimeStrFormat) +{ + 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"); + 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) +{ + const char *argv_test[] = {"-ignored", "-a", "-b", "-ccc=argument", "-ccc=multiple", "f", "-d=e"}; + + ParseParameters(0, (char**)argv_test); + BOOST_CHECK(mapArgs.empty() && mapMultiArgs.empty()); + + ParseParameters(1, (char**)argv_test); + BOOST_CHECK(mapArgs.empty() && mapMultiArgs.empty()); + + ParseParameters(5, (char**)argv_test); + // expectation: -ignored is ignored (program name argument), + // -a, -b and -ccc end up in map, -d ignored because it is after + // a non-option argument (non-GNU option parsing) + BOOST_CHECK(mapArgs.size() == 3 && mapMultiArgs.size() == 3); + BOOST_CHECK(mapArgs.count("-a") && mapArgs.count("-b") && mapArgs.count("-ccc") + && !mapArgs.count("f") && !mapArgs.count("-d")); + BOOST_CHECK(mapMultiArgs.count("-a") && mapMultiArgs.count("-b") && mapMultiArgs.count("-ccc") + && !mapMultiArgs.count("f") && !mapMultiArgs.count("-d")); + + BOOST_CHECK(mapArgs["-a"] == "" && mapArgs["-ccc"] == "multiple"); + BOOST_CHECK(mapMultiArgs["-ccc"].size() == 2); +} + +BOOST_AUTO_TEST_CASE(util_GetArg) +{ + mapArgs.clear(); + mapArgs["strtest1"] = "string..."; + // strtest2 undefined on purpose + mapArgs["inttest1"] = "12345"; + mapArgs["inttest2"] = "81985529216486895"; + // inttest3 undefined on purpose + mapArgs["booltest1"] = ""; + // booltest2 undefined on purpose + mapArgs["booltest3"] = "0"; + mapArgs["booltest4"] = "1"; + + BOOST_CHECK_EQUAL(GetArg("strtest1", "default"), "string..."); + BOOST_CHECK_EQUAL(GetArg("strtest2", "default"), "default"); + BOOST_CHECK_EQUAL(GetArg("inttest1", -1), 12345); + BOOST_CHECK_EQUAL(GetArg("inttest2", -1), 81985529216486895LL); + BOOST_CHECK_EQUAL(GetArg("inttest3", -1), -1); + BOOST_CHECK_EQUAL(GetBoolArg("booltest1", false), true); + BOOST_CHECK_EQUAL(GetBoolArg("booltest2", false), false); + BOOST_CHECK_EQUAL(GetBoolArg("booltest3", false), false); + BOOST_CHECK_EQUAL(GetBoolArg("booltest4", false), true); +} + +BOOST_AUTO_TEST_CASE(util_WildcardMatch) +{ + BOOST_CHECK(WildcardMatch("127.0.0.1", "*")); + BOOST_CHECK(WildcardMatch("127.0.0.1", "127.*")); + BOOST_CHECK(WildcardMatch("abcdef", "a?cde?")); + BOOST_CHECK(!WildcardMatch("abcdef", "a?cde??")); + BOOST_CHECK(WildcardMatch("abcdef", "a*f")); + BOOST_CHECK(!WildcardMatch("abcdef", "a*x")); + BOOST_CHECK(WildcardMatch("", "*")); +} + +BOOST_AUTO_TEST_CASE(util_FormatMoney) +{ + BOOST_CHECK_EQUAL(FormatMoney(0, false), "0.00"); + BOOST_CHECK_EQUAL(FormatMoney((COIN/10000)*123456789, false), "12345.6789"); + BOOST_CHECK_EQUAL(FormatMoney(COIN, true), "+1.00"); + BOOST_CHECK_EQUAL(FormatMoney(-COIN, false), "-1.00"); + BOOST_CHECK_EQUAL(FormatMoney(-COIN, true), "-1.00"); + + BOOST_CHECK_EQUAL(FormatMoney(COIN*100000000, false), "100000000.00"); + BOOST_CHECK_EQUAL(FormatMoney(COIN*10000000, false), "10000000.00"); + BOOST_CHECK_EQUAL(FormatMoney(COIN*1000000, false), "1000000.00"); + BOOST_CHECK_EQUAL(FormatMoney(COIN*100000, false), "100000.00"); + BOOST_CHECK_EQUAL(FormatMoney(COIN*10000, false), "10000.00"); + BOOST_CHECK_EQUAL(FormatMoney(COIN*1000, false), "1000.00"); + BOOST_CHECK_EQUAL(FormatMoney(COIN*100, false), "100.00"); + BOOST_CHECK_EQUAL(FormatMoney(COIN*10, false), "10.00"); + BOOST_CHECK_EQUAL(FormatMoney(COIN, false), "1.00"); + BOOST_CHECK_EQUAL(FormatMoney(COIN/10, false), "0.10"); + BOOST_CHECK_EQUAL(FormatMoney(COIN/100, false), "0.01"); + BOOST_CHECK_EQUAL(FormatMoney(COIN/1000, false), "0.001"); + BOOST_CHECK_EQUAL(FormatMoney(COIN/10000, false), "0.0001"); + BOOST_CHECK_EQUAL(FormatMoney(COIN/100000, false), "0.00001"); + BOOST_CHECK_EQUAL(FormatMoney(COIN/1000000, false), "0.000001"); + BOOST_CHECK_EQUAL(FormatMoney(COIN/10000000, false), "0.0000001"); + BOOST_CHECK_EQUAL(FormatMoney(COIN/100000000, false), "0.00000001"); +} + +BOOST_AUTO_TEST_CASE(util_ParseMoney) +{ + int64_t ret = 0; + BOOST_CHECK(ParseMoney("0.0", ret)); + BOOST_CHECK_EQUAL(ret, 0); + + BOOST_CHECK(ParseMoney("12345.6789", ret)); + BOOST_CHECK_EQUAL(ret, (COIN/10000)*123456789); + + BOOST_CHECK(ParseMoney("100000000.00", ret)); + BOOST_CHECK_EQUAL(ret, COIN*100000000); + BOOST_CHECK(ParseMoney("10000000.00", ret)); + BOOST_CHECK_EQUAL(ret, COIN*10000000); + BOOST_CHECK(ParseMoney("1000000.00", ret)); + BOOST_CHECK_EQUAL(ret, COIN*1000000); + BOOST_CHECK(ParseMoney("100000.00", ret)); + BOOST_CHECK_EQUAL(ret, COIN*100000); + BOOST_CHECK(ParseMoney("10000.00", ret)); + BOOST_CHECK_EQUAL(ret, COIN*10000); + BOOST_CHECK(ParseMoney("1000.00", ret)); + BOOST_CHECK_EQUAL(ret, COIN*1000); + BOOST_CHECK(ParseMoney("100.00", ret)); + BOOST_CHECK_EQUAL(ret, COIN*100); + BOOST_CHECK(ParseMoney("10.00", ret)); + BOOST_CHECK_EQUAL(ret, COIN*10); + BOOST_CHECK(ParseMoney("1.00", ret)); + BOOST_CHECK_EQUAL(ret, COIN); + BOOST_CHECK(ParseMoney("0.1", ret)); + BOOST_CHECK_EQUAL(ret, COIN/10); + BOOST_CHECK(ParseMoney("0.01", ret)); + BOOST_CHECK_EQUAL(ret, COIN/100); + BOOST_CHECK(ParseMoney("0.001", ret)); + BOOST_CHECK_EQUAL(ret, COIN/1000); + BOOST_CHECK(ParseMoney("0.0001", ret)); + BOOST_CHECK_EQUAL(ret, COIN/10000); + BOOST_CHECK(ParseMoney("0.00001", ret)); + BOOST_CHECK_EQUAL(ret, COIN/100000); + BOOST_CHECK(ParseMoney("0.000001", ret)); + BOOST_CHECK_EQUAL(ret, COIN/1000000); + BOOST_CHECK(ParseMoney("0.0000001", ret)); + BOOST_CHECK_EQUAL(ret, COIN/10000000); + BOOST_CHECK(ParseMoney("0.00000001", ret)); + BOOST_CHECK_EQUAL(ret, COIN/100000000); + + // Attempted 63 bit overflow should fail + BOOST_CHECK(!ParseMoney("92233720368.54775808", ret)); +} + +BOOST_AUTO_TEST_CASE(util_IsHex) +{ + BOOST_CHECK(IsHex("00")); + BOOST_CHECK(IsHex("00112233445566778899aabbccddeeffAABBCCDDEEFF")); + BOOST_CHECK(IsHex("ff")); + BOOST_CHECK(IsHex("FF")); + + BOOST_CHECK(!IsHex("")); + BOOST_CHECK(!IsHex("0")); + BOOST_CHECK(!IsHex("a")); + BOOST_CHECK(!IsHex("eleven")); + BOOST_CHECK(!IsHex("00xx00")); + BOOST_CHECK(!IsHex("0x0000")); +} + +BOOST_AUTO_TEST_CASE(util_seed_insecure_rand) +{ + int i; + int count=0; + + seed_insecure_rand(true); + + for (int mod=2;mod<11;mod++) + { + int mask = 1; + // Really rough binomal confidence approximation. + int err = 30*10000./mod*sqrt((1./mod*(1-1./mod))/10000.); + //mask is 2^ceil(log2(mod))-1 + while(mask=(uint32_t)mod); + count += rval==0; + } + BOOST_CHECK(count<=10000/mod+err); + BOOST_CHECK(count>=10000/mod-err); + } +} + +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 a4844c0..0ad27b8 100644 --- a/src/test/wallet_tests.cpp +++ b/src/test/wallet_tests.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/wallet_tests.cpp~ b/src/test/wallet_tests.cpp~ new file mode 100644 index 0000000..6218e7d --- /dev/null +++ b/src/test/wallet_tests.cpp~ @@ -0,0 +1,307 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 +#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 + +// some tests fail 1% of the time due to bad luck. +// we repeat those tests this many times and only complain if all iterations of the test fail +#define RANDOM_REPEATS 5 + +using namespace std; + +typedef set > CoinSet; + +BOOST_AUTO_TEST_SUITE(wallet_tests) + +static CWallet wallet; +static vector vCoins; + +static void add_coin(int64_t nValue, int nAge = 6*24, bool fIsFromMe = false, int nInput=0) +{ + static int nextLockTime = 0; + CTransaction tx; + tx.nLockTime = nextLockTime++; // so all transactions get different hashes + tx.vout.resize(nInput+1); + tx.vout[nInput].nValue = nValue; + CWalletTx* wtx = new CWalletTx(&wallet, tx); + if (fIsFromMe) + { + // IsFromMe() returns (GetDebit() > 0), and GetDebit() is 0 if vin.empty(), + // so stop vin being empty, and cache a non-zero Debit to fake out IsFromMe() + wtx->vin.resize(1); + wtx->fDebitCached = true; + wtx->nDebitCached = 1; + } + COutput output(wtx, nInput, nAge); + vCoins.push_back(output); +} + +static void empty_wallet(void) +{ + BOOST_FOREACH(COutput output, vCoins) + delete output.tx; + vCoins.clear(); +} + +static bool equal_sets(CoinSet a, CoinSet b) +{ + pair ret = mismatch(a.begin(), a.end(), b.begin()); + return ret.first == a.end() && ret.second == b.end(); +} + +BOOST_AUTO_TEST_CASE(coin_selection_tests) +{ + CoinSet setCoinsRet, setCoinsRet2; + 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++) + { + empty_wallet(); + + // with an empty wallet we can't even pay one cent + BOOST_CHECK(!wallet.SelectCoinsMinConf( 1 * CENT, 1, 6, vCoins, setCoinsRet, nValueRet)); + + add_coin(1*CENT, 4); // add a new 1 cent coin + + // with a new 1 cent coin, we still can't find a mature 1 cent + BOOST_CHECK(!wallet.SelectCoinsMinConf( 1 * CENT, 1, 6, vCoins, setCoinsRet, nValueRet)); + + // but we can find a new 1 cent + BOOST_CHECK( wallet.SelectCoinsMinConf( 1 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 1 * CENT); + + add_coin(2*CENT); // add a mature 2 cent coin + + // we can't make 3 cents of mature coins + BOOST_CHECK(!wallet.SelectCoinsMinConf( 3 * CENT, 1, 6, vCoins, setCoinsRet, nValueRet)); + + // we can make 3 cents of new coins + BOOST_CHECK( wallet.SelectCoinsMinConf( 3 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 3 * CENT); + + add_coin(5*CENT); // add a mature 5 cent coin, + add_coin(10*CENT, 3, true); // a new 10 cent coin sent from one of our own addresses + add_coin(20*CENT); // and a mature 20 cent coin + + // now we have new: 1+10=11 (of which 10 was self-sent), and mature: 2+5+20=27. total = 38 + + // we can't make 38 cents only if we disallow new coins: + BOOST_CHECK(!wallet.SelectCoinsMinConf(38 * CENT, 1, 6, vCoins, setCoinsRet, nValueRet)); + // we can't even make 37 cents if we don't allow new coins even if they're from us + BOOST_CHECK(!wallet.SelectCoinsMinConf(38 * CENT, 6, 6, vCoins, setCoinsRet, nValueRet)); + // but we can make 37 cents if we accept new coins from ourself + BOOST_CHECK( wallet.SelectCoinsMinConf(37 * CENT, 1, 6, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 37 * CENT); + // and we can make 38 cents if we accept all new coins + BOOST_CHECK( wallet.SelectCoinsMinConf(38 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 38 * CENT); + + // try making 34 cents from 1,2,5,10,20 - we can't do it exactly + BOOST_CHECK( wallet.SelectCoinsMinConf(34 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_GT(nValueRet, 34 * CENT); // but should get more than 34 cents + BOOST_CHECK_EQUAL(setCoinsRet.size(), 3U); // the best should be 20+10+5. it's incredibly unlikely the 1 or 2 got included (but possible) + + // when we try making 7 cents, the smaller coins (1,2,5) are enough. We should see just 2+5 + BOOST_CHECK( wallet.SelectCoinsMinConf( 7 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 7 * CENT); + BOOST_CHECK_EQUAL(setCoinsRet.size(), 2U); + + // when we try making 8 cents, the smaller coins (1,2,5) are exactly enough. + BOOST_CHECK( wallet.SelectCoinsMinConf( 8 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK(nValueRet == 8 * CENT); + BOOST_CHECK_EQUAL(setCoinsRet.size(), 3U); + + // when we try making 9 cents, no subset of smaller coins is enough, and we get the next bigger coin (10) + BOOST_CHECK( wallet.SelectCoinsMinConf( 9 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 10 * CENT); + BOOST_CHECK_EQUAL(setCoinsRet.size(), 1U); + + // now clear out the wallet and start again to test choosing between subsets of smaller coins and the next biggest coin + empty_wallet(); + + add_coin( 6*CENT); + add_coin( 7*CENT); + add_coin( 8*CENT); + add_coin(20*CENT); + add_coin(30*CENT); // now we have 6+7+8+20+30 = 71 cents total + + // check that we have 71 and not 72 + BOOST_CHECK( wallet.SelectCoinsMinConf(71 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK(!wallet.SelectCoinsMinConf(72 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + + // now try making 16 cents. the best smaller coins can do is 6+7+8 = 21; not as good at the next biggest coin, 20 + BOOST_CHECK( wallet.SelectCoinsMinConf(16 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 20 * CENT); // we should get 20 in one coin + BOOST_CHECK_EQUAL(setCoinsRet.size(), 1U); + + add_coin( 5*CENT); // now we have 5+6+7+8+20+30 = 75 cents total + + // now if we try making 16 cents again, the smaller coins can make 5+6+7 = 18 cents, better than the next biggest coin, 20 + BOOST_CHECK( wallet.SelectCoinsMinConf(16 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 18 * CENT); // we should get 18 in 3 coins + BOOST_CHECK_EQUAL(setCoinsRet.size(), 3U); + + add_coin( 18*CENT); // now we have 5+6+7+8+18+20+30 + + // and now if we try making 16 cents again, the smaller coins can make 5+6+7 = 18 cents, the same as the next biggest coin, 18 + BOOST_CHECK( wallet.SelectCoinsMinConf(16 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 18 * CENT); // we should get 18 in 1 coin + BOOST_CHECK_EQUAL(setCoinsRet.size(), 1U); // because in the event of a tie, the biggest coin wins + + // now try making 11 cents. we should get 5+6 + BOOST_CHECK( wallet.SelectCoinsMinConf(11 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 11 * CENT); + BOOST_CHECK_EQUAL(setCoinsRet.size(), 2U); + + // check that the smallest bigger coin is used + add_coin( 1*COIN); + add_coin( 2*COIN); + add_coin( 3*COIN); + add_coin( 4*COIN); // now we have 5+6+7+8+18+20+30+100+200+300+400 = 1094 cents + BOOST_CHECK( wallet.SelectCoinsMinConf(95 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 1 * COIN); // we should get 1 BTM in 1 coin + BOOST_CHECK_EQUAL(setCoinsRet.size(), 1U); + + BOOST_CHECK( wallet.SelectCoinsMinConf(195 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 2 * COIN); // we should get 2 BTM in 1 coin + BOOST_CHECK_EQUAL(setCoinsRet.size(), 1U); + + // empty the wallet and start again, now with fractions of a cent, to test sub-cent change avoidance + empty_wallet(); + add_coin(0.1*CENT); + add_coin(0.2*CENT); + add_coin(0.3*CENT); + add_coin(0.4*CENT); + add_coin(0.5*CENT); + + // try making 1 cent from 0.1 + 0.2 + 0.3 + 0.4 + 0.5 = 1.5 cents + // we'll get sub-cent change whatever happens, so can expect 1.0 exactly + BOOST_CHECK( wallet.SelectCoinsMinConf(1 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 1 * CENT); + + // but if we add a bigger coin, making it possible to avoid sub-cent change, things change: + add_coin(1111*CENT); + + // try making 1 cent from 0.1 + 0.2 + 0.3 + 0.4 + 0.5 + 1111 = 1112.5 cents + BOOST_CHECK( wallet.SelectCoinsMinConf(1 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 1 * CENT); // we should get the exact amount + + // if we add more sub-cent coins: + add_coin(0.6*CENT); + add_coin(0.7*CENT); + + // and try again to make 1.0 cents, we can still make 1.0 cents + BOOST_CHECK( wallet.SelectCoinsMinConf(1 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 1 * CENT); // we should get the exact amount + + // run the 'mtgox' test (see http://blockexplorer.com/tx/29a3efd3ef04f9153d47a990bd7b048a4b2d213daaa5fb8ed670fb85f13bdbcf) + // they tried to consolidate 10 50k coins into one 500k coin, and ended up with 50k in change + empty_wallet(); + for (int i = 0; i < 20; i++) + add_coin(50000 * COIN); + + BOOST_CHECK( wallet.SelectCoinsMinConf(500000 * COIN, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 500000 * COIN); // we should get the exact amount + BOOST_CHECK_EQUAL(setCoinsRet.size(), 10U); // in ten coins + + // if there's not enough in the smaller coins to make at least 1 cent change (0.5+0.6+0.7 < 1.0+1.0), + // we need to try finding an exact subset anyway + + // sometimes it will fail, and so we use the next biggest coin: + empty_wallet(); + add_coin(0.5 * CENT); + add_coin(0.6 * CENT); + add_coin(0.7 * CENT); + add_coin(1111 * CENT); + BOOST_CHECK( wallet.SelectCoinsMinConf(1 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 1111 * CENT); // we get the bigger coin + BOOST_CHECK_EQUAL(setCoinsRet.size(), 1U); + + // but sometimes it's possible, and we use an exact subset (0.4 + 0.6 = 1.0) + empty_wallet(); + add_coin(0.4 * CENT); + add_coin(0.6 * CENT); + add_coin(0.8 * CENT); + add_coin(1111 * CENT); + BOOST_CHECK( wallet.SelectCoinsMinConf(1 * CENT, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 1 * CENT); // we should get the exact amount + BOOST_CHECK_EQUAL(setCoinsRet.size(), 2U); // in two coins 0.4+0.6 + + // test avoiding sub-cent change + empty_wallet(); + add_coin(0.0005 * COIN); + add_coin(0.01 * COIN); + add_coin(1 * COIN); + + // trying to make 1.0001 from these three coins + BOOST_CHECK( wallet.SelectCoinsMinConf(1.0001 * COIN, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 1.0105 * COIN); // we should get all coins + BOOST_CHECK_EQUAL(setCoinsRet.size(), 3U); + + // but if we try to make 0.999, we should take the bigger of the two small coins to avoid sub-cent change + BOOST_CHECK( wallet.SelectCoinsMinConf(0.999 * COIN, 1, 1, vCoins, setCoinsRet, nValueRet)); + BOOST_CHECK_EQUAL(nValueRet, 1.01 * COIN); // we should get 1 + 0.01 + BOOST_CHECK_EQUAL(setCoinsRet.size(), 2U); + + // test randomness + { + empty_wallet(); + for (int i2 = 0; i2 < 100; i2++) + add_coin(COIN); + + // picking 50 from 100 coins doesn't depend on the shuffle, + // but does depend on randomness in the stochastic approximation code + BOOST_CHECK(wallet.SelectCoinsMinConf(50 * COIN, 1, 6, vCoins, setCoinsRet , nValueRet)); + BOOST_CHECK(wallet.SelectCoinsMinConf(50 * COIN, 1, 6, vCoins, setCoinsRet2, nValueRet)); + BOOST_CHECK(!equal_sets(setCoinsRet, setCoinsRet2)); + + int fails = 0; + for (int i = 0; i < RANDOM_REPEATS; i++) + { + // selecting 1 from 100 identical coins depends on the shuffle; this test will fail 1% of the time + // run the test RANDOM_REPEATS times and only complain if all of them fail + BOOST_CHECK(wallet.SelectCoinsMinConf(COIN, 1, 6, vCoins, setCoinsRet , nValueRet)); + BOOST_CHECK(wallet.SelectCoinsMinConf(COIN, 1, 6, vCoins, setCoinsRet2, nValueRet)); + if (equal_sets(setCoinsRet, setCoinsRet2)) + fails++; + } + BOOST_CHECK_NE(fails, RANDOM_REPEATS); + + // add 75 cents in small change. not enough to make 90 cents, + // then try making 90 cents. there are multiple competing "smallest bigger" coins, + // one of which should be picked at random + add_coin( 5*CENT); add_coin(10*CENT); add_coin(15*CENT); add_coin(20*CENT); add_coin(25*CENT); + + fails = 0; + for (int i = 0; i < RANDOM_REPEATS; i++) + { + // selecting 1 from 100 identical coins depends on the shuffle; this test will fail 1% of the time + // run the test RANDOM_REPEATS times and only complain if all of them fail + BOOST_CHECK(wallet.SelectCoinsMinConf(90*CENT, 1, 6, vCoins, setCoinsRet , nValueRet)); + BOOST_CHECK(wallet.SelectCoinsMinConf(90*CENT, 1, 6, vCoins, setCoinsRet2, nValueRet)); + if (equal_sets(setCoinsRet, setCoinsRet2)) + fails++; + } + BOOST_CHECK_NE(fails, RANDOM_REPEATS); + } + } + empty_wallet(); +} + +BOOST_AUTO_TEST_SUITE_END() diff --git a/src/threadsafety.h b/src/threadsafety.h index 7ae62ae..26f2bc6 100644 --- a/src/threadsafety.h +++ b/src/threadsafety.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/threadsafety.h~ b/src/threadsafety.h~ new file mode 100644 index 0000000..dc8d95a --- /dev/null +++ b/src/threadsafety.h~ @@ -0,0 +1,55 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_THREADSAFETY_H +#define BITMARK_THREADSAFETY_H + +#ifdef __clang__ +// TL;DR Add GUARDED_BY(mutex) to member variables. The others are +// rarely necessary. Ex: int nFoo GUARDED_BY(cs_foo); +// +// See http://clang.llvm.org/docs/LanguageExtensions.html#threadsafety +// for documentation. The clang compiler can do advanced static analysis +// of locking when given the -Wthread-safety option. +#define LOCKABLE __attribute__ ((lockable)) +#define SCOPED_LOCKABLE __attribute__ ((scoped_lockable)) +#define GUARDED_BY(x) __attribute__ ((guarded_by(x))) +#define GUARDED_VAR __attribute__ ((guarded_var)) +#define PT_GUARDED_BY(x) __attribute__ ((pt_guarded_by(x))) +#define PT_GUARDED_VAR __attribute__ ((pt_guarded_var)) +#define ACQUIRED_AFTER(...) __attribute__ ((acquired_after(__VA_ARGS__))) +#define ACQUIRED_BEFORE(...) __attribute__ ((acquired_before(__VA_ARGS__))) +#define EXCLUSIVE_LOCK_FUNCTION(...) __attribute__ ((exclusive_lock_function(__VA_ARGS__))) +#define SHARED_LOCK_FUNCTION(...) __attribute__ ((shared_lock_function(__VA_ARGS__))) +#define EXCLUSIVE_TRYLOCK_FUNCTION(...) __attribute__ ((exclusive_trylock_function(__VA_ARGS__))) +#define SHARED_TRYLOCK_FUNCTION(...) __attribute__ ((shared_trylock_function(__VA_ARGS__))) +#define UNLOCK_FUNCTION(...) __attribute__ ((unlock_function(__VA_ARGS__))) +#define LOCK_RETURNED(x) __attribute__ ((lock_returned(x))) +#define LOCKS_EXCLUDED(...) __attribute__ ((locks_excluded(__VA_ARGS__))) +#define EXCLUSIVE_LOCKS_REQUIRED(...) __attribute__ ((exclusive_locks_required(__VA_ARGS__))) +#define SHARED_LOCKS_REQUIRED(...) __attribute__ ((shared_locks_required(__VA_ARGS__))) +#define NO_THREAD_SAFETY_ANALYSIS __attribute__ ((no_thread_safety_analysis)) +#else +#define LOCKABLE +#define SCOPED_LOCKABLE +#define GUARDED_BY(x) +#define GUARDED_VAR +#define PT_GUARDED_BY(x) +#define PT_GUARDED_VAR +#define ACQUIRED_AFTER(...) +#define ACQUIRED_BEFORE(...) +#define EXCLUSIVE_LOCK_FUNCTION(...) +#define SHARED_LOCK_FUNCTION(...) +#define EXCLUSIVE_TRYLOCK_FUNCTION(...) +#define SHARED_TRYLOCK_FUNCTION(...) +#define UNLOCK_FUNCTION(...) +#define LOCK_RETURNED(x) +#define LOCKS_EXCLUDED(...) +#define EXCLUSIVE_LOCKS_REQUIRED(...) +#define SHARED_LOCKS_REQUIRED(...) +#define NO_THREAD_SAFETY_ANALYSIS +#endif // __GNUC__ +#endif // BITMARK_THREADSAFETY_H diff --git a/src/txdb.cpp b/src/txdb.cpp index e45954c..d9dbd5f 100644 --- a/src/txdb.cpp +++ b/src/txdb.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/txdb.cpp~ b/src/txdb.cpp~ new file mode 100644 index 0000000..a57da49 --- /dev/null +++ b/src/txdb.cpp~ @@ -0,0 +1,236 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "core.h" +#include "uint256.h" + +#include + +using namespace std; + +void static BatchWriteCoins(CLevelDBBatch &batch, const uint256 &hash, const CCoins &coins) { + if (coins.IsPruned()) + batch.Erase(make_pair('c', hash)); + else + batch.Write(make_pair('c', hash), coins); +} + +void static BatchWriteHashBestChain(CLevelDBBatch &batch, const uint256 &hash) { + batch.Write('B', 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::SetCoins(const uint256 &txid, const CCoins &coins) { + CLevelDBBatch batch; + BatchWriteCoins(batch, txid, coins); + return db.WriteBatch(batch); +} + +bool CCoinsViewDB::HaveCoins(const uint256 &txid) { + return db.Exists(make_pair('c', txid)); +} + +uint256 CCoinsViewDB::GetBestBlock() { + uint256 hashBestChain; + if (!db.Read('B', hashBestChain)) + return uint256(0); + return hashBestChain; +} + +bool CCoinsViewDB::SetBestBlock(const uint256 &hashBlock) { + CLevelDBBatch batch; + BatchWriteHashBestChain(batch, hashBlock); + return db.WriteBatch(batch); +} + +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 (hashBlock != uint256(0)) + BatchWriteHashBestChain(batch, hashBlock); + + return db.WriteBatch(batch); +} + +CBlockTreeDB::CBlockTreeDB(size_t nCacheSize, bool fMemory, bool fWipe) : CLevelDBWrapper(GetDataDir() / "blocks" / "index", nCacheSize, fMemory, fWipe) { +} + +bool CBlockTreeDB::WriteBlockIndex(const CDiskBlockIndex& blockindex) +{ + return Write(make_pair('b', blockindex.GetBlockHash()), blockindex); +} + +bool CBlockTreeDB::WriteBestInvalidWork(const CBigNum& bnBestInvalidWork) +{ + // Obsolete; only written for backward compatibility. + return Write('I', bnBestInvalidWork); +} + +bool CBlockTreeDB::WriteBlockFileInfo(int nFile, const CBlockFileInfo &info) { + return Write(make_pair('f', nFile), info); +} + +bool CBlockTreeDB::ReadBlockFileInfo(int nFile, CBlockFileInfo &info) { + return Read(make_pair('f', nFile), info); +} + +bool CBlockTreeDB::WriteLastBlockFile(int nFile) { + return Write('l', nFile); +} + +bool CBlockTreeDB::WriteReindexing(bool fReindexing) { + if (fReindexing) + return Write('R', '1'); + else + return Erase('R'); +} + +bool CBlockTreeDB::ReadReindexing(bool &fReindexing) { + fReindexing = Exists('R'); + return true; +} + +bool CBlockTreeDB::ReadLastBlockFile(int &nFile) { + return Read('l', nFile); +} + +bool CCoinsViewDB::GetStats(CCoinsStats &stats) { + leveldb::Iterator *pcursor = db.NewIterator(); + pcursor->SeekToFirst(); + + CHashWriter ss(SER_GETHASH, PROTOCOL_VERSION); + stats.hashBlock = GetBestBlock(); + ss << stats.hashBlock; + int64_t nTotalAmount = 0; + while (pcursor->Valid()) { + boost::this_thread::interruption_point(); + try { + leveldb::Slice slKey = pcursor->key(); + CDataStream ssKey(slKey.data(), slKey.data()+slKey.size(), SER_DISK, CLIENT_VERSION); + char chType; + ssKey >> chType; + if (chType == 'c') { + leveldb::Slice slValue = pcursor->value(); + CDataStream ssValue(slValue.data(), slValue.data()+slValue.size(), SER_DISK, CLIENT_VERSION); + CCoins coins; + ssValue >> coins; + uint256 txhash; + ssKey >> txhash; + ss << txhash; + ss << VARINT(coins.nVersion); + 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 or I/O error - %s", __func__, e.what()); + } + } + delete pcursor; + stats.nHeight = mapBlockIndex.find(GetBestBlock())->second->nHeight; + stats.hashSerialized = ss.GetHash(); + stats.nTotalAmount = nTotalAmount; + return true; +} + +bool CBlockTreeDB::ReadTxIndex(const uint256 &txid, CDiskTxPos &pos) { + return Read(make_pair('t', txid), pos); +} + +bool CBlockTreeDB::WriteTxIndex(const std::vector >&vect) { + CLevelDBBatch batch; + for (std::vector >::const_iterator it=vect.begin(); it!=vect.end(); it++) + batch.Write(make_pair('t', it->first), it->second); + return WriteBatch(batch); +} + +bool CBlockTreeDB::WriteFlag(const std::string &name, bool fValue) { + return Write(std::make_pair('F', name), fValue ? '1' : '0'); +} + +bool CBlockTreeDB::ReadFlag(const std::string &name, bool &fValue) { + char ch; + if (!Read(std::make_pair('F', name), ch)) + return false; + fValue = ch == '1'; + return true; +} + +bool CBlockTreeDB::LoadBlockIndexGuts() +{ + leveldb::Iterator *pcursor = NewIterator(); + + CDataStream ssKeySet(SER_DISK, CLIENT_VERSION); + ssKeySet << make_pair('b', uint256(0)); + pcursor->Seek(ssKeySet.str()); + + // Load mapBlockIndex + while (pcursor->Valid()) { + boost::this_thread::interruption_point(); + try { + leveldb::Slice slKey = pcursor->key(); + CDataStream ssKey(slKey.data(), slKey.data()+slKey.size(), SER_DISK, CLIENT_VERSION); + char chType; + ssKey >> chType; + if (chType == 'b') { + leveldb::Slice slValue = pcursor->value(); + CDataStream ssValue(slValue.data(), slValue.data()+slValue.size(), SER_DISK, CLIENT_VERSION); + CDiskBlockIndex diskindex; + ssValue >> diskindex; + + // Construct block index object + CBlockIndex* pindexNew = InsertBlockIndex(diskindex.GetBlockHash()); + pindexNew->pprev = InsertBlockIndex(diskindex.hashPrev); + pindexNew->nHeight = diskindex.nHeight; + pindexNew->nFile = diskindex.nFile; + pindexNew->nDataPos = diskindex.nDataPos; + pindexNew->nUndoPos = diskindex.nUndoPos; + pindexNew->nVersion = diskindex.nVersion; + pindexNew->hashMerkleRoot = diskindex.hashMerkleRoot; + pindexNew->nTime = diskindex.nTime; + pindexNew->nBits = diskindex.nBits; + pindexNew->nNonce = diskindex.nNonce; + pindexNew->nStatus = diskindex.nStatus; + pindexNew->nTx = diskindex.nTx; + + if (!pindexNew->CheckIndex()) + 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 or I/O error - %s", __func__, e.what()); + } + } + delete pcursor; + + return true; +} diff --git a/src/txdb.h b/src/txdb.h index 4a3b1e4..e5262f6 100644 --- a/src/txdb.h +++ b/src/txdb.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/txdb.h~ b/src/txdb.h~ new file mode 100644 index 0000000..5c72b77 --- /dev/null +++ b/src/txdb.h~ @@ -0,0 +1,70 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_TXDB_LEVELDB_H +#define BITMARK_TXDB_LEVELDB_H + +#include "leveldbwrapper.h" +#include "main.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: + 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); + 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 CLevelDBWrapper +{ +public: + CBlockTreeDB(size_t nCacheSize, bool fMemory = false, bool fWipe = false); +private: + CBlockTreeDB(const CBlockTreeDB&); + void operator=(const CBlockTreeDB&); +public: + bool WriteBlockIndex(const CDiskBlockIndex& blockindex); + bool WriteBestInvalidWork(const CBigNum& bnBestInvalidWork); + bool ReadBlockFileInfo(int nFile, CBlockFileInfo &fileinfo); + bool WriteBlockFileInfo(int nFile, const CBlockFileInfo &fileinfo); + bool ReadLastBlockFile(int &nFile); + bool WriteLastBlockFile(int nFile); + bool WriteReindexing(bool fReindex); + bool ReadReindexing(bool &fReindex); + bool ReadTxIndex(const uint256 &txid, CDiskTxPos &pos); + bool WriteTxIndex(const std::vector > &list); + bool WriteFlag(const std::string &name, bool fValue); + bool ReadFlag(const std::string &name, bool &fValue); + bool LoadBlockIndexGuts(); +}; + +#endif // BITMARK_TXDB_LEVELDB_H diff --git a/src/txmempool.cpp b/src/txmempool.cpp index 946326c..b38f6ec 100644 --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/txmempool.cpp~ b/src/txmempool.cpp~ new file mode 100644 index 0000000..3a2dd5f --- /dev/null +++ b/src/txmempool.cpp~ @@ -0,0 +1,215 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 index f331fc0..e6e4956 100644 --- a/src/txmempool.h +++ b/src/txmempool.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef BITMARK_TXMEMPOOL_H diff --git a/src/txmempool.h~ b/src/txmempool.h~ new file mode 100644 index 0000000..86c9224 --- /dev/null +++ b/src/txmempool.h~ @@ -0,0 +1,114 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. +#ifndef BITMARK_TXMEMPOOL_H +#define BITMARK_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 /* BITMARK_TXMEMPOOL_H */ diff --git a/src/ui_interface.h b/src/ui_interface.h index 8ca1ada..23dc995 100644 --- a/src/ui_interface.h +++ b/src/ui_interface.h @@ -1,6 +1,6 @@ // Copyright (c) 2010 Satoshi Nakamoto // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/ui_interface.h~ b/src/ui_interface.h~ new file mode 100644 index 0000000..40097aa --- /dev/null +++ b/src/ui_interface.h~ @@ -0,0 +1,112 @@ +// Copyright (c) 2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_UI_INTERFACE_H +#define BITMARK_UI_INTERFACE_H + +#include +#include + +#include +#include + +class CBasicKeyStore; +class CWallet; +class uint256; + +/** General change type (added, updated, removed). */ +enum ChangeType +{ + CT_NEW, + CT_UPDATED, + CT_DELETED +}; + +/** Signals for UI communication. */ +class CClientUIInterface +{ +public: + /** Flags for CClientUIInterface::ThreadSafeMessageBox */ + enum MessageBoxFlags + { + ICON_INFORMATION = 0, + ICON_WARNING = (1U << 0), + ICON_ERROR = (1U << 1), + /** + * Mask of all available icons in CClientUIInterface::MessageBoxFlags + * This needs to be updated, when icons are changed there! + */ + ICON_MASK = (ICON_INFORMATION | ICON_WARNING | ICON_ERROR), + + /** These values are taken from qmessagebox.h "enum StandardButton" to be directly usable */ + BTN_OK = 0x00000400U, // QMessageBox::Ok + BTN_YES = 0x00004000U, // QMessageBox::Yes + BTN_NO = 0x00010000U, // QMessageBox::No + BTN_ABORT = 0x00040000U, // QMessageBox::Abort + BTN_RETRY = 0x00080000U, // QMessageBox::Retry + BTN_IGNORE = 0x00100000U, // QMessageBox::Ignore + BTN_CLOSE = 0x00200000U, // QMessageBox::Close + BTN_CANCEL = 0x00400000U, // QMessageBox::Cancel + BTN_DISCARD = 0x00800000U, // QMessageBox::Discard + BTN_HELP = 0x01000000U, // QMessageBox::Help + BTN_APPLY = 0x02000000U, // QMessageBox::Apply + BTN_RESET = 0x04000000U, // QMessageBox::Reset + /** + * Mask of all available buttons in CClientUIInterface::MessageBoxFlags + * This needs to be updated, when buttons are changed there! + */ + BTN_MASK = (BTN_OK | BTN_YES | BTN_NO | BTN_ABORT | BTN_RETRY | BTN_IGNORE | + BTN_CLOSE | BTN_CANCEL | BTN_DISCARD | BTN_HELP | BTN_APPLY | BTN_RESET), + + /** 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, + MSG_WARNING = (ICON_WARNING | BTN_OK | MODAL), + MSG_ERROR = (ICON_ERROR | BTN_OK | MODAL) + }; + + /** Show message box. */ + boost::signals2::signal > ThreadSafeMessageBox; + + /** Progress message during initialization. */ + boost::signals2::signal InitMessage; + + /** Translate a message to the native language of the user. */ + boost::signals2::signal Translate; + + /** Block chain changed. */ + boost::signals2::signal NotifyBlocksChanged; + + /** Number of network connections changed. */ + boost::signals2::signal NotifyNumConnectionsChanged; + + /** + * New, updated or cancelled alert. + * @note called with lock cs_mapAlerts held. + */ + boost::signals2::signal NotifyAlertChanged; + + /** A wallet has been loaded. */ + boost::signals2::signal LoadWallet; +}; + +extern CClientUIInterface uiInterface; + +/** + * Translation function: Call Translate signal on UI interface, which returns a boost::optional result. + * If no translation slot is registered, nothing is returned, and simply return the input. + */ +inline std::string _(const char* psz) +{ + boost::optional rv = uiInterface.Translate(psz); + return rv ? (*rv) : psz; +} + +#endif diff --git a/src/uint256.h b/src/uint256.h index 4217cb2..2e3a410 100644 --- a/src/uint256.h +++ b/src/uint256.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/uint256.h~ b/src/uint256.h~ new file mode 100644 index 0000000..ab12e57 --- /dev/null +++ b/src/uint256.h~ @@ -0,0 +1,636 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_UINT256_H +#define BITMARK_UINT256_H + +#include +#include +#include +#include +#include + +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. + */ +template +class base_uint +{ +protected: + enum { WIDTH=BITS/32 }; + uint32_t pn[WIDTH]; +public: + + bool operator!() const + { + for (int i = 0; i < WIDTH; i++) + if (pn[i] != 0) + return false; + return true; + } + + const base_uint operator~() const + { + base_uint ret; + for (int i = 0; i < WIDTH; i++) + ret.pn[i] = ~pn[i]; + return ret; + } + + const base_uint operator-() const + { + base_uint ret; + for (int i = 0; i < WIDTH; i++) + ret.pn[i] = ~pn[i]; + ret++; + return ret; + } + + double getdouble() const + { + double ret = 0.0; + double fact = 1.0; + for (int i = 0; i < WIDTH; i++) { + ret += fact * pn[i]; + fact *= 4294967296.0; + } + return ret; + } + + base_uint& operator=(uint64_t b) + { + pn[0] = (unsigned int)b; + pn[1] = (unsigned int)(b >> 32); + for (int i = 2; i < WIDTH; i++) + pn[i] = 0; + return *this; + } + + base_uint& operator^=(const base_uint& b) + { + for (int i = 0; i < WIDTH; i++) + pn[i] ^= b.pn[i]; + return *this; + } + + base_uint& operator&=(const base_uint& b) + { + for (int i = 0; i < WIDTH; i++) + pn[i] &= b.pn[i]; + return *this; + } + + base_uint& operator|=(const base_uint& b) + { + for (int i = 0; i < WIDTH; i++) + pn[i] |= b.pn[i]; + return *this; + } + + base_uint& operator^=(uint64_t b) + { + pn[0] ^= (unsigned int)b; + pn[1] ^= (unsigned int)(b >> 32); + return *this; + } + + base_uint& operator|=(uint64_t b) + { + pn[0] |= (unsigned int)b; + pn[1] |= (unsigned int)(b >> 32); + return *this; + } + + base_uint& operator<<=(unsigned int shift) + { + base_uint a(*this); + for (int i = 0; i < WIDTH; i++) + pn[i] = 0; + int k = shift / 32; + shift = shift % 32; + for (int i = 0; i < WIDTH; i++) + { + if (i+k+1 < WIDTH && shift != 0) + pn[i+k+1] |= (a.pn[i] >> (32-shift)); + if (i+k < WIDTH) + pn[i+k] |= (a.pn[i] << shift); + } + return *this; + } + + base_uint& operator>>=(unsigned int shift) + { + base_uint a(*this); + for (int i = 0; i < WIDTH; i++) + pn[i] = 0; + int k = shift / 32; + shift = shift % 32; + for (int i = 0; i < WIDTH; i++) + { + if (i-k-1 >= 0 && shift != 0) + pn[i-k-1] |= (a.pn[i] << (32-shift)); + if (i-k >= 0) + pn[i-k] |= (a.pn[i] >> shift); + } + return *this; + } + + base_uint& operator+=(const base_uint& b) + { + uint64_t carry = 0; + for (int i = 0; i < WIDTH; i++) + { + uint64_t n = carry + pn[i] + b.pn[i]; + pn[i] = n & 0xffffffff; + carry = n >> 32; + } + return *this; + } + + base_uint& operator-=(const base_uint& b) + { + *this += -b; + return *this; + } + + base_uint& operator+=(uint64_t b64) + { + base_uint b; + b = b64; + *this += b; + return *this; + } + + base_uint& operator-=(uint64_t b64) + { + base_uint b; + b = b64; + *this += -b; + return *this; + } + + + base_uint& operator++() + { + // prefix operator + int i = 0; + while (++pn[i] == 0 && i < WIDTH-1) + i++; + return *this; + } + + const base_uint operator++(int) + { + // postfix operator + const base_uint ret = *this; + ++(*this); + return ret; + } + + base_uint& operator--() + { + // prefix operator + int i = 0; + while (--pn[i] == (uint32_t)-1 && i < WIDTH-1) + i++; + return *this; + } + + const base_uint operator--(int) + { + // postfix operator + const base_uint ret = *this; + --(*this); + return ret; + } + + + friend inline bool operator<(const base_uint& a, const base_uint& b) + { + for (int i = base_uint::WIDTH-1; i >= 0; i--) + { + if (a.pn[i] < b.pn[i]) + return true; + else if (a.pn[i] > b.pn[i]) + return false; + } + return false; + } + + friend inline bool operator<=(const base_uint& a, const base_uint& b) + { + for (int i = base_uint::WIDTH-1; i >= 0; i--) + { + if (a.pn[i] < b.pn[i]) + return true; + else if (a.pn[i] > b.pn[i]) + return false; + } + return true; + } + + friend inline bool operator>(const base_uint& a, const base_uint& b) + { + for (int i = base_uint::WIDTH-1; i >= 0; i--) + { + if (a.pn[i] > b.pn[i]) + return true; + else if (a.pn[i] < b.pn[i]) + return false; + } + return false; + } + + friend inline bool operator>=(const base_uint& a, const base_uint& b) + { + for (int i = base_uint::WIDTH-1; i >= 0; i--) + { + if (a.pn[i] > b.pn[i]) + return true; + else if (a.pn[i] < b.pn[i]) + return false; + } + return true; + } + + friend inline bool operator==(const base_uint& a, const base_uint& b) + { + for (int i = 0; i < base_uint::WIDTH; i++) + if (a.pn[i] != b.pn[i]) + return false; + return true; + } + + friend inline bool operator==(const base_uint& a, uint64_t b) + { + if (a.pn[0] != (unsigned int)b) + return false; + if (a.pn[1] != (unsigned int)(b >> 32)) + return false; + for (int i = 2; i < base_uint::WIDTH; i++) + if (a.pn[i] != 0) + return false; + return true; + } + + friend inline bool operator!=(const base_uint& a, const base_uint& b) + { + return (!(a == b)); + } + + friend inline bool operator!=(const base_uint& a, uint64_t b) + { + return (!(a == b)); + } + + + + std::string GetHex() const + { + char psz[sizeof(pn)*2 + 1]; + for (unsigned int i = 0; i < sizeof(pn); i++) + sprintf(psz + i*2, "%02x", ((unsigned char*)pn)[sizeof(pn) - i - 1]); + return std::string(psz, psz + sizeof(pn)*2); + } + + void SetHex(const char* psz) + { + memset(pn,0,sizeof(pn)); + + // skip leading spaces + while (isspace(*psz)) + psz++; + + // skip 0x + if (psz[0] == '0' && tolower(psz[1]) == 'x') + psz += 2; + + // hex string to uint + const char* pbegin = psz; + while (::HexDigit(*psz) != -1) + psz++; + psz--; + unsigned char* p1 = (unsigned char*)pn; + unsigned char* pend = p1 + WIDTH * 4; + while (psz >= pbegin && p1 < pend) + { + *p1 = ::HexDigit(*psz--); + if (psz >= pbegin) + { + *p1 |= ((unsigned char)::HexDigit(*psz--) << 4); + p1++; + } + } + } + + void SetHex(const std::string& str) + { + SetHex(str.c_str()); + } + + std::string ToString() const + { + return (GetHex()); + } + + unsigned char* begin() + { + return (unsigned char*)&pn[0]; + } + + unsigned char* end() + { + return (unsigned char*)&pn[WIDTH]; + } + + const unsigned char* begin() const + { + return (unsigned char*)&pn[0]; + } + + const unsigned char* end() const + { + return (unsigned char*)&pn[WIDTH]; + } + + unsigned int size() const + { + return sizeof(pn); + } + + uint64_t GetLow64() const + { + assert(WIDTH >= 2); + return pn[0] | (uint64_t)pn[1] << 32; + } + +// unsigned int GetSerializeSize(int nType=0, int nVersion=PROTOCOL_VERSION) const + unsigned int GetSerializeSize(int nType, int nVersion) const + { + return sizeof(pn); + } + + template +// void Serialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION) const + void Serialize(Stream& s, int nType, int nVersion) const + { + s.write((char*)pn, sizeof(pn)); + } + + template +// void Unserialize(Stream& s, int nType=0, int nVersion=PROTOCOL_VERSION) + void Unserialize(Stream& s, int nType, int nVersion) + { + s.read((char*)pn, sizeof(pn)); + } + + + friend class uint160; + friend class uint256; +}; + +typedef base_uint<160> base_uint160; +typedef base_uint<256> base_uint256; + + + +// +// uint160 and uint256 could be implemented as templates, but to keep +// compile errors and debugging cleaner, they're copy and pasted. +// + + + +////////////////////////////////////////////////////////////////////////////// +// +// uint160 +// + +/** 160-bit unsigned integer */ +class uint160 : public base_uint160 +{ +public: + typedef base_uint160 basetype; + + uint160() + { + for (int i = 0; i < WIDTH; i++) + pn[i] = 0; + } + + uint160(const basetype& b) + { + for (int i = 0; i < WIDTH; i++) + pn[i] = b.pn[i]; + } + + uint160& operator=(const basetype& b) + { + for (int i = 0; i < WIDTH; i++) + pn[i] = b.pn[i]; + return *this; + } + + uint160(uint64_t b) + { + pn[0] = (unsigned int)b; + pn[1] = (unsigned int)(b >> 32); + for (int i = 2; i < WIDTH; i++) + pn[i] = 0; + } + + uint160& operator=(uint64_t b) + { + pn[0] = (unsigned int)b; + pn[1] = (unsigned int)(b >> 32); + for (int i = 2; i < WIDTH; i++) + pn[i] = 0; + return *this; + } + + explicit uint160(const std::string& str) + { + SetHex(str); + } + + explicit uint160(const std::vector& vch) + { + if (vch.size() == sizeof(pn)) + memcpy(pn, &vch[0], sizeof(pn)); + else + *this = 0; + } +}; + +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; } +inline const uint160 operator>>(const uint160& a, unsigned int shift) { return uint160(a) >>= shift; } + +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 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 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; } + + + +////////////////////////////////////////////////////////////////////////////// +// +// uint256 +// + +/** 256-bit unsigned integer */ +class uint256 : public base_uint256 +{ +public: + typedef base_uint256 basetype; + + uint256() + { + for (int i = 0; i < WIDTH; i++) + pn[i] = 0; + } + + uint256(const basetype& b) + { + for (int i = 0; i < WIDTH; i++) + pn[i] = b.pn[i]; + } + + uint256& operator=(const basetype& b) + { + for (int i = 0; i < WIDTH; i++) + pn[i] = b.pn[i]; + return *this; + } + + uint256(uint64_t b) + { + pn[0] = (unsigned int)b; + pn[1] = (unsigned int)(b >> 32); + for (int i = 2; i < WIDTH; i++) + pn[i] = 0; + } + + uint256& operator=(uint64_t b) + { + pn[0] = (unsigned int)b; + pn[1] = (unsigned int)(b >> 32); + for (int i = 2; i < WIDTH; i++) + pn[i] = 0; + return *this; + } + + explicit uint256(const std::string& str) + { + SetHex(str); + } + + explicit uint256(const std::vector& vch) + { + if (vch.size() == sizeof(pn)) + memcpy(pn, &vch[0], sizeof(pn)); + else + *this = 0; + } +}; + +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; } +inline const uint256 operator>>(const uint256& a, unsigned int shift) { return uint256(a) >>= shift; } + +inline const uint256 operator^(const base_uint256& a, const base_uint256& b) { return uint256(a) ^= b; } +inline const uint256 operator&(const base_uint256& a, const base_uint256& b) { return uint256(a) &= b; } +inline const uint256 operator|(const base_uint256& a, const base_uint256& b) { return uint256(a) |= b; } +inline const uint256 operator+(const base_uint256& a, const base_uint256& b) { return uint256(a) += b; } +inline const uint256 operator-(const base_uint256& a, const base_uint256& b) { return uint256(a) -= b; } + +inline bool operator<(const base_uint256& a, const uint256& b) { return (base_uint256)a < (base_uint256)b; } +inline bool operator<=(const base_uint256& a, const uint256& b) { return (base_uint256)a <= (base_uint256)b; } +inline bool operator>(const base_uint256& a, const uint256& b) { return (base_uint256)a > (base_uint256)b; } +inline bool operator>=(const base_uint256& a, const uint256& b) { return (base_uint256)a >= (base_uint256)b; } +inline bool operator==(const base_uint256& a, const uint256& b) { return (base_uint256)a == (base_uint256)b; } +inline bool operator!=(const base_uint256& a, const uint256& b) { return (base_uint256)a != (base_uint256)b; } +inline const uint256 operator^(const base_uint256& a, const uint256& b) { return (base_uint256)a ^ (base_uint256)b; } +inline const uint256 operator&(const base_uint256& a, const uint256& b) { return (base_uint256)a & (base_uint256)b; } +inline const uint256 operator|(const base_uint256& a, const uint256& b) { return (base_uint256)a | (base_uint256)b; } +inline const uint256 operator+(const base_uint256& a, const uint256& b) { return (base_uint256)a + (base_uint256)b; } +inline const uint256 operator-(const base_uint256& a, const uint256& b) { return (base_uint256)a - (base_uint256)b; } + +inline bool operator<(const uint256& a, const base_uint256& b) { return (base_uint256)a < (base_uint256)b; } +inline bool operator<=(const uint256& a, const base_uint256& b) { return (base_uint256)a <= (base_uint256)b; } +inline bool operator>(const uint256& a, const base_uint256& b) { return (base_uint256)a > (base_uint256)b; } +inline bool operator>=(const uint256& a, const base_uint256& b) { return (base_uint256)a >= (base_uint256)b; } +inline bool operator==(const uint256& a, const base_uint256& b) { return (base_uint256)a == (base_uint256)b; } +inline bool operator!=(const uint256& a, const base_uint256& b) { return (base_uint256)a != (base_uint256)b; } +inline const uint256 operator^(const uint256& a, const base_uint256& b) { return (base_uint256)a ^ (base_uint256)b; } +inline const uint256 operator&(const uint256& a, const base_uint256& b) { return (base_uint256)a & (base_uint256)b; } +inline const uint256 operator|(const uint256& a, const base_uint256& b) { return (base_uint256)a | (base_uint256)b; } +inline const uint256 operator+(const uint256& a, const base_uint256& b) { return (base_uint256)a + (base_uint256)b; } +inline const uint256 operator-(const uint256& a, const base_uint256& b) { return (base_uint256)a - (base_uint256)b; } + +inline bool operator<(const uint256& a, const uint256& b) { return (base_uint256)a < (base_uint256)b; } +inline bool operator<=(const uint256& a, const uint256& b) { return (base_uint256)a <= (base_uint256)b; } +inline bool operator>(const uint256& a, const uint256& b) { return (base_uint256)a > (base_uint256)b; } +inline bool operator>=(const uint256& a, const uint256& b) { return (base_uint256)a >= (base_uint256)b; } +inline bool operator==(const uint256& a, const uint256& b) { return (base_uint256)a == (base_uint256)b; } +inline bool operator!=(const uint256& a, const uint256& b) { return (base_uint256)a != (base_uint256)b; } +inline const uint256 operator^(const uint256& a, const uint256& b) { return (base_uint256)a ^ (base_uint256)b; } +inline const uint256 operator&(const uint256& a, const uint256& b) { return (base_uint256)a & (base_uint256)b; } +inline const uint256 operator|(const uint256& a, const uint256& b) { return (base_uint256)a | (base_uint256)b; } +inline const uint256 operator+(const uint256& a, const uint256& b) { return (base_uint256)a + (base_uint256)b; } +inline const uint256 operator-(const uint256& a, const uint256& b) { return (base_uint256)a - (base_uint256)b; } + +#endif diff --git a/src/util.cpp b/src/util.cpp index 7dc8d64..d8a0e05 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -942,10 +942,10 @@ void PrintExceptionContinue(std::exception* pex, const char* pszThread) boost::filesystem::path GetDefaultDataDir() { namespace fs = boost::filesystem; - // Windows < Vista: C:\Documents and Settings\Username\Application Data\Bitmark - // Windows >= Vista: C:\Users\Username\AppData\Roaming\Bitmark - // Mac: ~/Library/Application Support/Bitmark - // Unix: ~/.bitmark + // Windows < Vista: C:\Documents and Settings\Username\Application Data\Pfennig + // Windows >= Vista: C:\Users\Username\AppData\Roaming\Pfennig + // Mac: ~/Library/Application Support/Pfennig + // Unix: ~/.pfennig #ifdef WIN32 // Windows return GetSpecialFolderPath(CSIDL_APPDATA) / "Pfennig"; @@ -1012,7 +1012,7 @@ void ClearDatadirCache() boost::filesystem::path GetConfigFile() { - boost::filesystem::path pathConfigFile(GetArg("-conf", "bitmark.conf")); + boost::filesystem::path pathConfigFile(GetArg("-conf", "pfennig.conf")); if (!pathConfigFile.is_complete()) pathConfigFile = GetDataDir(false) / pathConfigFile; return pathConfigFile; } @@ -1022,14 +1022,14 @@ void ReadConfigFile(map& mapSettingsRet, { boost::filesystem::ifstream streamConfig(GetConfigFile()); if (!streamConfig.good()) - return; // No bitmark.conf file is OK + return; // No pfennig.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 bitmark.conf + // Don't overwrite existing settings so command line settings override pfennig.conf string strKey = string("-") + it->string_key; if (mapSettingsRet.count(strKey) == 0) { diff --git a/src/util.cpp~ b/src/util.cpp~ new file mode 100644 index 0000000..692f719 --- /dev/null +++ b/src/util.cpp~ @@ -0,0 +1,1438 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "chainparams.h" +#include "netbase.h" +#include "sync.h" +#include "ui_interface.h" +#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 +// See also: http://stackoverflow.com/questions/10020179/compilation-fail-in-boost-librairies-program-options +// http://clang.debian.net/status.php?version=3.0&key=CANNOT_FIND_FUNCTION +namespace boost { + namespace program_options { + std::string to_internal(const std::string&); + } +} + + +using namespace std; + +map mapArgs; +map > mapMultiArgs; +bool fDebug = false; +bool fPrintToConsole = false; +bool fPrintToDebugLog = true; +bool fDaemon = false; +bool fServer = false; +string strMiscWarning; +bool fNoListen = false; +bool fLogTimestamps = false; +volatile bool fReopenDebugLog = false; +CClientUIInterface uiInterface; + +// Init OpenSSL library multithreading support +static CCriticalSection** ppmutexOpenSSL; +void locking_callback(int mode, int i, const char* file, int line) +{ + if (mode & CRYPTO_LOCK) { + ENTER_CRITICAL_SECTION(*ppmutexOpenSSL[i]); + } else { + LEAVE_CRITICAL_SECTION(*ppmutexOpenSSL[i]); + } +} + +// Init +class CInit +{ +public: + CInit() + { + // Init OpenSSL library multithreading support + ppmutexOpenSSL = (CCriticalSection**)OPENSSL_malloc(CRYPTO_num_locks() * sizeof(CCriticalSection*)); + for (int i = 0; i < CRYPTO_num_locks(); i++) + ppmutexOpenSSL[i] = new CCriticalSection(); + CRYPTO_set_locking_callback(locking_callback); + +#ifdef WIN32 + // Seed random number generator with screen scrape and other hardware sources + RAND_screen(); +#endif + + // Seed random number generator with performance counter + RandAddSeed(); + } + ~CInit() + { + // Shutdown OpenSSL library multithreading support + CRYPTO_set_locking_callback(NULL); + for (int i = 0; i < CRYPTO_num_locks(); i++) + delete ppmutexOpenSSL[i]; + OPENSSL_free(ppmutexOpenSSL); + } +} +instance_of_cinit; + + + + + + + + +void RandAddSeed() +{ + // Seed with CPU performance counter + int64_t nCounter = GetPerformanceCounter(); + RAND_add(&nCounter, sizeof(nCounter), 1.5); + memset(&nCounter, 0, sizeof(nCounter)); +} + +void RandAddSeedPerfmon() +{ + RandAddSeed(); + + // This can take up to 2 seconds, so only do it every 10 minutes + static int64_t nLastPerfmon; + if (GetTime() < nLastPerfmon + 10 * 60) + return; + nLastPerfmon = GetTime(); + +#ifdef WIN32 + // Don't need this on Linux, OpenSSL automatically uses /dev/urandom + // Seed with the entire set of perfmon data + unsigned char pdata[250000]; + memset(pdata, 0, sizeof(pdata)); + unsigned long nSize = sizeof(pdata); + long ret = RegQueryValueExA(HKEY_PERFORMANCE_DATA, "Global", NULL, NULL, pdata, &nSize); + RegCloseKey(HKEY_PERFORMANCE_DATA); + if (ret == ERROR_SUCCESS) + { + RAND_add(pdata, nSize, nSize/100.0); + OPENSSL_cleanse(pdata, nSize); + LogPrint("rand", "RandAddSeed() %lu bytes\n", nSize); + } +#endif +} + +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_t nRange = (std::numeric_limits::max() / nMax) * nMax; + uint64_t nRand = 0; + do + RAND_bytes((unsigned char*)&nRand, sizeof(nRand)); + while (nRand >= nRange); + return (nRand % nMax); +} + +int GetRandInt(int nMax) +{ + return GetRand(nMax); +} + +uint256 GetRandHash() +{ + uint256 hash; + RAND_bytes((unsigned char*)&hash, sizeof(hash)); + return hash; +} + +// 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, +// defining a mutex as a global object doesn't work (the mutex gets +// destroyed, and then some later destructor calls OutputDebugStringF, +// maybe indirectly, and you get a core dump at shutdown trying to lock +// the mutex). + +static boost::once_flag debugPrintInitFlag = BOOST_ONCE_INIT; +// We use boost::call_once() to make sure these are initialized in +// in a thread-safe manner the first time it is called: +static FILE* fileout = NULL; +static boost::mutex* mutexDebugLog = NULL; + +static void DebugPrintInit() +{ + assert(fileout == NULL); + assert(mutexDebugLog == NULL); + + boost::filesystem::path pathDebug = GetDataDir() / "debug.log"; + fileout = fopen(pathDebug.string().c_str(), "a"); + if (fileout) setbuf(fileout, NULL); // unbuffered + + mutexDebugLog = new boost::mutex(); +} + +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 + ret = fwrite(str.data(), 1, str.size(), stdout); + } + else if (fPrintToDebugLog) + { + static bool fStartedNewLine = true; + boost::call_once(&DebugPrintInit, debugPrintInitFlag); + + if (fileout == NULL) + return ret; + + boost::mutex::scoped_lock scoped_lock(*mutexDebugLog); + + // reopen the log file, if requested + if (fReopenDebugLog) { + fReopenDebugLog = false; + boost::filesystem::path pathDebug = GetDataDir() / "debug.log"; + if (freopen(pathDebug.string().c_str(),"a",fileout) != NULL) + setbuf(fileout, NULL); // unbuffered + } + + // Debug print useful for profiling + if (fLogTimestamps && fStartedNewLine) + ret += fprintf(fileout, "%s ", DateTimeStrFormat("%Y-%m-%d %H:%M:%S", GetTime()).c_str()); + if (!str.empty() && str[str.size()-1] == '\n') + fStartedNewLine = true; + else + fStartedNewLine = false; + + ret = fwrite(str.data(), 1, str.size(), fileout); + } + + return ret; +} + +string FormatMoney(int64_t n, bool fPlus) +{ + // Note: not using straight sprintf here because we do NOT want + // localized number formatting. + 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; + for (int i = str.size()-1; (str[i] == '0' && isdigit(str[i-2])); --i) + ++nTrim; + if (nTrim) + str.erase(str.size()-nTrim, nTrim); + + if (n < 0) + str.insert((unsigned int)0, 1, '-'); + else if (fPlus && n > 0) + str.insert((unsigned int)0, 1, '+'); + return str; +} + + +bool ParseMoney(const string& str, int64_t& nRet) +{ + return ParseMoney(str.c_str(), nRet); +} + +bool ParseMoney(const char* pszIn, int64_t& nRet) +{ + string strWhole; + int64_t nUnits = 0; + const char* p = pszIn; + while (isspace(*p)) + p++; + for (; *p; p++) + { + if (*p == '.') + { + p++; + int64_t nMult = CENT*10; + while (isdigit(*p) && (nMult > 0)) + { + nUnits += nMult * (*p++ - '0'); + nMult /= 10; + } + break; + } + if (isspace(*p)) + break; + if (!isdigit(*p)) + return false; + strWhole.insert(strWhole.end(), *p); + } + for (; *p; p++) + if (!isspace(*p)) + return false; + if (strWhole.size() > 10) // guard against 63 bit overflow + return false; + if (nUnits < 0 || nUnits > COIN) + return false; + 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; +} + +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, + 0,1,2,3,4,5,6,7,8,9,-1,-1,-1,-1,-1,-1, + -1,0xa,0xb,0xc,0xd,0xe,0xf,-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,0xa,0xb,0xc,0xd,0xe,0xf,-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,-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,-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,-1,-1,-1,-1,-1,-1,-1,-1,-1, }; + +bool IsHex(const string& str) +{ + BOOST_FOREACH(char c, str) + { + if (HexDigit(c) < 0) + return false; + } + return (str.size() > 0) && (str.size()%2 == 0); +} + +vector ParseHex(const char* psz) +{ + // convert hex dump to vector + vector vch; + while (true) + { + while (isspace(*psz)) + psz++; + signed char c = HexDigit(*psz++); + if (c == (signed char)-1) + break; + unsigned char n = (c << 4); + c = HexDigit(*psz++); + if (c == (signed char)-1) + break; + n |= c; + vch.push_back(n); + } + return vch; +} + +vector ParseHex(const string& str) +{ + return ParseHex(str.c_str()); +} + +static void InterpretNegativeSetting(string name, map& mapSettingsRet) +{ + // interpret -nofoo as -foo=0 (and -nofoo=0 as -foo=1) as long as -foo not set + if (name.find("-no") == 0) + { + std::string positive("-"); + positive.append(name.begin()+3, name.end()); + if (mapSettingsRet.count(positive) == 0) + { + bool value = !GetBoolArg(name, false); + mapSettingsRet[positive] = (value ? "1" : "0"); + } + } +} + +void ParseParameters(int argc, const char* const argv[]) +{ + mapArgs.clear(); + mapMultiArgs.clear(); + for (int i = 1; i < argc; i++) + { + std::string str(argv[i]); + std::string strValue; + size_t is_index = str.find('='); + if (is_index != std::string::npos) + { + strValue = str.substr(is_index+1); + str = str.substr(0, is_index); + } +#ifdef WIN32 + boost::to_lower(str); + if (boost::algorithm::starts_with(str, "/")) + str = "-" + str.substr(1); +#endif + if (str[0] != '-') + break; + + mapArgs[str] = strValue; + mapMultiArgs[str].push_back(strValue); + } + + // New 0.6 features: + BOOST_FOREACH(const PAIRTYPE(string,string)& entry, mapArgs) + { + string name = entry.first; + + // interpret --foo as -foo (as long as both are not set) + if (name.find("--") == 0) + { + std::string singleDash(name.begin()+1, name.end()); + if (mapArgs.count(singleDash) == 0) + mapArgs[singleDash] = entry.second; + name = singleDash; + } + + // interpret -nofoo as -foo=0 (and -nofoo=0 as -foo=1) as long as -foo not set + InterpretNegativeSetting(name, mapArgs); + } +} + +std::string GetArg(const std::string& strArg, const std::string& strDefault) +{ + if (mapArgs.count(strArg)) + return mapArgs[strArg]; + return strDefault; +} + +int64_t GetArg(const std::string& strArg, int64_t nDefault) +{ + if (mapArgs.count(strArg)) + return atoi64(mapArgs[strArg]); + return nDefault; +} + +bool GetBoolArg(const std::string& strArg, bool fDefault) +{ + if (mapArgs.count(strArg)) + { + if (mapArgs[strArg].empty()) + return true; + return (atoi(mapArgs[strArg]) != 0); + } + return fDefault; +} + +bool SoftSetArg(const std::string& strArg, const std::string& strValue) +{ + if (mapArgs.count(strArg)) + return false; + mapArgs[strArg] = strValue; + return true; +} + +bool SoftSetBoolArg(const std::string& strArg, bool fValue) +{ + if (fValue) + return SoftSetArg(strArg, std::string("1")); + else + return SoftSetArg(strArg, std::string("0")); +} + + +string EncodeBase64(const unsigned char* pch, size_t len) +{ + static const char *pbase64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + + string strRet=""; + strRet.reserve((len+2)/3*4); + + int mode=0, left=0; + const unsigned char *pchEnd = pch+len; + + while (pch> 2]; + left = (enc & 3) << 4; + mode = 1; + break; + + case 1: // we have two bits + strRet += pbase64[left | (enc >> 4)]; + left = (enc & 15) << 2; + mode = 2; + break; + + case 2: // we have four bits + strRet += pbase64[left | (enc >> 6)]; + strRet += pbase64[enc & 63]; + mode = 0; + break; + } + } + + if (mode) + { + strRet += pbase64[left]; + strRet += '='; + if (mode == 1) + strRet += '='; + } + + return strRet; +} + +string EncodeBase64(const string& str) +{ + return EncodeBase64((const unsigned char*)str.c_str(), str.size()); +} + +vector DecodeBase64(const char* p, bool* pfInvalid) +{ + static const int decode64_table[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, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, + -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, -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, -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, -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 + }; + + if (pfInvalid) + *pfInvalid = false; + + vector vchRet; + vchRet.reserve(strlen(p)*3/4); + + int mode = 0; + int left = 0; + + while (1) + { + int dec = decode64_table[(unsigned char)*p]; + if (dec == -1) break; + p++; + switch (mode) + { + case 0: // we have no bits and get 6 + left = dec; + mode = 1; + break; + + case 1: // we have 6 bits and keep 4 + vchRet.push_back((left<<2) | (dec>>4)); + left = dec & 15; + mode = 2; + break; + + case 2: // we have 4 bits and get 6, we keep 2 + vchRet.push_back((left<<4) | (dec>>2)); + left = dec & 3; + mode = 3; + break; + + case 3: // we have 2 bits and get 6 + vchRet.push_back((left<<6) | dec); + mode = 0; + break; + } + } + + if (pfInvalid) + switch (mode) + { + case 0: // 4n base64 characters processed: ok + break; + + case 1: // 4n+1 base64 character processed: impossible + *pfInvalid = true; + break; + + case 2: // 4n+2 base64 characters processed: require '==' + if (left || p[0] != '=' || p[1] != '=' || decode64_table[(unsigned char)p[2]] != -1) + *pfInvalid = true; + break; + + case 3: // 4n+3 base64 characters processed: require '=' + if (left || p[0] != '=' || decode64_table[(unsigned char)p[1]] != -1) + *pfInvalid = true; + break; + } + + return vchRet; +} + +string DecodeBase64(const string& str) +{ + vector vchRet = DecodeBase64(str.c_str()); + return string((const char*)&vchRet[0], vchRet.size()); +} + +string EncodeBase32(const unsigned char* pch, size_t len) +{ + static const char *pbase32 = "abcdefghijklmnopqrstuvwxyz234567"; + + string strRet=""; + strRet.reserve((len+4)/5*8); + + int mode=0, left=0; + const unsigned char *pchEnd = pch+len; + + while (pch> 3]; + left = (enc & 7) << 2; + mode = 1; + break; + + case 1: // we have three bits + strRet += pbase32[left | (enc >> 6)]; + strRet += pbase32[(enc >> 1) & 31]; + left = (enc & 1) << 4; + mode = 2; + break; + + case 2: // we have one bit + strRet += pbase32[left | (enc >> 4)]; + left = (enc & 15) << 1; + mode = 3; + break; + + case 3: // we have four bits + strRet += pbase32[left | (enc >> 7)]; + strRet += pbase32[(enc >> 2) & 31]; + left = (enc & 3) << 3; + mode = 4; + break; + + case 4: // we have two bits + strRet += pbase32[left | (enc >> 5)]; + strRet += pbase32[enc & 31]; + mode = 0; + } + } + + static const int nPadding[5] = {0, 6, 4, 3, 1}; + if (mode) + { + strRet += pbase32[left]; + for (int n=0; n DecodeBase32(const char* p, bool* pfInvalid) +{ + static const int decode32_table[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, -1, -1, 26, 27, 28, 29, 30, 31, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 0, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, -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, -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, -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 + }; + + if (pfInvalid) + *pfInvalid = false; + + vector vchRet; + vchRet.reserve((strlen(p))*5/8); + + int mode = 0; + int left = 0; + + while (1) + { + int dec = decode32_table[(unsigned char)*p]; + if (dec == -1) break; + p++; + switch (mode) + { + case 0: // we have no bits and get 5 + left = dec; + mode = 1; + break; + + case 1: // we have 5 bits and keep 2 + vchRet.push_back((left<<3) | (dec>>2)); + left = dec & 3; + mode = 2; + break; + + case 2: // we have 2 bits and keep 7 + left = left << 5 | dec; + mode = 3; + break; + + case 3: // we have 7 bits and keep 4 + vchRet.push_back((left<<1) | (dec>>4)); + left = dec & 15; + mode = 4; + break; + + case 4: // we have 4 bits, and keep 1 + vchRet.push_back((left<<4) | (dec>>1)); + left = dec & 1; + mode = 5; + break; + + case 5: // we have 1 bit, and keep 6 + left = left << 5 | dec; + mode = 6; + break; + + case 6: // we have 6 bits, and keep 3 + vchRet.push_back((left<<2) | (dec>>3)); + left = dec & 7; + mode = 7; + break; + + case 7: // we have 3 bits, and keep 0 + vchRet.push_back((left<<5) | dec); + mode = 0; + break; + } + } + + if (pfInvalid) + switch (mode) + { + case 0: // 8n base32 characters processed: ok + break; + + case 1: // 8n+1 base32 characters processed: impossible + case 3: // +3 + case 6: // +6 + *pfInvalid = true; + break; + + case 2: // 8n+2 base32 characters processed: require '======' + if (left || p[0] != '=' || p[1] != '=' || p[2] != '=' || p[3] != '=' || p[4] != '=' || p[5] != '=' || decode32_table[(unsigned char)p[6]] != -1) + *pfInvalid = true; + break; + + case 4: // 8n+4 base32 characters processed: require '====' + if (left || p[0] != '=' || p[1] != '=' || p[2] != '=' || p[3] != '=' || decode32_table[(unsigned char)p[4]] != -1) + *pfInvalid = true; + break; + + case 5: // 8n+5 base32 characters processed: require '===' + if (left || p[0] != '=' || p[1] != '=' || p[2] != '=' || decode32_table[(unsigned char)p[3]] != -1) + *pfInvalid = true; + break; + + case 7: // 8n+7 base32 characters processed: require '=' + if (left || p[0] != '=' || decode32_table[(unsigned char)p[1]] != -1) + *pfInvalid = true; + break; + } + + return vchRet; +} + +string DecodeBase32(const string& str) +{ + vector vchRet = DecodeBase32(str.c_str()); + return string((const char*)&vchRet[0], vchRet.size()); +} + + +bool WildcardMatch(const char* psz, const char* mask) +{ + while (true) + { + switch (*mask) + { + case '\0': + return (*psz == '\0'); + case '*': + return WildcardMatch(psz, mask+1) || (*psz && WildcardMatch(psz+1, mask)); + case '?': + if (*psz == '\0') + return false; + break; + default: + if (*psz != *mask) + return false; + break; + } + psz++; + mask++; + } +} + +bool WildcardMatch(const string& str, const string& mask) +{ + return WildcardMatch(str.c_str(), mask.c_str()); +} + + + + + + + + +static std::string FormatException(std::exception* pex, const char* pszThread) +{ +#ifdef WIN32 + char pszModule[MAX_PATH] = ""; + GetModuleFileNameA(NULL, pszModule, sizeof(pszModule)); +#else + const char* pszModule = "bitmark"; +#endif + if (pex) + return strprintf( + "EXCEPTION: %s \n%s \n%s in %s \n", typeid(*pex).name(), pex->what(), pszModule, pszThread); + else + return strprintf( + "UNKNOWN EXCEPTION \n%s in %s \n", pszModule, pszThread); +} + +void LogException(std::exception* pex, const char* pszThread) +{ + std::string message = FormatException(pex, pszThread); + LogPrintf("\n%s", message); +} + +void PrintExceptionContinue(std::exception* pex, const char* pszThread) +{ + std::string message = FormatException(pex, pszThread); + LogPrintf("\n\n************************\n%s\n", message); + fprintf(stderr, "\n\n************************\n%s\n", message.c_str()); + strMiscWarning = message; +} + +boost::filesystem::path GetDefaultDataDir() +{ + namespace fs = boost::filesystem; + // Windows < Vista: C:\Documents and Settings\Username\Application Data\Pfennig + // Windows >= Vista: C:\Users\Username\AppData\Roaming\Pfennig + // Mac: ~/Library/Application Support/Pfennig + // Unix: ~/.pfennig +#ifdef WIN32 + // Windows + return GetSpecialFolderPath(CSIDL_APPDATA) / "Pfennig"; +#else + fs::path pathRet; + char* pszHome = getenv("HOME"); + if (pszHome == NULL || strlen(pszHome) == 0) + pathRet = fs::path("/"); + else + pathRet = fs::path(pszHome); +#ifdef MAC_OSX + // Mac + pathRet /= "Library/Application Support"; + TryCreateDirectory(pathRet); + return pathRet / "Pfennig"; +#else + // Unix + return pathRet / ".pfennig"; +#endif +#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; + + 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)) { + path = ""; + return path; + } + } else { + path = GetDefaultDataDir(); + } + if (fNetSpecific) + path /= Params().DataDir(); + + fs::create_directories(path); + + 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", "pfennig.conf")); + if (!pathConfigFile.is_complete()) pathConfigFile = GetDataDir(false) / pathConfigFile; + return pathConfigFile; +} + +void ReadConfigFile(map& mapSettingsRet, + map >& mapMultiSettingsRet) +{ + boost::filesystem::ifstream streamConfig(GetConfigFile()); + if (!streamConfig.good()) + return; // No pfennig.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 pfennig.conf + string strKey = string("-") + it->string_key; + if (mapSettingsRet.count(strKey) == 0) + { + mapSettingsRet[strKey] = it->value[0]; + // interpret nofoo=1 as foo=0 (and nofoo=0 as foo=1) as long as foo not set) + InterpretNegativeSetting(strKey, mapSettingsRet); + } + mapMultiSettingsRet[strKey].push_back(it->value[0]); + } + // If datadir is changed in .conf file: + ClearDatadirCache(); +} + +boost::filesystem::path GetPidFile() +{ + boost::filesystem::path pathPidFile(GetArg("-pid", "pfennigd.pid")); + if (!pathPidFile.is_complete()) pathPidFile = GetDataDir() / pathPidFile; + return pathPidFile; +} + +#ifndef WIN32 +void CreatePidFile(const boost::filesystem::path &path, pid_t pid) +{ + FILE* file = fopen(path.string().c_str(), "w"); + if (file) + { + fprintf(file, "%d\n", pid); + fclose(file); + } +} +#endif + +bool RenameOver(boost::filesystem::path src, boost::filesystem::path dest) +{ +#ifdef WIN32 + return MoveFileExA(src.string().c_str(), dest.string().c_str(), + MOVEFILE_REPLACE_EXISTING); +#else + int rc = std::rename(src.string().c_str(), dest.string().c_str()); + return (rc == 0); +#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 +#ifdef WIN32 + 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 +} + +bool TruncateFile(FILE *file, unsigned int length) { +#if defined(WIN32) + return _chsize(_fileno(file), length) == 0; +#else + return ftruncate(fileno(file), length) == 0; +#endif +} + +// this function tries to raise the file descriptor limit to the requested number. +// It returns the actual file descriptor limit (which may be more or less than nMinFD) +int RaiseFileDescriptorLimit(int nMinFD) { +#if defined(WIN32) + return 2048; +#else + struct rlimit limitFD; + if (getrlimit(RLIMIT_NOFILE, &limitFD) != -1) { + if (limitFD.rlim_cur < (rlim_t)nMinFD) { + limitFD.rlim_cur = nMinFD; + if (limitFD.rlim_cur > limitFD.rlim_max) + limitFD.rlim_cur = limitFD.rlim_max; + setrlimit(RLIMIT_NOFILE, &limitFD); + getrlimit(RLIMIT_NOFILE, &limitFD); + } + return limitFD.rlim_cur; + } + return nMinFD; // getrlimit failed, assume it's fine +#endif +} + +// this function tries to make a particular range of a file allocated (corresponding to disk space) +// it is advisory, and the range specified in the arguments will never contain live data +void AllocateFileRange(FILE *file, unsigned int offset, unsigned int length) { +#if defined(WIN32) + // Windows-specific version + HANDLE hFile = (HANDLE)_get_osfhandle(_fileno(file)); + LARGE_INTEGER nFileSize; + int64_t nEndPos = (int64_t)offset + length; + nFileSize.u.LowPart = nEndPos & 0xFFFFFFFF; + nFileSize.u.HighPart = nEndPos >> 32; + SetFilePointerEx(hFile, nFileSize, 0, FILE_BEGIN); + SetEndOfFile(hFile); +#elif defined(MAC_OSX) + // OSX specific version + fstore_t fst; + fst.fst_flags = F_ALLOCATECONTIG; + fst.fst_posmode = F_PEOFPOSMODE; + fst.fst_offset = 0; + fst.fst_length = (off_t)offset + length; + fst.fst_bytesalloc = 0; + if (fcntl(fileno(file), F_PREALLOCATE, &fst) == -1) { + fst.fst_flags = F_ALLOCATEALL; + fcntl(fileno(file), F_PREALLOCATE, &fst); + } + ftruncate(fileno(file), fst.fst_length); +#elif defined(__linux__) + // Version using posix_fallocate + off_t nEndPos = (off_t)offset + length; + posix_fallocate(fileno(file), 0, nEndPos); +#else + // Fallback version + // TODO: just write one byte per block + static const char buf[65536] = {}; + fseek(file, offset, SEEK_SET); + while (length > 0) { + unsigned int now = 65536; + if (length < now) + now = length; + fwrite(buf, 1, now, file); // allowed to fail; this function is advisory anyway + length -= now; + } +#endif +} + +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 && boost::filesystem::file_size(pathLog) > 10 * 1000000) + { + // Restart the file with some of the end + char pch[200000]; + fseek(file, -sizeof(pch), SEEK_END); + int nBytes = fread(pch, 1, sizeof(pch), file); + fclose(file); + + file = fopen(pathLog.string().c_str(), "w"); + if (file) + { + fwrite(pch, 1, nBytes, file); + fclose(file); + } + } + else if (file != NULL) + fclose(file); +} + +// +// "Never go to sea with two chronometers; take one or three." +// Our three time sources are: +// - System clock +// - Median of other nodes clocks +// - The user (asking the user to fix the system clock if the first two disagree) +// +static int64_t nMockTime = 0; // For unit testing + +int64_t GetTime() +{ + if (nMockTime) return nMockTime; + + return time(NULL); +} + +void SetMockTime(int64_t nMockTimeIn) +{ + nMockTime = nMockTimeIn; +} + +static CCriticalSection cs_nTimeOffset; +static int64_t nTimeOffset = 0; + +int64_t GetTimeOffset() +{ + LOCK(cs_nTimeOffset); + return nTimeOffset; +} + +int64_t GetAdjustedTime() +{ + return GetTime() + GetTimeOffset(); +} + +void AddTimeData(const CNetAddr& ip, int64_t nTime) +{ + 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); + 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_t nMedian = vTimeOffsets.median(); + std::vector vSorted = vTimeOffsets.sorted(); + // Only let other nodes change our time by so much + if (abs64(nMedian) < 70 * 60) + { + nTimeOffset = nMedian; + } + else + { + nTimeOffset = 0; + + static bool fDone; + if (!fDone) + { + // If nobody has a time different than ours but within 5 minutes of ours, give a warning + bool fMatch = false; + BOOST_FOREACH(int64_t nOffset, vSorted) + if (nOffset != 0 && abs64(nOffset) < 5 * 60) + fMatch = true; + + if (!fMatch) + { + fDone = true; + string strMessage = _("Warning: Please check that your computer's date and time are correct! If your clock is wrong Pfennig will not work properly."); + strMiscWarning = strMessage; + LogPrintf("*** %s\n", strMessage); + uiInterface.ThreadSafeMessageBox(strMessage, "", CClientUIInterface::MSG_WARNING); + } + } + } + if (fDebug) { + BOOST_FOREACH(int64_t n, vSorted) + LogPrintf("%+d ", n); + LogPrintf("| "); + } + LogPrintf("nTimeOffset = %+d (%+d minutes)\n", nTimeOffset, nTimeOffset/60); + } +} + +uint32_t insecure_rand_Rz = 11; +uint32_t insecure_rand_Rw = 11; +void seed_insecure_rand(bool fDeterministic) +{ + //The seed values have some unlikely fixed points which we avoid. + if(fDeterministic) + { + insecure_rand_Rz = insecure_rand_Rw = 11; + } else { + uint32_t tmp; + do { + RAND_bytes((unsigned char*)&tmp, 4); + } while(tmp == 0 || tmp == 0x9068ffffU); + insecure_rand_Rz = tmp; + do { + RAND_bytes((unsigned char*)&tmp, 4); + } while(tmp == 0 || tmp == 0x464fffffU); + insecure_rand_Rw = tmp; + } +} + +string FormatVersion(int nVersion) +{ + if (nVersion%100 == 0) + return strprintf("%d.%d.%d", nVersion/1000000, (nVersion/10000)%100, (nVersion/100)%100); + else + return strprintf("%d.%d.%d.%d", nVersion/1000000, (nVersion/10000)%100, (nVersion/100)%100, nVersion%100); +} + +string FormatFullVersion() +{ + return CLIENT_BUILD; +} + +// Format the subversion field according to BIP 14 spec +std::string FormatSubVersion(const std::string& name, int nClientVersion, const std::vector& comments) +{ + std::ostringstream ss; + ss << "/"; + ss << name << ":" << FormatVersion(nClientVersion); + if (!comments.empty()) + ss << "(" << boost::algorithm::join(comments, "; ") << ")"; + ss << "/"; + return ss.str(); +} + +#ifdef WIN32 +boost::filesystem::path GetSpecialFolderPath(int nFolder, bool fCreate) +{ + namespace fs = boost::filesystem; + + char pszPath[MAX_PATH] = ""; + + if(SHGetSpecialFolderPathA(NULL, pszPath, nFolder, fCreate)) + { + return fs::path(pszPath); + } + + LogPrintf("SHGetSpecialFolderPathA() failed, could not obtain requested path.\n"); + return fs::path(""); +} +#endif + +boost::filesystem::path GetTempPath() { +#if BOOST_FILESYSTEM_VERSION == 3 + return boost::filesystem::temp_directory_path(); +#else + // TODO: remove when we don't support filesystem v2 anymore + boost::filesystem::path path; +#ifdef WIN32 + char pszPath[MAX_PATH] = ""; + + if (GetTempPathA(MAX_PATH, pszPath)) + path = boost::filesystem::path(pszPath); +#else + path = boost::filesystem::path("/tmp"); +#endif + if (path.empty() || !boost::filesystem::is_directory(path)) { + LogPrintf("GetTempPath(): failed to find temp path\n"); + return boost::filesystem::path(""); + } + return path; +#endif +} + +void runCommand(std::string strCommand) +{ + int nErr = ::system(strCommand.c_str()); + if (nErr) + LogPrintf("runCommand error: system(%s) returned %d\n", strCommand, nErr); +} + +void RenameThread(const char* name) +{ +#if defined(PR_SET_NAME) + // Only the first 15 characters are used (16 - NUL terminator) + ::prctl(PR_SET_NAME, name, 0, 0, 0); +#elif 0 && (defined(__FreeBSD__) || defined(__OpenBSD__)) + // TODO: This is currently disabled because it needs to be verified to work + // on FreeBSD or OpenBSD first. When verified the '0 &&' part can be + // removed. + pthread_set_name_np(pthread_self(), name); + +#elif defined(MAC_OSX) && defined(__MAC_OS_X_VERSION_MAX_ALLOWED) + +// pthread_setname_np is XCode 10.6-and-later +#if __MAC_OS_X_VERSION_MAX_ALLOWED >= 1060 + pthread_setname_np(name); +#endif + +#else + // Prevent warnings for unused parameters... + (void)name; +#endif +} + +void SetupEnvironment() +{ + #ifndef WIN32 + try + { + #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 + } + #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 b967dfe..7c4a1a8 100644 --- a/src/util.h +++ b/src/util.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -522,7 +522,7 @@ inline uint32_t ByteReverse(uint32_t value) // threadGroup.create_thread(boost::bind(&LoopForever >, "nothing", f, milliseconds)); template void LoopForever(const char* name, Callable func, int64_t msecs) { - std::string s = strprintf("bitmark-%s", name); + std::string s = strprintf("pfennig-%s", name); RenameThread(s.c_str()); LogPrintf("%s thread start\n", name); try @@ -550,7 +550,7 @@ template void LoopForever(const char* name, Callable func, // .. and a wrapper that just calls func once template void TraceThread(const char* name, Callable func) { - std::string s = strprintf("bitmark-%s", name); + std::string s = strprintf("pfennig-%s", name); RenameThread(s.c_str()); try { diff --git a/src/util.h~ b/src/util.h~ new file mode 100644 index 0000000..368f1d0 --- /dev/null +++ b/src/util.h~ @@ -0,0 +1,576 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#ifndef BITMARK_UTIL_H +#define BITMARK_UTIL_H + +#if defined(HAVE_CONFIG_H) +#include "bitmark-config.h" +#endif + +#include "compat.h" +#include "serialize.h" +#include "tinyformat.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef WIN32 +#include +#include +#include +#endif + +#include +#include + +class CNetAddr; +class uint256; + +static const int64_t COIN = 100000000; +static const int64_t CENT = 1000000; + +#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])) + +// This is needed because the foreach macro can't get over the comma in pair +#define PAIRTYPE(t1, t2) std::pair + +// Align by increasing pointer, must have extra space at end of buffer +template +T* alignup(T* p) +{ + union + { + T* ptr; + size_t n; + } u; + u.ptr = p; + u.n = (u.n + (nBytes-1)) & ~(nBytes-1); + return u.ptr; +} + +#ifdef WIN32 +#define MSG_DONTWAIT 0 + +#ifndef S_IRUSR +#define S_IRUSR 0400 +#define S_IWUSR 0200 +#endif +#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_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 defined(HAVE_WORKING_BOOST_SLEEP_FOR) + boost::this_thread::sleep_for(boost::chrono::milliseconds(n)); +#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 +} + + + +extern std::map mapArgs; +extern std::map > mapMultiArgs; +extern bool fDebug; +extern bool fPrintToConsole; +extern bool fPrintToDebugLog; +extern bool fServer; +extern std::string strMiscWarning; +extern bool fNoListen; +extern bool fLogTimestamps; +extern volatile bool fReopenDebugLog; + +void RandAddSeed(); +void RandAddSeedPerfmon(); +void SetupEnvironment(); + +/* 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); + +#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). + */ +#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; \ + } + +TINYFORMAT_FOREACH_ARGNUM(MAKE_ERROR_AND_LOG_FUNC) + +/* Zero-arg versions of logging and error, these are not covered by + * TINYFORMAT_FOREACH_ARGNUM + */ +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 PrintExceptionContinue(std::exception* pex, const char* pszThread); +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); +std::vector DecodeBase64(const char* p, bool* pfInvalid = NULL); +std::string DecodeBase64(const std::string& str); +std::string EncodeBase64(const unsigned char* pch, size_t len); +std::string EncodeBase64(const std::string& str); +std::vector DecodeBase32(const char* p, bool* pfInvalid = NULL); +std::string DecodeBase32(const std::string& str); +std::string EncodeBase32(const unsigned char* pch, size_t len); +std::string EncodeBase32(const std::string& str); +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); +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); +#endif +boost::filesystem::path GetTempPath(); +void ShrinkDebugFile(); +int GetRandInt(int nMax); +uint64_t GetRand(uint64_t nMax); +uint256 GetRandHash(); +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_t nTime); +void runCommand(std::string strCommand); + + + + + + + + + +inline std::string i64tostr(int64_t n) +{ + return strprintf("%d", n); +} + +inline std::string itostr(int n) +{ + return strprintf("%d", n); +} + +inline int64_t atoi64(const char* psz) +{ +#ifdef _MSC_VER + return _atoi64(psz); +#else + return strtoll(psz, NULL, 10); +#endif +} + +inline int64_t atoi64(const std::string& str) +{ +#ifdef _MSC_VER + return _atoi64(str.c_str()); +#else + return strtoll(str.c_str(), NULL, 10); +#endif +} + +inline int atoi(const std::string& str) +{ + return atoi(str.c_str()); +} + +inline int roundint(double d) +{ + return (int)(d > 0 ? d + 0.5 : d - 0.5); +} + +inline int64_t roundint64(double d) +{ + return (int64_t)(d > 0 ? d + 0.5 : d - 0.5); +} + +inline int64_t abs64(int64_t n) +{ + return (n >= 0 ? n : -n); +} + +template +std::string HexStr(const T itbegin, const T itend, bool fSpaces=false) +{ + std::string rv; + static const char hexmap[16] = { '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; + rv.reserve((itend-itbegin)*3); + for(T it = itbegin; it < itend; ++it) + { + unsigned char val = (unsigned char)(*it); + if(fSpaces && it != itbegin) + rv.push_back(' '); + rv.push_back(hexmap[val>>4]); + rv.push_back(hexmap[val&15]); + } + + return rv; +} + +template +inline std::string HexStr(const T& vch, bool fSpaces=false) +{ + return HexStr(vch.begin(), vch.end(), fSpaces); +} + +template +void PrintHex(const T pbegin, const T pend, const char* pszFormat="%s", bool fSpaces=true) +{ + LogPrintf(pszFormat, HexStr(pbegin, pend, fSpaces).c_str()); +} + +inline void PrintHex(const std::vector& vch, const char* pszFormat="%s", bool fSpaces=true) +{ + LogPrintf(pszFormat, HexStr(vch, fSpaces).c_str()); +} + +inline int64_t GetPerformanceCounter() +{ + int64_t nCounter = 0; +#ifdef WIN32 + QueryPerformanceCounter((LARGE_INTEGER*)&nCounter); +#else + timeval t; + gettimeofday(&t, NULL); + nCounter = (int64_t) t.tv_sec * 1000000 + t.tv_usec; +#endif + return nCounter; +} + +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_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(); +} + +std::string DateTimeStrFormat(const char* pszFormat, int64_t nTime); + +template +void skipspaces(T& it) +{ + while (isspace(*it)) + ++it; +} + +inline bool IsSwitchChar(char c) +{ +#ifdef WIN32 + return c == '-' || c == '/'; +#else + return c == '-'; +#endif +} + +/** + * Return string argument or default value + * + * @param strArg Argument to get (e.g. "-foo") + * @param default (e.g. "1") + * @return command-line argument or default value + */ +std::string GetArg(const std::string& strArg, const std::string& strDefault); + +/** + * Return integer argument or default value + * + * @param strArg Argument to get (e.g. "-foo") + * @param default (e.g. 1) + * @return command-line argument (0 if invalid number) or default value + */ +int64_t GetArg(const std::string& strArg, int64_t nDefault); + +/** + * Return boolean argument or default value + * + * @param strArg Argument to get (e.g. "-foo") + * @param default (true or false) + * @return command-line argument or default value + */ +bool GetBoolArg(const std::string& strArg, bool fDefault); + +/** + * Set an argument if it doesn't already have a value + * + * @param strArg Argument to set (e.g. "-foo") + * @param strValue Value (e.g. "1") + * @return true if argument gets set, false if it already had a value + */ +bool SoftSetArg(const std::string& strArg, const std::string& strValue); + +/** + * Set a boolean argument if it doesn't already have a value + * + * @param strArg Argument to set (e.g. "-foo") + * @param fValue Value (e.g. false) + * @return true if argument gets set, false if it already had a value + */ +bool SoftSetBoolArg(const std::string& strArg, bool fValue); + +/** + * MWC RNG of George Marsaglia + * This is intended to be fast. It has a period of 2^59.3, though the + * least significant 16 bits only have a period of about 2^30.1. + * + * @return random value + */ +extern uint32_t insecure_rand_Rz; +extern uint32_t insecure_rand_Rw; +static inline uint32_t insecure_rand(void) +{ + insecure_rand_Rz = 36969 * (insecure_rand_Rz & 65535) + (insecure_rand_Rz >> 16); + insecure_rand_Rw = 18000 * (insecure_rand_Rw & 65535) + (insecure_rand_Rw >> 16); + return (insecure_rand_Rw << 16) + insecure_rand_Rz; +} + +/** + * Seed insecure_rand using the random pool. + * @param Deterministic Use a determinstic seed + */ +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 + */ +template class CMedianFilter +{ +private: + std::vector vValues; + std::vector vSorted; + unsigned int nSize; +public: + CMedianFilter(unsigned int size, T initial_value): + nSize(size) + { + vValues.reserve(size); + vValues.push_back(initial_value); + vSorted = vValues; + } + + void input(T value) + { + if(vValues.size() == nSize) + { + vValues.erase(vValues.begin()); + } + vValues.push_back(value); + + vSorted.resize(vValues.size()); + std::copy(vValues.begin(), vValues.end(), vSorted.begin()); + std::sort(vSorted.begin(), vSorted.end()); + } + + T median() const + { + int size = vSorted.size(); + assert(size>0); + if(size & 1) // Odd number of elements + { + return vSorted[size/2]; + } + else // Even number of elements + { + return (vSorted[size/2-1] + vSorted[size/2]) / 2; + } + } + + int size() const + { + return vValues.size(); + } + + std::vector sorted () const + { + return vSorted; + } +}; + +#ifdef WIN32 +inline void SetThreadPriority(int nPriority) +{ + SetThreadPriority(GetCurrentThread(), 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 +#define THREAD_PRIORITY_ABOVE_NORMAL (-2) + +inline void SetThreadPriority(int nPriority) +{ + // It's unclear if it's even possible to change thread priorities on Linux, + // but we really and truly need it for the generation threads. +#ifdef PRIO_THREAD + setpriority(PRIO_THREAD, 0, nPriority); +#else + setpriority(PRIO_PROCESS, 0, nPriority); +#endif +} +#endif + +void RenameThread(const char* name); + +inline uint32_t ByteReverse(uint32_t value) +{ + value = ((value & 0xFF00FF00) >> 8) | ((value & 0x00FF00FF) << 8); + return (value<<16) | (value>>16); +} + +// Standard wrapper for do-something-forever thread functions. +// "Forever" really means until the thread is interrupted. +// Use it like: +// new boost::thread(boost::bind(&LoopForever, "dumpaddr", &DumpAddresses, 900000)); +// 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_t msecs) +{ + std::string s = strprintf("pfennig-%s", name); + RenameThread(s.c_str()); + LogPrintf("%s thread start\n", name); + try + { + while (1) + { + MilliSleep(msecs); + func(); + } + } + catch (boost::thread_interrupted) + { + LogPrintf("%s thread stop\n", name); + throw; + } + catch (std::exception& e) { + PrintExceptionContinue(&e, name); + throw; + } + catch (...) { + PrintExceptionContinue(NULL, name); + throw; + } +} +// .. and a wrapper that just calls func once +template void TraceThread(const char* name, Callable func) +{ + std::string s = strprintf("pfennig-%s", name); + RenameThread(s.c_str()); + try + { + LogPrintf("%s thread start\n", name); + func(); + LogPrintf("%s thread exit\n", name); + } + catch (boost::thread_interrupted) + { + LogPrintf("%s thread interrupt\n", name); + throw; + } + catch (std::exception& e) { + PrintExceptionContinue(&e, name); + throw; + } + catch (...) { + PrintExceptionContinue(NULL, name); + throw; + } +} + +#endif diff --git a/src/version.cpp b/src/version.cpp index 6edcce1..3c26ee5 100644 --- a/src/version.cpp +++ b/src/version.cpp @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/version.cpp~ b/src/version.cpp~ new file mode 100644 index 0000000..96aa925 --- /dev/null +++ b/src/version.cpp~ @@ -0,0 +1,72 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include "version.h" + +#include + +// Name of client reported in the 'version' message. Report the same name +// for both pfennigd and pfennig-qt, to make it harder for attackers to +// target servers or GUI users specifically. +const std::string CLIENT_NAME("Pfennig"); + +// Client version number +#define CLIENT_VERSION_SUFFIX "-beta" + + +// The following part of the code determines the CLIENT_BUILD variable. +// Several mechanisms are used for this: +// * first, if HAVE_BUILD_INFO is defined, include build.h, a file that is +// generated by the build environment, possibly containing the output +// of git-describe in a macro called BUILD_DESC +// * secondly, if this is an exported version of the code, GIT_ARCHIVE will +// be defined (automatically using the export-subst git attribute), and +// GIT_COMMIT will contain the commit id. +// * then, three options exist for determining CLIENT_BUILD: +// * if BUILD_DESC is defined, use that literally (output of git-describe) +// * if not, but GIT_COMMIT is defined, use v[maj].[min].[rev].[build]-g[commit] +// * otherwise, use v[maj].[min].[rev].[build]-unk +// finally CLIENT_VERSION_SUFFIX is added + +// First, include build.h if requested +#ifdef HAVE_BUILD_INFO +# include "build.h" +#endif + +// git will put "#define GIT_ARCHIVE 1" on the next line inside archives. +#ifdef GIT_ARCHIVE +# define GIT_COMMIT_ID "$Format:%h$" +# define GIT_COMMIT_DATE "$Format:%cD$" +#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 + +#define BUILD_DESC_FROM_UNKNOWN(maj,min,rev,build) \ + "v" DO_STRINGIZE(maj) "." DO_STRINGIZE(min) "." DO_STRINGIZE(rev) "." DO_STRINGIZE(build) "-unk" + +#ifndef BUILD_DESC +# 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) +# endif +#endif + +#ifndef BUILD_DATE +# ifdef GIT_COMMIT_DATE +# define BUILD_DATE GIT_COMMIT_DATE +# else +# define BUILD_DATE __DATE__ ", " __TIME__ +# endif +#endif + +const std::string CLIENT_BUILD(BUILD_DESC CLIENT_VERSION_SUFFIX); +const std::string CLIENT_DATE(BUILD_DATE); diff --git a/src/version.h b/src/version.h index a80b594..693d8f1 100644 --- a/src/version.h +++ b/src/version.h @@ -1,5 +1,5 @@ // Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef BITMARK_VERSION_H @@ -27,13 +27,13 @@ extern const std::string CLIENT_DATE; // network protocol versioning // -static const int PROTOCOL_VERSION = 70002; +static const int PROTOCOL_VERSION = 80006; // 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; +static const int MIN_PEER_PROTO_VERSION = 80006; // nTime field added to CAddress, starting with this version; // if possible, avoid requesting addresses nodes older than this @@ -41,7 +41,7 @@ static const int CADDR_TIME_VERSION = 31402; // only request blocks from nodes outside this range of versions static const int NOBLKS_VERSION_START = 32000; -static const int NOBLKS_VERSION_END = 32400; +static const int NOBLKS_VERSION_END = 70000; // "mempool" command, enhanced "getdata" behavior starts with this version: static const int MEMPOOL_GD_VERSION = 60002; diff --git a/src/version.h~ b/src/version.h~ new file mode 100644 index 0000000..5761f41 --- /dev/null +++ b/src/version.h~ @@ -0,0 +1,49 @@ +// Original Code: Copyright (c) 2012-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. +#ifndef BITMARK_VERSION_H +#define BITMARK_VERSION_H + +#include "clientversion.h" + +#include + +// +// client versioning +// + +static const int CLIENT_VERSION = + 1000000 * CLIENT_VERSION_MAJOR + + 10000 * CLIENT_VERSION_MINOR + + 100 * CLIENT_VERSION_REVISION + + 1 * CLIENT_VERSION_BUILD; + +extern const std::string CLIENT_NAME; +extern const std::string CLIENT_BUILD; +extern const std::string CLIENT_DATE; + +// +// network protocol versioning +// + +static const int PROTOCOL_VERSION = 80006; + +// 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 = 80006; + +// nTime field added to CAddress, starting with this version; +// if possible, avoid requesting addresses nodes older than this +static const int CADDR_TIME_VERSION = 31402; + +// only request blocks from nodes outside this range of versions +static const int NOBLKS_VERSION_START = 32000; +static const int NOBLKS_VERSION_END = 70000; + +// "mempool" command, enhanced "getdata" behavior starts with this version: +static const int MEMPOOL_GD_VERSION = 60002; + +#endif diff --git a/src/wallet.cpp b/src/wallet.cpp index faaa002..a22f95e 100644 --- a/src/wallet.cpp +++ b/src/wallet.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. @@ -1292,7 +1292,7 @@ bool CWallet::CreateTransaction(const vector >& vecSend, // 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 bitmarks. + // CENT pfennig. if (nFeeRet < CTransaction::nMinTxFee && nChange > 0 && nChange < CENT) { int64_t nMoveToFee = min(nChange, CTransaction::nMinTxFee - nFeeRet); @@ -1304,7 +1304,7 @@ bool CWallet::CreateTransaction(const vector >& vecSend, { // Fill a vout to ourself // TODO: pass in scriptChange instead of reservekey so - // change transaction isn't always pay-to-bitmark-address + // change transaction isn't always pay-to-pfennig-address CScript scriptChange; // coin control: send change to custom address @@ -1484,7 +1484,7 @@ string CWallet::SendMoneyToDestination(const CTxDestination& address, int64_t nV if (nValue + nTransactionFee > GetBalance()) return _("Insufficient funds"); - // Parse Bitmark address + // Parse Pfennig address CScript scriptPubKey; scriptPubKey.SetDestination(address); diff --git a/src/wallet.cpp~ b/src/wallet.cpp~ new file mode 100644 index 0000000..cb8e608 --- /dev/null +++ b/src/wallet.cpp~ @@ -0,0 +1,2100 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 "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; + +////////////////////////////////////////////////////////////////////////////// +// +// mapWallet +// + +struct CompareValueOnly +{ + 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(); + CKey secret; + secret.MakeNewKey(fCompressed); + + // Compressed public keys were introduced in version 0.6.0 + if (fCompressed) + SetMinVersion(FEATURE_COMPRPUBKEY); + + CPubKey pubkey = secret.GetPubKey(); + + // Create new metadata + int64_t nCreationTime = GetTime(); + mapKeyMetadata[pubkey.GetID()] = CKeyMetadata(nCreationTime); + if (!nTimeFirstKey || nCreationTime < nTimeFirstKey) + nTimeFirstKey = nCreationTime; + + if (!AddKeyPubKey(secret, pubkey)) + throw std::runtime_error("CWallet::GenerateNewKey() : AddKey failed"); + return pubkey; +} + +bool CWallet::AddKeyPubKey(const CKey& secret, const CPubKey &pubkey) +{ + AssertLockHeld(cs_wallet); // mapKeyMetadata + if (!CCryptoKeyStore::AddKeyPubKey(secret, pubkey)) + return false; + if (!fFileBacked) + return true; + if (!IsCrypted()) { + return CWalletDB(strWalletFile).WriteKey(pubkey, + secret.GetPrivKey(), + mapKeyMetadata[pubkey.GetID()]); + } + return true; +} + +bool CWallet::AddCryptedKey(const CPubKey &vchPubKey, + const vector &vchCryptedSecret) +{ + if (!CCryptoKeyStore::AddCryptedKey(vchPubKey, vchCryptedSecret)) + return false; + if (!fFileBacked) + return true; + { + LOCK(cs_wallet); + if (pwalletdbEncryption) + return pwalletdbEncryption->WriteCryptedKey(vchPubKey, + vchCryptedSecret, + mapKeyMetadata[vchPubKey.GetID()]); + else + return CWalletDB(strWalletFile).WriteCryptedKey(vchPubKey, + vchCryptedSecret, + mapKeyMetadata[vchPubKey.GetID()]); + } + return false; +} + +bool CWallet::LoadKeyMetadata(const CPubKey &pubkey, const CKeyMetadata &meta) +{ + AssertLockHeld(cs_wallet); // mapKeyMetadata + if (meta.nCreateTime && (!nTimeFirstKey || meta.nCreateTime < nTimeFirstKey)) + nTimeFirstKey = meta.nCreateTime; + + mapKeyMetadata[pubkey.GetID()] = meta; + return true; +} + +bool CWallet::LoadCryptedKey(const CPubKey &vchPubKey, const std::vector &vchCryptedSecret) +{ + return CCryptoKeyStore::AddCryptedKey(vchPubKey, vchCryptedSecret); +} + +bool CWallet::AddCScript(const CScript& redeemScript) +{ + if (!CCryptoKeyStore::AddCScript(redeemScript)) + return false; + if (!fFileBacked) + return true; + return CWalletDB(strWalletFile).WriteCScript(Hash160(redeemScript), redeemScript); +} + +bool CWallet::LoadCScript(const CScript& redeemScript) +{ + /* A sanity check was added in pull #3843 to avoid adding redeemScripts + * that never can be redeemed. However, old wallets may still contain + * these. Do not add them to the wallet and warn. */ + if (redeemScript.size() > MAX_SCRIPT_ELEMENT_SIZE) + { + std::string strAddr = CBitmarkAddress(redeemScript.GetID()).ToString(); + LogPrintf("%s: Warning: This wallet contains a redeemScript of size %i which exceeds maximum size %i thus can never be redeemed. Do not use address %s.\n", + __func__, redeemScript.size(), MAX_SCRIPT_ELEMENT_SIZE, strAddr); + return true; + } + + return CCryptoKeyStore::AddCScript(redeemScript); +} + +bool CWallet::Unlock(const SecureString& strWalletPassphrase) +{ + CCrypter crypter; + CKeyingMaterial vMasterKey; + + { + LOCK(cs_wallet); + BOOST_FOREACH(const MasterKeyMap::value_type& pMasterKey, mapMasterKeys) + { + if(!crypter.SetKeyFromPassphrase(strWalletPassphrase, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod)) + return false; + if (!crypter.Decrypt(pMasterKey.second.vchCryptedKey, vMasterKey)) + continue; // try another master key + if (CCryptoKeyStore::Unlock(vMasterKey)) + return true; + } + } + return false; +} + +bool CWallet::ChangeWalletPassphrase(const SecureString& strOldWalletPassphrase, const SecureString& strNewWalletPassphrase) +{ + bool fWasLocked = IsLocked(); + + { + LOCK(cs_wallet); + Lock(); + + CCrypter crypter; + CKeyingMaterial vMasterKey; + BOOST_FOREACH(MasterKeyMap::value_type& pMasterKey, mapMasterKeys) + { + if(!crypter.SetKeyFromPassphrase(strOldWalletPassphrase, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod)) + return false; + if (!crypter.Decrypt(pMasterKey.second.vchCryptedKey, vMasterKey)) + return false; + if (CCryptoKeyStore::Unlock(vMasterKey)) + { + 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))); + + nStartTime = GetTimeMillis(); + crypter.SetKeyFromPassphrase(strNewWalletPassphrase, pMasterKey.second.vchSalt, pMasterKey.second.nDeriveIterations, pMasterKey.second.nDerivationMethod); + pMasterKey.second.nDeriveIterations = (pMasterKey.second.nDeriveIterations + pMasterKey.second.nDeriveIterations * 100 / ((double)(GetTimeMillis() - nStartTime))) / 2; + + if (pMasterKey.second.nDeriveIterations < 25000) + pMasterKey.second.nDeriveIterations = 25000; + + 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; + if (!crypter.Encrypt(vMasterKey, pMasterKey.second.vchCryptedKey)) + return false; + CWalletDB(strWalletFile).WriteMasterKey(pMasterKey.first, pMasterKey.second); + if (fWasLocked) + Lock(); + return true; + } + } + } + + return false; +} + +void CWallet::SetBestChain(const CBlockLocator& loc) +{ + CWalletDB walletdb(strWalletFile); + walletdb.WriteBestBlock(loc); +} + +bool CWallet::SetMinVersion(enum WalletFeature nVersion, CWalletDB* pwalletdbIn, bool fExplicit) +{ + LOCK(cs_wallet); // nWalletVersion + if (nWalletVersion >= nVersion) + return true; + + // when doing an explicit upgrade, if we pass the max version permitted, upgrade all the way + if (fExplicit && nVersion > nWalletMaxVersion) + nVersion = FEATURE_LATEST; + + nWalletVersion = nVersion; + + if (nVersion > nWalletMaxVersion) + nWalletMaxVersion = nVersion; + + if (fFileBacked) + { + CWalletDB* pwalletdb = pwalletdbIn ? pwalletdbIn : new CWalletDB(strWalletFile); + if (nWalletVersion > 40000) + pwalletdb->WriteMinVersion(nWalletVersion); + if (!pwalletdbIn) + delete pwalletdb; + } + + return true; +} + +bool CWallet::SetMaxVersion(int nVersion) +{ + LOCK(cs_wallet); // nWalletVersion, nWalletMaxVersion + // cannot downgrade below current version + if (nWalletVersion > nVersion) + return false; + + nWalletMaxVersion = 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()) + return false; + + CKeyingMaterial vMasterKey; + RandAddSeedPerfmon(); + + vMasterKey.resize(WALLET_CRYPTO_KEY_SIZE); + RAND_bytes(&vMasterKey[0], WALLET_CRYPTO_KEY_SIZE); + + CMasterKey kMasterKey; + + RandAddSeedPerfmon(); + kMasterKey.vchSalt.resize(WALLET_CRYPTO_SALT_SIZE); + RAND_bytes(&kMasterKey.vchSalt[0], WALLET_CRYPTO_SALT_SIZE); + + CCrypter crypter; + int64_t nStartTime = GetTimeMillis(); + crypter.SetKeyFromPassphrase(strWalletPassphrase, kMasterKey.vchSalt, 25000, kMasterKey.nDerivationMethod); + kMasterKey.nDeriveIterations = 2500000 / ((double)(GetTimeMillis() - nStartTime)); + + nStartTime = GetTimeMillis(); + crypter.SetKeyFromPassphrase(strWalletPassphrase, kMasterKey.vchSalt, kMasterKey.nDeriveIterations, kMasterKey.nDerivationMethod); + kMasterKey.nDeriveIterations = (kMasterKey.nDeriveIterations + kMasterKey.nDeriveIterations * 100 / ((double)(GetTimeMillis() - nStartTime))) / 2; + + if (kMasterKey.nDeriveIterations < 25000) + kMasterKey.nDeriveIterations = 25000; + + LogPrintf("Encrypting Wallet with an nDeriveIterations of %i\n", kMasterKey.nDeriveIterations); + + if (!crypter.SetKeyFromPassphrase(strWalletPassphrase, kMasterKey.vchSalt, kMasterKey.nDeriveIterations, kMasterKey.nDerivationMethod)) + return false; + if (!crypter.Encrypt(vMasterKey, kMasterKey.vchCryptedKey)) + return false; + + { + LOCK(cs_wallet); + mapMasterKeys[++nMasterKeyMaxID] = kMasterKey; + if (fFileBacked) + { + pwalletdbEncryption = new CWalletDB(strWalletFile); + if (!pwalletdbEncryption->TxnBegin()) + return false; + pwalletdbEncryption->WriteMasterKey(nMasterKeyMaxID, kMasterKey); + } + + if (!EncryptKeys(vMasterKey)) + { + if (fFileBacked) + pwalletdbEncryption->TxnAbort(); + exit(1); //We now probably have half of our keys encrypted in memory, and half not...die and let the user reload their unencrypted wallet. + } + + // Encryption was introduced in version 0.4.0 + SetMinVersion(FEATURE_WALLETCRYPT, pwalletdbEncryption, true); + + if (fFileBacked) + { + if (!pwalletdbEncryption->TxnCommit()) + exit(1); //We now have keys encrypted in memory, but no on disk...die to avoid confusion and let the user reload their unencrypted wallet. + + delete pwalletdbEncryption; + pwalletdbEncryption = NULL; + } + + Lock(); + Unlock(strWalletPassphrase); + NewKeyPool(); + Lock(); + + // Need to completely rewrite the wallet file; if we don't, bdb might keep + // bits of the unencrypted private key in slack space in the database file. + CDB::Rewrite(strWalletFile); + + } + NotifyStatusChanged(this); + + return true; +} + +int64_t CWallet::IncOrderPosNext(CWalletDB *pwalletdb) +{ + AssertLockHeld(cs_wallet); // nOrderPosNext + int64_t nRet = nOrderPosNext++; + if (pwalletdb) { + pwalletdb->WriteOrderPosNext(nOrderPosNext); + } else { + CWalletDB(strWalletFile).WriteOrderPosNext(nOrderPosNext); + } + return nRet; +} + +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. + TxItems txOrdered; + + // Note: maintaining indices in the database of (account,time) --> txid and (account, time) --> acentry + // would make this much faster for applications that do this a lot. + for (map::iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) + { + CWalletTx* wtx = &((*it).second); + txOrdered.insert(make_pair(wtx->nOrderPos, TxPair(wtx, (CAccountingEntry*)0))); + } + acentries.clear(); + walletdb.ListAccountCreditDebit(strAccount, acentries); + BOOST_FOREACH(CAccountingEntry& entry, acentries) + { + txOrdered.insert(make_pair(entry.nOrderPos, TxPair((CWalletTx*)0, &entry))); + } + + return txOrdered; +} + +void CWallet::MarkDirty() +{ + { + LOCK(cs_wallet); + BOOST_FOREACH(PAIRTYPE(const uint256, CWalletTx)& item, mapWallet) + item.second.MarkDirty(); + } +} + +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 + pair::iterator, bool> ret = mapWallet.insert(make_pair(hash, wtxIn)); + CWalletTx& wtx = (*ret.first).second; + wtx.BindWallet(this); + bool fInsertedNew = ret.second; + if (fInsertedNew) + { + wtx.nTimeReceived = GetAdjustedTime(); + wtx.nOrderPos = IncOrderPosNext(); + + wtx.nTimeSmart = wtx.nTimeReceived; + if (wtxIn.hashBlock != 0) + { + if (mapBlockIndex.count(wtxIn.hashBlock)) + { + unsigned int latestNow = wtx.nTimeReceived; + unsigned int latestEntry = 0; + { + // Tolerate times up to the last timestamp in the wallet not more than 5 minutes into the future + int64_t latestTolerated = latestNow + 300; + std::list acentries; + TxItems txOrdered = OrderedTxItems(acentries); + for (TxItems::reverse_iterator it = txOrdered.rbegin(); it != txOrdered.rend(); ++it) + { + CWalletTx *const pwtx = (*it).second.first; + if (pwtx == &wtx) + continue; + CAccountingEntry *const pacentry = (*it).second.second; + int64_t nSmartTime; + if (pwtx) + { + nSmartTime = pwtx->nTimeSmart; + if (!nSmartTime) + nSmartTime = pwtx->nTimeReceived; + } + else + nSmartTime = pacentry->nTime; + if (nSmartTime <= latestTolerated) + { + latestEntry = nSmartTime; + if (nSmartTime > latestNow) + latestNow = nSmartTime; + break; + } + } + } + + unsigned int& blocktime = mapBlockIndex[wtxIn.hashBlock]->nTime; + wtx.nTimeSmart = std::max(latestEntry, std::min(blocktime, latestNow)); + } + else + LogPrintf("AddToWallet() : found %s in block %s not in index\n", + wtxIn.GetHash().ToString(), + wtxIn.hashBlock.ToString()); + } + AddToSpends(hash); + } + + bool fUpdated = false; + if (!fInsertedNew) + { + // Merge + if (wtxIn.hashBlock != 0 && wtxIn.hashBlock != wtx.hashBlock) + { + wtx.hashBlock = wtxIn.hashBlock; + fUpdated = true; + } + if (wtxIn.nIndex != -1 && (wtxIn.vMerkleBranch != wtx.vMerkleBranch || wtxIn.nIndex != wtx.nIndex)) + { + wtx.vMerkleBranch = wtxIn.vMerkleBranch; + wtx.nIndex = wtxIn.nIndex; + fUpdated = true; + } + if (wtxIn.fFromMe && wtxIn.fFromMe != wtx.fFromMe) + { + wtx.fFromMe = wtxIn.fFromMe; + fUpdated = true; + } + } + + //// debug print + LogPrintf("AddToWallet %s %s%s\n", wtxIn.GetHash().ToString(), (fInsertedNew ? "new" : ""), (fUpdated ? "update" : "")); + + // Write to disk + if (fInsertedNew || fUpdated) + if (!wtx.WriteToDisk()) + return false; + + // Break debit/credit balance caches: + wtx.MarkDirty(); + + // Notify UI of new or updated transaction + NotifyTransactionChanged(this, hash, fInsertedNew ? CT_NEW : CT_UPDATED); + + // notify an external script when a wallet transaction comes in or is updated + std::string strCmd = GetArg("-walletnotify", ""); + + if ( !strCmd.empty()) + { + boost::replace_all(strCmd, "%s", wtxIn.GetHash().GetHex()); + boost::thread t(runCommand, strCmd); // thread runs free + } + + } + return true; +} + +// 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) +{ + { + AssertLockHeld(cs_wallet); + bool fExisted = mapWallet.count(hash); + if (fExisted && !fUpdate) return false; + if (fExisted || IsMine(tx) || IsFromMe(tx)) + { + CWalletTx wtx(this,tx); + // Get merkle branch if transaction was found in a block + if (pblock) + wtx.SetMerkleBranch(pblock); + return AddToWallet(wtx); + } + } + return false; +} + +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; + { + LOCK(cs_wallet); + if (mapWallet.erase(hash)) + CWalletDB(strWalletFile).EraseTx(hash); + } + return; +} + + +bool CWallet::IsMine(const CTxIn &txin) const +{ + { + LOCK(cs_wallet); + map::const_iterator mi = mapWallet.find(txin.prevout.hash); + if (mi != mapWallet.end()) + { + const CWalletTx& prev = (*mi).second; + if (txin.prevout.n < prev.vout.size()) + if (IsMine(prev.vout[txin.prevout.n])) + return true; + } + } + return false; +} + +int64_t CWallet::GetDebit(const CTxIn &txin) const +{ + { + LOCK(cs_wallet); + map::const_iterator mi = mapWallet.find(txin.prevout.hash); + if (mi != mapWallet.end()) + { + const CWalletTx& prev = (*mi).second; + if (txin.prevout.n < prev.vout.size()) + if (IsMine(prev.vout[txin.prevout.n])) + return prev.vout[txin.prevout.n].nValue; + } + } + return 0; +} + +bool CWallet::IsChange(const CTxOut& txout) const +{ + CTxDestination address; + + // TODO: fix handling of 'change' outputs. The assumption is that any + // payment to a TX_PUBKEYHASH that is mine but isn't in the address book + // is change. That assumption is likely to break when we implement multisignature + // wallets that return change back into a multi-signature-protected address; + // a better way of identifying which outputs are 'the send' and which are + // 'the change' will need to be implemented (maybe extend CWalletTx to remember + // which output, if any, was change). + if (ExtractDestination(txout.scriptPubKey, address) && ::IsMine(*this, address)) + { + LOCK(cs_wallet); + if (!mapAddressBook.count(address)) + return true; + } + return false; +} + +int64_t CWalletTx::GetTxTime() const +{ + int64_t n = nTimeSmart; + return n ? n : nTimeReceived; +} + +int CWalletTx::GetRequestCount() const +{ + // Returns -1 if it wasn't being tracked + int nRequests = -1; + { + LOCK(pwallet->cs_wallet); + if (IsCoinBase()) + { + // Generated block + if (hashBlock != 0) + { + map::const_iterator mi = pwallet->mapRequestCount.find(hashBlock); + if (mi != pwallet->mapRequestCount.end()) + nRequests = (*mi).second; + } + } + else + { + // Did anyone request this transaction? + map::const_iterator mi = pwallet->mapRequestCount.find(GetHash()); + if (mi != pwallet->mapRequestCount.end()) + { + nRequests = (*mi).second; + + // How about the block it's in? + if (nRequests == 0 && hashBlock != 0) + { + map::const_iterator mi = pwallet->mapRequestCount.find(hashBlock); + if (mi != pwallet->mapRequestCount.end()) + nRequests = (*mi).second; + else + nRequests = 1; // If it's in someone else's block it must have got out + } + } + } + } + return nRequests; +} + +void CWalletTx::GetAmounts(list >& listReceived, + list >& listSent, int64_t& nFee, string& strSentAccount) const +{ + nFee = 0; + listReceived.clear(); + listSent.clear(); + strSentAccount = strFromAccount; + + // Compute fee: + int64_t nDebit = GetDebit(); + if (nDebit > 0) // debit>0 means we signed/sent this transaction + { + int64_t nValueOut = GetValueOut(); + nFee = nDebit - nValueOut; + } + + // Sent/received. + BOOST_FOREACH(const CTxOut& txout, vout) + { + 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) + { + // Don't report 'change' txouts + if (pwallet->IsChange(txout)) + continue; + fIsMine = pwallet->IsMine(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 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_t& nReceived, + int64_t& nSent, int64_t& nFee) const +{ + nReceived = nSent = nFee = 0; + + int64_t allFee; + string strSentAccount; + list > listReceived; + list > listSent; + GetAmounts(listReceived, listSent, allFee, strSentAccount); + + if (strAccount == strSentAccount) + { + BOOST_FOREACH(const PAIRTYPE(CTxDestination,int64_t)& s, listSent) + nSent += s.second; + nFee = allFee; + } + { + LOCK(pwallet->cs_wallet); + 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.name == strAccount) + nReceived += r.second; + } + else if (strAccount.empty()) + { + nReceived += r.second; + } + } + } +} + + +bool CWalletTx::WriteToDisk() +{ + return CWalletDB(pwallet->strWalletFile).WriteTx(GetHash(), *this); +} + +// Scan the block chain (starting in pindexStart) for transactions +// from or to us. If fUpdate is true, found transactions that already +// exist in the wallet will be updated. +int CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, bool fUpdate) +{ + int ret = 0; + int64_t nNow = GetTime(); + + CBlockIndex* pindex = pindexStart; + { + 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) + { + 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); + BOOST_FOREACH(CTransaction& tx, block.vtx) + { + if (AddToWalletIfInvolvingMe(tx.GetHash(), tx, &block, fUpdate)) + ret++; + } + 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() +{ + LOCK2(cs_main, cs_wallet); + BOOST_FOREACH(PAIRTYPE(const uint256, CWalletTx)& item, mapWallet) + { + const uint256& wtxid = item.first; + CWalletTx& wtx = item.second; + assert(wtx.GetHash() == wtxid); + + int nDepth = wtx.GetDepthInMainChain(); + + if (!wtx.IsCoinBase() && nDepth < 0) + { + // Try to add to memory pool + LOCK(mempool.cs); + wtx.AcceptToMemoryPool(false); + } + } +} + +void CWalletTx::RelayWalletTransaction() +{ + if (!IsCoinBase()) + { + if (GetDepthInMainChain() == 0) { + uint256 hash = GetHash(); + 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. + if (GetTime() < nNextResend) + return; + 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 + if (nTimeBestReceived < nLastResend) + return; + nLastResend = GetTime(); + + // Rebroadcast any of our txes that aren't in a block yet + LogPrintf("ResendWalletTransactions()\n"); + { + LOCK(cs_wallet); + // Sort them in chronological order + multimap mapSorted; + BOOST_FOREACH(PAIRTYPE(const uint256, CWalletTx)& item, mapWallet) + { + 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_t)wtx.nTimeReceived > 5 * 60) + mapSorted.insert(make_pair(wtx.nTimeReceived, &wtx)); + } + BOOST_FOREACH(PAIRTYPE(const unsigned int, CWalletTx*)& item, mapSorted) + { + CWalletTx& wtx = *item.second; + wtx.RelayWalletTransaction(); + } + } +} + + + + + + +////////////////////////////////////////////////////////////////////////////// +// +// Actions +// + + +int64_t CWallet::GetBalance() const +{ + int64_t nTotal = 0; + { + LOCK2(cs_main, cs_wallet); + for (map::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) + { + const CWalletTx* pcoin = &(*it).second; + if (pcoin->IsTrusted()) + nTotal += pcoin->GetAvailableCredit(); + } + } + + return nTotal; +} + +int64_t CWallet::GetUnconfirmedBalance() const +{ + int64_t nTotal = 0; + { + 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->IsTrusted() && pcoin->GetDepthInMainChain() == 0)) + nTotal += pcoin->GetAvailableCredit(); + } + } + return nTotal; +} + +int64_t CWallet::GetImmatureBalance() const +{ + int64_t nTotal = 0; + { + LOCK2(cs_main, cs_wallet); + for (map::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it) + { + const CWalletTx* pcoin = &(*it).second; + nTotal += pcoin->GetImmatureCredit(); + } + } + return nTotal; +} + +// populate vCoins with vector of spendable COutputs +void CWallet::AvailableCoins(vector& vCoins, bool fOnlyConfirmed, const CCoinControl *coinControl) const +{ + vCoins.clear(); + + { + LOCK2(cs_main, 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->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 (!(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_t nTotalLower, int64_t nTargetValue, + vector& vfBest, int64_t& nBest, int iterations = 1000) +{ + vector vfIncluded; + + vfBest.assign(vValue.size(), true); + nBest = nTotalLower; + + seed_insecure_rand(); + + for (int nRep = 0; nRep < iterations && nBest != nTargetValue; nRep++) + { + vfIncluded.assign(vValue.size(), false); + int64_t nTotal = 0; + bool fReachedTarget = false; + for (int nPass = 0; nPass < 2 && !fReachedTarget; nPass++) + { + for (unsigned int i = 0; i < vValue.size(); i++) + { + //The solver here uses a randomized algorithm, + //the randomness serves no real security purpose but is just + //needed to prevent degenerate behavior and it is important + //that the rng fast. We do not use a constant random sequence, + //because there may be some privacy improvement by making + //the selection random. + if (nPass == 0 ? insecure_rand()&1 : !vfIncluded[i]) + { + nTotal += vValue[i].first; + vfIncluded[i] = true; + if (nTotal >= nTargetValue) + { + fReachedTarget = true; + if (nTotal < nBest) + { + nBest = nTotal; + vfBest = vfIncluded; + } + nTotal -= vValue[i].first; + vfIncluded[i] = false; + } + } + } + } + } +} + +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(); + coinLowestLarger.second.first = NULL; + vector > > vValue; + int64_t nTotalLower = 0; + + random_shuffle(vCoins.begin(), vCoins.end(), GetRandInt); + + BOOST_FOREACH(COutput output, vCoins) + { + const CWalletTx *pcoin = output.tx; + + if (output.nDepth < (pcoin->IsFromMe() ? nConfMine : nConfTheirs)) + continue; + + int i = output.i; + int64_t n = pcoin->vout[i].nValue; + + pair > coin = make_pair(n,make_pair(pcoin, i)); + + if (n == nTargetValue) + { + setCoinsRet.insert(coin.second); + nValueRet += coin.first; + return true; + } + else if (n < nTargetValue + CENT) + { + vValue.push_back(coin); + nTotalLower += n; + } + else if (n < coinLowestLarger.first) + { + coinLowestLarger = coin; + } + } + + if (nTotalLower == nTargetValue) + { + for (unsigned int i = 0; i < vValue.size(); ++i) + { + setCoinsRet.insert(vValue[i].second); + nValueRet += vValue[i].first; + } + return true; + } + + if (nTotalLower < nTargetValue) + { + if (coinLowestLarger.second.first == NULL) + return false; + setCoinsRet.insert(coinLowestLarger.second); + nValueRet += coinLowestLarger.first; + return true; + } + + // Solve subset sum by stochastic approximation + sort(vValue.rbegin(), vValue.rend(), CompareValueOnly()); + vector vfBest; + int64_t nBest; + + ApproximateBestSubset(vValue, nTotalLower, nTargetValue, vfBest, nBest, 1000); + if (nBest != nTargetValue && nTotalLower >= nTargetValue + CENT) + ApproximateBestSubset(vValue, nTotalLower, nTargetValue + CENT, vfBest, nBest, 1000); + + // If we have a bigger coin and (either the stochastic approximation didn't find a good solution, + // or the next bigger coin is closer), return the bigger coin + if (coinLowestLarger.second.first && + ((nBest != nTargetValue && nBest < nTargetValue + CENT) || coinLowestLarger.first <= nBest)) + { + setCoinsRet.insert(coinLowestLarger.second); + nValueRet += coinLowestLarger.first; + } + else { + for (unsigned int i = 0; i < vValue.size(); i++) + if (vfBest[i]) + { + setCoinsRet.insert(vValue[i].second); + nValueRet += vValue[i].first; + } + + LogPrint("selectcoins", "SelectCoins() best subset: "); + for (unsigned int i = 0; i < vValue.size(); i++) + if (vfBest[i]) + LogPrint("selectcoins", "%s ", FormatMoney(vValue[i].first)); + LogPrint("selectcoins", "total %s\n", FormatMoney(nBest)); + } + + return true; +} + +bool CWallet::SelectCoins(int64_t nTargetValue, set >& setCoinsRet, int64_t& nValueRet, const CCoinControl* coinControl) const +{ + vector 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) || + (bSpendZeroConfChange && SelectCoinsMinConf(nTargetValue, 0, 1, vCoins, setCoinsRet, nValueRet))); +} + + + + +bool CWallet::CreateTransaction(const vector >& vecSend, + CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet, std::string& strFailReason, const CCoinControl* coinControl) +{ + int64_t nValue = 0; + BOOST_FOREACH (const PAIRTYPE(CScript, int64_t)& s, vecSend) + { + if (nValue < 0) + { + strFailReason = _("Transaction amounts must be positive"); + return false; + } + nValue += s.second; + } + if (vecSend.empty() || nValue < 0) + { + strFailReason = _("Transaction amounts must be positive"); + return false; + } + + wtxNew.BindWallet(this); + + { + LOCK2(cs_main, cs_wallet); + { + nFeeRet = nTransactionFee; + while (true) + { + wtxNew.vin.clear(); + wtxNew.vout.clear(); + wtxNew.fFromMe = true; + + int64_t nTotalValue = nValue + nFeeRet; + double dPriority = 0; + // vouts to the payees + BOOST_FOREACH (const PAIRTYPE(CScript, int64_t)& s, vecSend) + { + CTxOut txout(s.second, s.first); + if (txout.IsDust(CTransaction::nMinRelayTxFee)) + { + strFailReason = _("Transaction amount too small"); + return false; + } + wtxNew.vout.push_back(txout); + } + + // Choose coins to use + set > setCoins; + 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_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_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 pfennig. + if (nFeeRet < CTransaction::nMinTxFee && nChange > 0 && nChange < CENT) + { + int64_t nMoveToFee = min(nChange, CTransaction::nMinTxFee - nFeeRet); + nChange -= nMoveToFee; + nFeeRet += nMoveToFee; + } + + if (nChange > 0) + { + // Fill a vout to ourself + // TODO: pass in scriptChange instead of reservekey so + // change transaction isn't always pay-to-pfennig-address + CScript scriptChange; + + // 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); + + // Never create dust outputs; if we would, just + // add the dust to the fee. + if (newTxOut.IsDust(CTransaction::nMinRelayTxFee)) + { + nFeeRet += nChange; + reservekey.ReturnKey(); + } + else + { + // Insert change txn at random position: + vector::iterator position = wtxNew.vout.begin()+GetRandInt(wtxNew.vout.size()+1); + wtxNew.vout.insert(position, newTxOut); + } + } + else + reservekey.ReturnKey(); + + // Fill vin + BOOST_FOREACH(const PAIRTYPE(const CWalletTx*,unsigned int)& coin, setCoins) + wtxNew.vin.push_back(CTxIn(coin.first->GetHash(),coin.second)); + + // Sign + int nIn = 0; + BOOST_FOREACH(const PAIRTYPE(const CWalletTx*,unsigned int)& coin, setCoins) + if (!SignSignature(*this, *coin.first, wtxNew, nIn++)) + { + strFailReason = _("Signing transaction failed"); + return false; + } + + // Limit size + unsigned int nBytes = ::GetSerializeSize(*(CTransaction*)&wtxNew, SER_NETWORK, PROTOCOL_VERSION); + if (nBytes >= MAX_STANDARD_TX_SIZE) + { + strFailReason = _("Transaction too large"); + return false; + } + dPriority = wtxNew.ComputePriority(dPriority, nBytes); + + // Check that enough fee is included + int64_t nPayFee = nTransactionFee * (1 + (int64_t)nBytes / 1000); + bool fAllowFree = AllowFree(dPriority); + int64_t nMinFee = GetMinFee(wtxNew, nBytes, fAllowFree, GMF_SEND); + if (nFeeRet < max(nPayFee, nMinFee)) + { + nFeeRet = max(nPayFee, nMinFee); + continue; + } + + wtxNew.fTimeReceivedIsTxTime = true; + + break; + } + } + } + return true; +} + +bool CWallet::CreateTransaction(CScript scriptPubKey, int64_t nValue, + CWalletTx& wtxNew, CReserveKey& reservekey, int64_t& nFeeRet, std::string& strFailReason, const CCoinControl* coinControl) +{ + vector< pair > vecSend; + vecSend.push_back(make_pair(scriptPubKey, nValue)); + return CreateTransaction(vecSend, wtxNew, reservekey, nFeeRet, strFailReason, coinControl); +} + +// Call after CreateTransaction unless you want to abort +bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey) +{ + { + LOCK2(cs_main, cs_wallet); + 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 + // maybe makes sense; please don't do it anywhere else. + CWalletDB* pwalletdb = fFileBacked ? new CWalletDB(strWalletFile,"r") : NULL; + + // Take key pair from key pool so it won't be used again + reservekey.KeepKey(); + + // Add tx to wallet, because if it has change it's also ours, + // otherwise just for transaction history. + AddToWallet(wtxNew); + + // Notify that old coins are spent + set setCoins; + BOOST_FOREACH(const CTxIn& txin, wtxNew.vin) + { + CWalletTx &coin = mapWallet[txin.prevout.hash]; + coin.BindWallet(this); + NotifyTransactionChanged(this, coin.GetHash(), CT_UPDATED); + } + + if (fFileBacked) + delete pwalletdb; + } + + // Track how many getdata requests our transaction gets + mapRequestCount[wtxNew.GetHash()] = 0; + + // Broadcast + if (!wtxNew.AcceptToMemoryPool(false)) + { + // This must not fail. The transaction has already been signed and recorded. + LogPrintf("CommitTransaction() : Error: Transaction not valid"); + return false; + } + wtxNew.RelayWalletTransaction(); + } + return true; +} + + + + +string CWallet::SendMoney(CScript scriptPubKey, int64_t nValue, CWalletTx& wtxNew) +{ + CReserveKey reservekey(this); + int64_t nFeeRequired; + + if (IsLocked()) + { + string strError = _("Error: Wallet locked, unable to create transaction!"); + 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)); + LogPrintf("SendMoney() : %s\n", strError); + return strError; + } + + 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."); + + return ""; +} + + + +string CWallet::SendMoneyToDestination(const CTxDestination& address, int64_t nValue, CWalletTx& wtxNew) +{ + // Check amount + if (nValue <= 0) + return _("Invalid amount"); + if (nValue + nTransactionFee > GetBalance()) + return _("Insufficient funds"); + + // Parse Pfennig address + CScript scriptPubKey; + scriptPubKey.SetDestination(address); + + return SendMoney(scriptPubKey, nValue, wtxNew); +} + + + + +DBErrors CWallet::LoadWallet(bool& fFirstRunRet) +{ + if (!fFileBacked) + return DB_LOAD_OK; + fFirstRunRet = false; + DBErrors nLoadWalletRet = CWalletDB(strWalletFile,"cr+").LoadWallet(this); + if (nLoadWalletRet == 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 (nLoadWalletRet != DB_LOAD_OK) + return nLoadWalletRet; + fFirstRunRet = !vchDefaultKey.IsValid(); + + uiInterface.LoadWallet(this); + + return DB_LOAD_OK; +} + + +DBErrors CWallet::ZapWalletTx() +{ + 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(CBitmarkAddress(address).ToString(), strPurpose)) + return false; + return CWalletDB(strWalletFile).WriteName(CBitmarkAddress(address).ToString(), strName); +} + +bool CWallet::DelAddressBook(const CTxDestination& address) +{ + { + LOCK(cs_wallet); // mapAddressBook + + if(fFileBacked) + { + // Delete destdata tuples associated with address + std::string strAddress = CBitmarkAddress(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(CBitmarkAddress(address).ToString()); + return CWalletDB(strWalletFile).EraseName(CBitmarkAddress(address).ToString()); +} + +bool CWallet::SetDefaultKey(const CPubKey &vchPubKey) +{ + if (fFileBacked) + { + if (!CWalletDB(strWalletFile).WriteDefaultKey(vchPubKey)) + return false; + } + vchDefaultKey = vchPubKey; + return true; +} + +// +// Mark old keypool keys as used, +// and generate all new keys +// +bool CWallet::NewKeyPool() +{ + { + LOCK(cs_wallet); + CWalletDB walletdb(strWalletFile); + BOOST_FOREACH(int64_t nIndex, setKeyPool) + walletdb.ErasePool(nIndex); + setKeyPool.clear(); + + if (IsLocked()) + return false; + + int64_t nKeys = max(GetArg("-keypool", 100), (int64_t)0); + for (int i = 0; i < nKeys; i++) + { + int64_t nIndex = i+1; + walletdb.WritePool(nIndex, CKeyPool(GenerateNewKey())); + setKeyPool.insert(nIndex); + } + LogPrintf("CWallet::NewKeyPool wrote %d new keys\n", nKeys); + } + return true; +} + +bool CWallet::TopUpKeyPool(unsigned int kpSize) +{ + { + LOCK(cs_wallet); + + if (IsLocked()) + return false; + + CWalletDB walletdb(strWalletFile); + + // Top up key pool + unsigned int nTargetSize; + if (kpSize > 0) + nTargetSize = kpSize; + else + nTargetSize = max(GetArg("-keypool", 100), (int64_t) 0); + + while (setKeyPool.size() < (nTargetSize + 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); + LogPrintf("keypool added key %d, size=%u\n", nEnd, setKeyPool.size()); + } + } + return true; +} + +void CWallet::ReserveKeyFromKeyPool(int64_t& nIndex, CKeyPool& keypool) +{ + nIndex = -1; + keypool.vchPubKey = CPubKey(); + { + LOCK(cs_wallet); + + if (!IsLocked()) + TopUpKeyPool(); + + // Get the oldest key + if(setKeyPool.empty()) + return; + + CWalletDB walletdb(strWalletFile); + + nIndex = *(setKeyPool.begin()); + setKeyPool.erase(setKeyPool.begin()); + if (!walletdb.ReadPool(nIndex, keypool)) + throw runtime_error("ReserveKeyFromKeyPool() : read failed"); + if (!HaveKey(keypool.vchPubKey.GetID())) + throw runtime_error("ReserveKeyFromKeyPool() : unknown key in key pool"); + assert(keypool.vchPubKey.IsValid()); + LogPrintf("keypool reserve %d\n", nIndex); + } +} + +int64_t CWallet::AddReserveKey(const CKeyPool& keypool) +{ + { + LOCK2(cs_main, cs_wallet); + CWalletDB walletdb(strWalletFile); + + int64_t nIndex = 1 + *(--setKeyPool.end()); + if (!walletdb.WritePool(nIndex, keypool)) + throw runtime_error("AddReserveKey() : writing added key failed"); + setKeyPool.insert(nIndex); + return nIndex; + } + return -1; +} + +void CWallet::KeepKey(int64_t nIndex) +{ + // Remove from key pool + if (fFileBacked) + { + CWalletDB walletdb(strWalletFile); + walletdb.ErasePool(nIndex); + } + LogPrintf("keypool keep %d\n", nIndex); +} + +void CWallet::ReturnKey(int64_t nIndex) +{ + // Return to key pool + { + LOCK(cs_wallet); + setKeyPool.insert(nIndex); + } + LogPrintf("keypool return %d\n", nIndex); +} + +bool CWallet::GetKeyFromPool(CPubKey& result) +{ + int64_t nIndex = 0; + CKeyPool keypool; + { + LOCK(cs_wallet); + ReserveKeyFromKeyPool(nIndex, keypool); + if (nIndex == -1) + { + if (IsLocked()) return false; + result = GenerateNewKey(); + return true; + } + KeepKey(nIndex); + result = keypool.vchPubKey; + } + return true; +} + +int64_t CWallet::GetOldestKeyPoolTime() +{ + int64_t nIndex = 0; + CKeyPool keypool; + ReserveKeyFromKeyPool(nIndex, keypool); + if (nIndex == -1) + return GetTime(); + ReturnKey(nIndex); + return keypool.nTime; +} + +std::map CWallet::GetAddressBalances() +{ + map balances; + + { + LOCK(cs_wallet); + BOOST_FOREACH(PAIRTYPE(uint256, CWalletTx) walletEntry, mapWallet) + { + CWalletTx *pcoin = &walletEntry.second; + + if (!IsFinalTx(*pcoin) || !pcoin->IsTrusted()) + continue; + + if (pcoin->IsCoinBase() && pcoin->GetBlocksToMaturity() > 0) + continue; + + int nDepth = pcoin->GetDepthInMainChain(); + if (nDepth < (pcoin->IsFromMe() ? 0 : 1)) + continue; + + for (unsigned int i = 0; i < pcoin->vout.size(); i++) + { + CTxDestination addr; + if (!IsMine(pcoin->vout[i])) + continue; + if(!ExtractDestination(pcoin->vout[i].scriptPubKey, addr)) + continue; + + int64_t n = IsSpent(walletEntry.first, i) ? 0 : pcoin->vout[i].nValue; + + if (!balances.count(addr)) + balances[addr] = 0; + balances[addr] += n; + } + } + } + + return balances; +} + +set< set > CWallet::GetAddressGroupings() +{ + AssertLockHeld(cs_wallet); // mapWallet + set< set > groupings; + set grouping; + + BOOST_FOREACH(PAIRTYPE(uint256, CWalletTx) walletEntry, mapWallet) + { + CWalletTx *pcoin = &walletEntry.second; + + if (pcoin->vin.size() > 0) + { + bool any_mine = false; + // group all input addresses with each other + BOOST_FOREACH(CTxIn txin, pcoin->vin) + { + CTxDestination address; + if(!IsMine(txin)) /* If this input isn't mine, ignore it */ + continue; + if(!ExtractDestination(mapWallet[txin.prevout.hash].vout[txin.prevout.n].scriptPubKey, address)) + continue; + grouping.insert(address); + any_mine = true; + } + + // group change with input addresses + if (any_mine) + { + BOOST_FOREACH(CTxOut txout, pcoin->vout) + if (IsChange(txout)) + { + CTxDestination txoutAddr; + if(!ExtractDestination(txout.scriptPubKey, txoutAddr)) + continue; + grouping.insert(txoutAddr); + } + } + if (grouping.size() > 0) + { + groupings.insert(grouping); + grouping.clear(); + } + } + + // group lone addrs by themselves + for (unsigned int i = 0; i < pcoin->vout.size(); i++) + if (IsMine(pcoin->vout[i])) + { + CTxDestination address; + if(!ExtractDestination(pcoin->vout[i].scriptPubKey, address)) + continue; + grouping.insert(address); + groupings.insert(grouping); + grouping.clear(); + } + } + + set< set* > uniqueGroupings; // a set of pointers to groups of addresses + map< CTxDestination, set* > setmap; // map addresses to the unique group containing it + BOOST_FOREACH(set grouping, groupings) + { + // make a set of all the groups hit by this new group + set< set* > hits; + map< CTxDestination, set* >::iterator it; + BOOST_FOREACH(CTxDestination address, grouping) + if ((it = setmap.find(address)) != setmap.end()) + hits.insert((*it).second); + + // merge all hit groups into a new single group and delete old groups + set* merged = new set(grouping); + BOOST_FOREACH(set* hit, hits) + { + merged->insert(hit->begin(), hit->end()); + uniqueGroupings.erase(hit); + delete hit; + } + uniqueGroupings.insert(merged); + + // update setmap + BOOST_FOREACH(CTxDestination element, *merged) + setmap[element] = merged; + } + + set< set > ret; + BOOST_FOREACH(set* uniqueGrouping, uniqueGroupings) + { + ret.insert(*uniqueGrouping); + delete uniqueGrouping; + } + + 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) + { + CKeyPool keypool; + pwallet->ReserveKeyFromKeyPool(nIndex, keypool); + if (nIndex != -1) + vchPubKey = keypool.vchPubKey; + else { + if (pwallet->vchDefaultKey.IsValid()) { + LogPrintf("CReserveKey::GetReservedKey(): Warning: Using default key instead of a new key, top up your keypool!"); + vchPubKey = pwallet->vchDefaultKey; + } else + return false; + } + } + assert(vchPubKey.IsValid()); + pubkey = vchPubKey; + return true; +} + +void CReserveKey::KeepKey() +{ + if (nIndex != -1) + pwallet->KeepKey(nIndex); + nIndex = -1; + vchPubKey = CPubKey(); +} + +void CReserveKey::ReturnKey() +{ + if (nIndex != -1) + pwallet->ReturnKey(nIndex); + nIndex = -1; + vchPubKey = CPubKey(); +} + +void CWallet::GetAllReserveKeys(set& setAddress) const +{ + setAddress.clear(); + + CWalletDB walletdb(strWalletFile); + + LOCK2(cs_main, cs_wallet); + BOOST_FOREACH(const int64_t& id, setKeyPool) + { + CKeyPool keypool; + if (!walletdb.ReadPool(id, keypool)) + throw runtime_error("GetAllReserveKeyHashes() : read failed"); + assert(keypool.vchPubKey.IsValid()); + CKeyID keyID = keypool.vchPubKey.GetID(); + if (!HaveKey(keyID)) + throw runtime_error("GetAllReserveKeyHashes() : unknown key in key pool"); + setAddress.insert(keyID); + } +} + +void CWallet::UpdatedTransaction(const uint256 &hashTx) +{ + { + LOCK(cs_wallet); + // Only notify UI if this transaction is in this wallet + map::const_iterator mi = mapWallet.find(hashTx); + if (mi != mapWallet.end()) + NotifyTransactionChanged(this, hashTx, CT_UPDATED); + } +} + +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); +} + +void CWallet::ListLockedCoins(std::vector& vOutpts) +{ + AssertLockHeld(cs_wallet); // setLockedCoins + for (std::set::iterator it = setLockedCoins.begin(); + it != setLockedCoins.end(); it++) { + COutPoint outpt = (*it); + vOutpts.push_back(outpt); + } +} + +void CWallet::GetKeyBirthTimes(std::map &mapKeyBirth) const { + AssertLockHeld(cs_wallet); // mapKeyMetadata + mapKeyBirth.clear(); + + // get birth times for keys with metadata + for (std::map::const_iterator it = mapKeyMetadata.begin(); it != mapKeyMetadata.end(); it++) + if (it->second.nCreateTime) + mapKeyBirth[it->first] = it->second.nCreateTime; + + // map in which we'll infer heights of other keys + 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); + BOOST_FOREACH(const CKeyID &keyid, setKeys) { + if (mapKeyBirth.count(keyid) == 0) + mapKeyFirstBlock[keyid] = pindexMax; + } + setKeys.clear(); + + // if there are no such keys, we're done + if (mapKeyFirstBlock.empty()) + return; + + // find first block that affects those keys, if there are any left + std::vector vAffected; + for (std::map::const_iterator it = mapWallet.begin(); it != mapWallet.end(); it++) { + // iterate over all wallet transactions... + const CWalletTx &wtx = (*it).second; + std::map::const_iterator blit = mapBlockIndex.find(wtx.hashBlock); + 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) { + // iterate over all their outputs + ::ExtractAffectedKeys(*this, txout.scriptPubKey, vAffected); + BOOST_FOREACH(const CKeyID &keyid, vAffected) { + // ... and all their affected keys + std::map::iterator rit = mapKeyFirstBlock.find(keyid); + if (rit != mapKeyFirstBlock.end() && nHeight < rit->second->nHeight) + rit->second = blit->second; + } + vAffected.clear(); + } + } + } + + // Extract block timestamps for those keys + 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(CBitmarkAddress(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(CBitmarkAddress(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 1026cbc..c11aabd 100644 --- a/src/wallet.h +++ b/src/wallet.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef BITMARK_WALLET_H diff --git a/src/wallet.h~ b/src/wallet.h~ new file mode 100644 index 0000000..b5f119a --- /dev/null +++ b/src/wallet.h~ @@ -0,0 +1,875 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. +#ifndef BITMARK_WALLET_H +#define BITMARK_WALLET_H + +#include "core.h" +#include "crypter.h" +#include "key.h" +#include "keystore.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 CCoinControl; +class COutput; +class CReserveKey; +class CScript; +class CWalletTx; + +/** (client) version numbers for particular wallet features */ +enum WalletFeature +{ + FEATURE_BASE = 10500, // the earliest version new wallets supports (only useful for getinfo's clientversion output) + + FEATURE_WALLETCRYPT = 40000, // wallet encryption + FEATURE_COMPRPUBKEY = 60000, // compressed public keys + + FEATURE_LATEST = 60000 +}; + + +/** A key pool entry */ +class CKeyPool +{ +public: + int64_t nTime; + CPubKey vchPubKey; + + CKeyPool() + { + nTime = GetTime(); + } + + CKeyPool(const CPubKey& vchPubKeyIn) + { + nTime = GetTime(); + vchPubKey = vchPubKeyIn; + } + + IMPLEMENT_SERIALIZE + ( + if (!(nType & SER_GETHASH)) + READWRITE(nVersion); + READWRITE(nTime); + READWRITE(vchPubKey); + ) +}; + +/** 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, public CWalletInterface +{ +private: + bool SelectCoins(int64_t nTargetValue, std::set >& setCoinsRet, int64_t& nValueRet, const CCoinControl *coinControl = NULL) const; + + CWalletDB *pwalletdbEncryption; + + // the current wallet version: clients below this version are not able to load the wallet + int nWalletVersion; + + // 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::map mapKeyMetadata; + + typedef std::map MasterKeyMap; + MasterKeyMap mapMasterKeys; + unsigned int nMasterKeyMaxID; + + CWallet() + { + SetNull(); + } + CWallet(std::string strWalletFileIn) + { + SetNull(); + + strWalletFile = strWalletFileIn; + fFileBacked = true; + } + void SetNull() + { + nWalletVersion = FEATURE_BASE; + nWalletMaxVersion = FEATURE_BASE; + fFileBacked = false; + nMasterKeyMaxID = 0; + pwalletdbEncryption = NULL; + nOrderPosNext = 0; + nNextResend = 0; + nLastResend = 0; + nTimeFirstKey = 0; + } + + std::map mapWallet; + + int64_t nOrderPosNext; + std::map mapRequestCount; + + std::map mapAddressBook; + + CPubKey vchDefaultKey; + + std::set setLockedCoins; + + 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) { 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; + + bool IsLockedCoin(uint256 hash, unsigned int n) const; + void LockCoin(COutPoint& output); + void UnlockCoin(COutPoint& output); + void UnlockAllCoins(); + void ListLockedCoins(std::vector& vOutpts); + + // keystore implementation + // Generate a new key + CPubKey GenerateNewKey(); + // Adds a key to the store, and saves it to disk. + bool AddKeyPubKey(const CKey& key, const CPubKey &pubkey); + // Adds a key to the store, without saving it to disk (used by LoadWallet) + bool LoadKey(const CKey& key, const CPubKey &pubkey) { return CCryptoKeyStore::AddKeyPubKey(key, pubkey); } + // Load metadata (used by LoadWallet) + bool LoadKeyMetadata(const CPubKey &pubkey, const CKeyMetadata &metadata); + + 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); + // Adds an encrypted key to the store, without saving it to disk (used by LoadWallet) + bool LoadCryptedKey(const CPubKey &vchPubKey, const std::vector &vchCryptedSecret); + bool AddCScript(const CScript& redeemScript); + bool LoadCScript(const CScript& 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; + + /** Increment the next transaction order id + @return next transaction order id + */ + int64_t IncOrderPosNext(CWalletDB *pwalletdb = NULL); + + typedef std::pair TxPair; + typedef std::multimap TxItems; + + /** Get the wallet's activity log + @return multimap of ordered transactions and accounting entries + @warning Returned pointers are *only* valid within the scope of passed acentries + */ + TxItems OrderedTxItems(std::list& acentries, std::string strAccount = ""); + + void MarkDirty(); + 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_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_t nValue, CWalletTx& wtxNew); + std::string SendMoneyToDestination(const CTxDestination &address, int64_t nValue, CWalletTx& wtxNew); + + bool NewKeyPool(); + 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::set GetAccountAddresses(std::string strAccount) const; + + bool IsMine(const CTxIn& txin) const; + int64_t GetDebit(const CTxIn& txin) const; + bool IsMine(const CTxOut& txout) const + { + return ::IsMine(*this, txout.scriptPubKey); + } + 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_t GetChange(const CTxOut& txout) const + { + if (!MoneyRange(txout.nValue)) + throw std::runtime_error("CWallet::GetChange() : value out of range"); + return (IsChange(txout) ? txout.nValue : 0); + } + bool IsMine(const CTransaction& tx) const + { + BOOST_FOREACH(const CTxOut& txout, tx.vout) + if (IsMine(txout)) + return true; + return false; + } + bool IsFromMe(const CTransaction& tx) const + { + return (GetDebit(tx) > 0); + } + int64_t GetDebit(const CTransaction& tx) const + { + int64_t nDebit = 0; + BOOST_FOREACH(const CTxIn& txin, tx.vin) + { + nDebit += GetDebit(txin); + if (!MoneyRange(nDebit)) + throw std::runtime_error("CWallet::GetDebit() : value out of range"); + } + return nDebit; + } + int64_t GetCredit(const CTransaction& tx) const + { + int64_t nCredit = 0; + BOOST_FOREACH(const CTxOut& txout, tx.vout) + { + nCredit += GetCredit(txout); + if (!MoneyRange(nCredit)) + throw std::runtime_error("CWallet::GetCredit() : value out of range"); + } + return nCredit; + } + int64_t GetChange(const CTransaction& tx) const + { + int64_t nChange = 0; + BOOST_FOREACH(const CTxOut& txout, tx.vout) + { + nChange += GetChange(txout); + if (!MoneyRange(nChange)) + throw std::runtime_error("CWallet::GetChange() : value out of range"); + } + return nChange; + } + void SetBestChain(const CBlockLocator& loc); + + DBErrors LoadWallet(bool& fFirstRunRet); + DBErrors ZapWalletTx(); + + bool SetAddressBook(const CTxDestination& address, const std::string& strName, const std::string& purpose); + + bool DelAddressBook(const CTxDestination& address); + + void UpdatedTransaction(const uint256 &hashTx); + + void Inventory(const uint256 &hash) + { + { + LOCK(cs_wallet); + std::map::iterator mi = mapRequestCount.find(hash); + if (mi != mapRequestCount.end()) + (*mi).second++; + } + } + + unsigned int GetKeyPoolSize() + { + AssertLockHeld(cs_wallet); // setKeyPool + return setKeyPool.size(); + } + + bool SetDefaultKey(const CPubKey &vchPubKey); + + // signify that a particular wallet feature is now used. this may change nWalletVersion and nWalletMaxVersion if those are lower + bool SetMinVersion(enum WalletFeature, CWalletDB* pwalletdbIn = NULL, bool fExplicit = false); + + // change which version we're allowed to upgrade to (note that this does not immediately imply upgrading to that format) + bool SetMaxVersion(int nVersion); + + // get the current wallet format (the oldest client version guaranteed to understand this wallet) + 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; + + /** Wallet transaction added, removed or updated. + * @note called with lock cs_wallet held. + */ + boost::signals2::signal NotifyTransactionChanged; + + /** Show progress e.g. for rescan */ + boost::signals2::signal ShowProgress; +}; + +/** A key allocated from the key pool. */ +class CReserveKey +{ +protected: + CWallet* pwallet; + int64_t nIndex; + CPubKey vchPubKey; +public: + CReserveKey(CWallet* pwalletIn) + { + nIndex = -1; + pwallet = pwalletIn; + } + + ~CReserveKey() + { + ReturnKey(); + } + + void ReturnKey(); + bool GetReservedKey(CPubKey &pubkey); + void KeepKey(); +}; + + +typedef std::map mapValue_t; + + +static void ReadOrderPos(int64_t& nOrderPos, mapValue_t& mapValue) +{ + if (!mapValue.count("n")) + { + nOrderPos = -1; // TODO: calculate elsewhere + return; + } + nOrderPos = atoi64(mapValue["n"].c_str()); +} + + +static void WriteOrderPos(const int64_t& nOrderPos, mapValue_t& mapValue) +{ + if (nOrderPos == -1) + return; + mapValue["n"] = i64tostr(nOrderPos); +} + + +/** A transaction with a bunch of additional info that only the owner cares about. + * It includes any unrecorded transactions needed to link it back to the block chain. + */ +class CWalletTx : public CMerkleTx +{ +private: + const CWallet* pwallet; + +public: + mapValue_t mapValue; + std::vector > vOrderForm; + unsigned int fTimeReceivedIsTxTime; + unsigned int nTimeReceived; // time received by this node + unsigned int nTimeSmart; + char fFromMe; + std::string strFromAccount; + int64_t nOrderPos; // position in ordered transaction list + + // memory only + mutable bool fDebitCached; + mutable bool fCreditCached; + mutable bool fImmatureCreditCached; + mutable bool fAvailableCreditCached; + mutable bool fChangeCached; + mutable int64_t nDebitCached; + mutable int64_t nCreditCached; + mutable int64_t nImmatureCreditCached; + mutable int64_t nAvailableCreditCached; + mutable int64_t nChangeCached; + + CWalletTx() + { + Init(NULL); + } + + CWalletTx(const CWallet* pwalletIn) + { + Init(pwalletIn); + } + + CWalletTx(const CWallet* pwalletIn, const CMerkleTx& txIn) : CMerkleTx(txIn) + { + Init(pwalletIn); + } + + CWalletTx(const CWallet* pwalletIn, const CTransaction& txIn) : CMerkleTx(txIn) + { + Init(pwalletIn); + } + + void Init(const CWallet* pwalletIn) + { + pwallet = pwalletIn; + mapValue.clear(); + vOrderForm.clear(); + fTimeReceivedIsTxTime = false; + nTimeReceived = 0; + nTimeSmart = 0; + fFromMe = false; + strFromAccount.clear(); + fDebitCached = false; + fCreditCached = false; + fImmatureCreditCached = false; + fAvailableCreditCached = false; + fChangeCached = false; + nDebitCached = 0; + nCreditCached = 0; + nImmatureCreditCached = 0; + nAvailableCreditCached = 0; + nChangeCached = 0; + nOrderPos = -1; + } + + IMPLEMENT_SERIALIZE + ( + CWalletTx* pthis = const_cast(this); + if (fRead) + pthis->Init(NULL); + char fSpent = false; + + if (!fRead) + { + pthis->mapValue["fromaccount"] = pthis->strFromAccount; + + WriteOrderPos(pthis->nOrderPos, pthis->mapValue); + + if (nTimeSmart) + pthis->mapValue["timesmart"] = strprintf("%u", nTimeSmart); + } + + nSerSize += SerReadWrite(s, *(CMerkleTx*)this, nType, nVersion,ser_action); + std::vector vUnused; // Used to be vtxPrev + READWRITE(vUnused); + READWRITE(mapValue); + READWRITE(vOrderForm); + READWRITE(fTimeReceivedIsTxTime); + READWRITE(nTimeReceived); + READWRITE(fFromMe); + READWRITE(fSpent); + + if (fRead) + { + pthis->strFromAccount = pthis->mapValue["fromaccount"]; + + ReadOrderPos(pthis->nOrderPos, pthis->mapValue); + + pthis->nTimeSmart = mapValue.count("timesmart") ? (unsigned int)atoi64(pthis->mapValue["timesmart"]) : 0; + } + + pthis->mapValue.erase("fromaccount"); + pthis->mapValue.erase("version"); + pthis->mapValue.erase("spent"); + pthis->mapValue.erase("n"); + pthis->mapValue.erase("timesmart"); + ) + + // make sure balances are recalculated + void MarkDirty() + { + fCreditCached = false; + fAvailableCreditCached = false; + fDebitCached = false; + fChangeCached = false; + } + + void BindWallet(CWallet *pwalletIn) + { + pwallet = pwalletIn; + MarkDirty(); + } + + int64_t GetDebit() const + { + if (vin.empty()) + return 0; + if (fDebitCached) + return nDebitCached; + nDebitCached = pwallet->GetDebit(*this); + fDebitCached = true; + return nDebitCached; + } + + 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) + return 0; + + // GetBalance can assume transactions in mapWallet won't change + if (fUseCache && fCreditCached) + return nCreditCached; + nCreditCached = pwallet->GetCredit(*this); + fCreditCached = true; + return nCreditCached; + } + + int64_t GetImmatureCredit(bool fUseCache=true) const + { + if (IsCoinBase() && GetBlocksToMaturity() > 0 && IsInMainChain()) + { + if (fUseCache && fImmatureCreditCached) + return nImmatureCreditCached; + nImmatureCreditCached = pwallet->GetCredit(*this); + fImmatureCreditCached = true; + return nImmatureCreditCached; + } + + return 0; + } + + 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; + + if (fUseCache && fAvailableCreditCached) + return nAvailableCreditCached; + + int64_t nCredit = 0; + uint256 hashTx = GetHash(); + for (unsigned int i = 0; i < vout.size(); i++) + { + if (!pwallet->IsSpent(hashTx, i)) + { + const CTxOut &txout = vout[i]; + nCredit += pwallet->GetCredit(txout); + if (!MoneyRange(nCredit)) + throw std::runtime_error("CWalletTx::GetAvailableCredit() : value out of range"); + } + } + + nAvailableCreditCached = nCredit; + fAvailableCreditCached = true; + return nCredit; + } + + + int64_t GetChange() const + { + if (fChangeCached) + return nChangeCached; + nChangeCached = pwallet->GetChange(*this); + fChangeCached = true; + return nChangeCached; + } + + void GetAmounts(std::list >& listReceived, + std::list >& listSent, int64_t& nFee, std::string& strSentAccount) const; + + void GetAccountAmounts(const std::string& strAccount, int64_t& nReceived, + int64_t& nSent, int64_t& nFee) const; + + bool IsFromMe() const + { + return (GetDebit() > 0); + } + + bool IsTrusted() const + { + // Quick answer in most cases + if (!IsFinalTx(*this)) + return false; + int nDepth = GetDepthInMainChain(); + if (nDepth >= 1) + return true; + if (nDepth < 0) + return false; + if (!bSpendZeroConfChange || !IsFromMe()) // using wtx's cached debit + return false; + + // Trusted if all inputs are from us and are in the mempool: + BOOST_FOREACH(const CTxIn& txin, vin) + { + // Transactions not sent by us: not trusted + const CWalletTx* parent = pwallet->GetWalletTx(txin.prevout.hash); + if (parent == NULL) + return false; + const CTxOut& parentOut = parent->vout[txin.prevout.n]; + if (!pwallet->IsMine(parentOut)) + return false; + } + return true; + } + + bool WriteToDisk(); + + int64_t GetTxTime() const; + int GetRequestCount() const; + + void RelayWalletTransaction(); + + std::set GetConflicts() const; +}; + + + + +class COutput +{ +public: + const CWalletTx *tx; + int i; + int nDepth; + + COutput(const CWalletTx *txIn, int iIn, int nDepthIn) + { + tx = txIn; i = iIn; nDepth = nDepthIn; + } + + std::string ToString() const + { + return strprintf("COutput(%s, %d, %d) [%s]", tx->GetHash().ToString().c_str(), i, nDepth, FormatMoney(tx->vout[i].nValue).c_str()); + } + + void print() const + { + LogPrintf("%s\n", ToString().c_str()); + } +}; + + + + +/** Private key that includes an expiration date in case it never gets used. */ +class CWalletKey +{ +public: + CPrivKey vchPrivKey; + 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_t nExpires=0) + { + nTimeCreated = (nExpires ? GetTime() : 0); + nTimeExpires = nExpires; + } + + IMPLEMENT_SERIALIZE + ( + if (!(nType & SER_GETHASH)) + READWRITE(nVersion); + READWRITE(vchPrivKey); + READWRITE(nTimeCreated); + READWRITE(nTimeExpires); + READWRITE(LIMITED_STRING(strComment, 65536)); + ) +}; + + + + + + +/** Account information. + * Stored in wallet with key "acc"+string account name. + */ +class CAccount +{ +public: + CPubKey vchPubKey; + + CAccount() + { + SetNull(); + } + + void SetNull() + { + vchPubKey = CPubKey(); + } + + IMPLEMENT_SERIALIZE + ( + if (!(nType & SER_GETHASH)) + READWRITE(nVersion); + READWRITE(vchPubKey); + ) +}; + + + +/** Internal transfers. + * Database key is acentry. + */ +class CAccountingEntry +{ +public: + std::string strAccount; + int64_t nCreditDebit; + int64_t nTime; + std::string strOtherAccount; + std::string strComment; + mapValue_t mapValue; + int64_t nOrderPos; // position in ordered transaction list + uint64_t nEntryNo; + + CAccountingEntry() + { + SetNull(); + } + + void SetNull() + { + nCreditDebit = 0; + nTime = 0; + strAccount.clear(); + strOtherAccount.clear(); + strComment.clear();bool LoadCScript(const CScript& redeemScript); + nOrderPos = -1; + } + + IMPLEMENT_SERIALIZE + ( + CAccountingEntry& me = *const_cast(this); + if (!(nType & SER_GETHASH)) + READWRITE(nVersion); + // Note: strAccount is serialized as part of the key, not here. + READWRITE(nCreditDebit); + READWRITE(nTime); + READWRITE(LIMITED_STRING(strOtherAccount, 65536)); + + if (!fRead) + { + WriteOrderPos(nOrderPos, me.mapValue); + + if (!(mapValue.empty() && _ssExtra.empty())) + { + CDataStream ss(nType, nVersion); + ss.insert(ss.begin(), '\0'); + ss << mapValue; + ss.insert(ss.end(), _ssExtra.begin(), _ssExtra.end()); + me.strComment.append(ss.str()); + } + } + + READWRITE(LIMITED_STRING(strComment, 65536)); + + size_t nSepPos = strComment.find("\0", 0, 1); + if (fRead) + { + me.mapValue.clear(); + if (std::string::npos != nSepPos) + { + CDataStream ss(std::vector(strComment.begin() + nSepPos + 1, strComment.end()), nType, nVersion); + ss >> me.mapValue; + me._ssExtra = std::vector(ss.begin(), ss.end()); + } + ReadOrderPos(me.nOrderPos, me.mapValue); + } + if (std::string::npos != nSepPos) + me.strComment.erase(nSepPos); + + me.mapValue.erase("n"); + ) + +private: + std::vector _ssExtra; +}; + +#endif diff --git a/src/walletdb.cpp b/src/walletdb.cpp index d40ea43..8c3059b 100644 --- a/src/walletdb.cpp +++ b/src/walletdb.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // 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/walletdb.cpp~ b/src/walletdb.cpp~ new file mode 100644 index 0000000..db08d3e --- /dev/null +++ b/src/walletdb.cpp~ @@ -0,0 +1,962 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// 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 + +using namespace std; +using namespace boost; + + +static uint64_t nAccountingEntryNumber = 0; + +// +// CWalletDB +// + +bool CWalletDB::WriteName(const string& strAddress, const string& strName) +{ + nWalletDBUpdated++; + return Write(make_pair(string("name"), strAddress), strName); +} + +bool CWalletDB::EraseName(const string& strAddress) +{ + // This should only be used for sending addresses, never for receiving addresses, + // receiving addresses must always have an address book entry if they're not change return. + nWalletDBUpdated++; + 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(); + return Read(make_pair(string("acc"), strAccount), account); +} + +bool CWalletDB::WriteAccount(const string& strAccount, const CAccount& account) +{ + return Write(make_pair(string("acc"), strAccount), account); +} + +bool CWalletDB::WriteAccountingEntry(const uint64_t nAccEntryNum, const CAccountingEntry& acentry) +{ + return Write(boost::make_tuple(string("acentry"), acentry.strAccount, nAccEntryNum), acentry); +} + +bool CWalletDB::WriteAccountingEntry(const CAccountingEntry& acentry) +{ + return WriteAccountingEntry(++nAccountingEntryNumber, acentry); +} + +int64_t CWalletDB::GetAccountCreditDebit(const string& strAccount) +{ + list entries; + ListAccountCreditDebit(strAccount, entries); + + int64_t nCreditDebit = 0; + BOOST_FOREACH (const CAccountingEntry& entry, entries) + nCreditDebit += entry.nCreditDebit; + + return nCreditDebit; +} + +void CWalletDB::ListAccountCreditDebit(const string& strAccount, list& entries) +{ + bool fAllAccounts = (strAccount == "*"); + + Dbc* pcursor = GetCursor(); + if (!pcursor) + throw runtime_error("CWalletDB::ListAccountCreditDebit() : cannot create DB cursor"); + unsigned int fFlags = DB_SET_RANGE; + while (true) + { + // Read next record + CDataStream ssKey(SER_DISK, CLIENT_VERSION); + if (fFlags == DB_SET_RANGE) + ssKey << boost::make_tuple(string("acentry"), (fAllAccounts? string("") : strAccount), uint64_t(0)); + CDataStream ssValue(SER_DISK, CLIENT_VERSION); + int ret = ReadAtCursor(pcursor, ssKey, ssValue, fFlags); + fFlags = DB_NEXT; + if (ret == DB_NOTFOUND) + break; + else if (ret != 0) + { + pcursor->close(); + throw runtime_error("CWalletDB::ListAccountCreditDebit() : error scanning DB"); + } + + // Unserialize + string strType; + ssKey >> strType; + if (strType != "acentry") + break; + CAccountingEntry acentry; + ssKey >> acentry.strAccount; + if (!fAllAccounts && acentry.strAccount != strAccount) + break; + + ssValue >> acentry; + ssKey >> acentry.nEntryNo; + entries.push_back(acentry); + } + + pcursor->close(); +} + + +DBErrors +CWalletDB::ReorderTransactions(CWallet* pwallet) +{ + LOCK(pwallet->cs_wallet); + // Old wallets didn't have any defined order for transactions + // Probably a bad idea to change the output of this + + // First: get all CWalletTx and CAccountingEntry into a sorted-by-time multimap. + typedef pair TxPair; + typedef multimap TxItems; + TxItems txByTime; + + for (map::iterator it = pwallet->mapWallet.begin(); it != pwallet->mapWallet.end(); ++it) + { + CWalletTx* wtx = &((*it).second); + txByTime.insert(make_pair(wtx->nTimeReceived, TxPair(wtx, (CAccountingEntry*)0))); + } + list acentries; + ListAccountCreditDebit("", acentries); + BOOST_FOREACH(CAccountingEntry& entry, acentries) + { + txByTime.insert(make_pair(entry.nTime, TxPair((CWalletTx*)0, &entry))); + } + + int64_t& nOrderPosNext = pwallet->nOrderPosNext; + nOrderPosNext = 0; + 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_t& nOrderPos = (pwtx != 0) ? pwtx->nOrderPos : pacentry->nOrderPos; + + if (nOrderPos == -1) + { + nOrderPos = nOrderPosNext++; + nOrderPosOffsets.push_back(nOrderPos); + + if (pacentry) + // Have to write accounting regardless, since we don't keep it in memory + if (!WriteAccountingEntry(pacentry->nEntryNo, *pacentry)) + return DB_LOAD_FAIL; + } + else + { + int64_t nOrderPosOff = 0; + BOOST_FOREACH(const int64_t& nOffsetStart, nOrderPosOffsets) + { + if (nOrderPos >= nOffsetStart) + ++nOrderPosOff; + } + nOrderPos += nOrderPosOff; + nOrderPosNext = std::max(nOrderPosNext, nOrderPos + 1); + + if (!nOrderPosOff) + continue; + + // Since we're changing the order, write it back + if (pwtx) + { + if (!WriteTx(pwtx->GetHash(), *pwtx)) + return DB_LOAD_FAIL; + } + else + if (!WriteAccountingEntry(pacentry->nEntryNo, *pacentry)) + return DB_LOAD_FAIL; + } + } + + return DB_LOAD_OK; +} + +class CWalletScanState { +public: + unsigned int nKeys; + unsigned int nCKeys; + unsigned int nKeyMeta; + bool fIsEncrypted; + bool fAnyUnordered; + int nFileVersion; + vector vWalletUpgrade; + + CWalletScanState() { + nKeys = nCKeys = nKeyMeta = 0; + fIsEncrypted = false; + fAnyUnordered = false; + nFileVersion = 0; + } +}; + +bool +ReadKeyValue(CWallet* pwallet, CDataStream& ssKey, CDataStream& ssValue, + CWalletScanState &wss, string& strType, string& strErr) +{ + try { + // Unserialize + // Taking advantage of the fact that pair serialization + // is just the two items serialized one after the other + ssKey >> strType; + if (strType == "name") + { + string strAddress; + ssKey >> strAddress; + ssValue >> pwallet->mapAddressBook[CBitmarkAddress(strAddress).Get()].name; + } + else if (strType == "purpose") + { + string strAddress; + ssKey >> strAddress; + ssValue >> pwallet->mapAddressBook[CBitmarkAddress(strAddress).Get()].purpose; + } + else if (strType == "tx") + { + uint256 hash; + ssKey >> hash; + CWalletTx wtx; + ssValue >> wtx; + CValidationState state; + if (!(CheckTransaction(wtx, state) && (wtx.GetHash() == hash) && state.IsValid())) + return false; + + // Undo serialize changes in 31600 + if (31404 <= wtx.fTimeReceivedIsTxTime && wtx.fTimeReceivedIsTxTime <= 31703) + { + if (!ssValue.empty()) + { + char fTmp; + char fUnused; + ssValue >> fTmp >> fUnused >> wtx.strFromAccount; + strErr = strprintf("LoadWallet() upgrading tx ver=%d %d '%s' %s", + wtx.fTimeReceivedIsTxTime, fTmp, wtx.strFromAccount, hash.ToString()); + wtx.fTimeReceivedIsTxTime = fTmp; + } + else + { + strErr = strprintf("LoadWallet() repairing tx ver=%d %s", wtx.fTimeReceivedIsTxTime, hash.ToString()); + wtx.fTimeReceivedIsTxTime = 0; + } + wss.vWalletUpgrade.push_back(hash); + } + + if (wtx.nOrderPos == -1) + wss.fAnyUnordered = true; + + pwallet->AddToWallet(wtx, true); + //// debug print + //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()), + // wtx.hashBlock.ToString(), + // wtx.mapValue["message"]); + } + else if (strType == "acentry") + { + string strAccount; + ssKey >> strAccount; + uint64_t nNumber; + ssKey >> nNumber; + if (nNumber > nAccountingEntryNumber) + nAccountingEntryNumber = nNumber; + + if (!wss.fAnyUnordered) + { + CAccountingEntry acentry; + ssValue >> acentry; + if (acentry.nOrderPos == -1) + wss.fAnyUnordered = true; + } + } + else if (strType == "key" || strType == "wkey") + { + CPubKey vchPubKey; + ssKey >> vchPubKey; + if (!vchPubKey.IsValid()) + { + strErr = "Error reading wallet database: CPubKey corrupt"; + return false; + } + CKey key; + CPrivKey pkey; + uint256 hash = 0; + + if (strType == "key") + { + wss.nKeys++; + ssValue >> pkey; + } else { + CWalletKey wkey; + ssValue >> wkey; + pkey = wkey.vchPrivKey; + } + + // 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 (!pwallet->LoadKey(key, vchPubKey)) + { + strErr = "Error reading wallet database: LoadKey failed"; + return false; + } + } + else if (strType == "mkey") + { + unsigned int nID; + ssKey >> nID; + CMasterKey kMasterKey; + ssValue >> kMasterKey; + if(pwallet->mapMasterKeys.count(nID) != 0) + { + strErr = strprintf("Error reading wallet database: duplicate CMasterKey id %u", nID); + return false; + } + pwallet->mapMasterKeys[nID] = kMasterKey; + if (pwallet->nMasterKeyMaxID < nID) + pwallet->nMasterKeyMaxID = nID; + } + else if (strType == "ckey") + { + vector vchPubKey; + ssKey >> vchPubKey; + vector vchPrivKey; + ssValue >> vchPrivKey; + wss.nCKeys++; + + if (!pwallet->LoadCryptedKey(vchPubKey, vchPrivKey)) + { + strErr = "Error reading wallet database: LoadCryptedKey failed"; + return false; + } + wss.fIsEncrypted = true; + } + else if (strType == "keymeta") + { + CPubKey vchPubKey; + ssKey >> vchPubKey; + CKeyMetadata keyMeta; + ssValue >> keyMeta; + wss.nKeyMeta++; + + pwallet->LoadKeyMetadata(vchPubKey, keyMeta); + + // find earliest key creation time, as wallet birthday + if (!pwallet->nTimeFirstKey || + (keyMeta.nCreateTime < pwallet->nTimeFirstKey)) + pwallet->nTimeFirstKey = keyMeta.nCreateTime; + } + else if (strType == "defaultkey") + { + ssValue >> pwallet->vchDefaultKey; + } + else if (strType == "pool") + { + int64_t nIndex; + ssKey >> nIndex; + CKeyPool keypool; + ssValue >> keypool; + pwallet->setKeyPool.insert(nIndex); + + // If no metadata exists yet, create a default with the pool key's + // creation time. Note that this may be overwritten by actually + // stored metadata for that key later, which is fine. + CKeyID keyid = keypool.vchPubKey.GetID(); + if (pwallet->mapKeyMetadata.count(keyid) == 0) + pwallet->mapKeyMetadata[keyid] = CKeyMetadata(keypool.nTime); + } + else if (strType == "version") + { + ssValue >> wss.nFileVersion; + if (wss.nFileVersion == 10300) + wss.nFileVersion = 300; + } + else if (strType == "cscript") + { + uint160 hash; + ssKey >> hash; + CScript script; + ssValue >> script; + if (!pwallet->LoadCScript(script)) + { + strErr = "Error reading wallet database: LoadCScript failed"; + return false; + } + } + else if (strType == "orderposnext") + { + ssValue >> pwallet->nOrderPosNext; + } + else if (strType == "destdata") + { + std::string strAddress, strKey, strValue; + ssKey >> strAddress; + ssKey >> strKey; + ssValue >> strValue; + if (!pwallet->LoadDestData(CBitmarkAddress(strAddress).Get(), strKey, strValue)) + { + strErr = "Error reading wallet database: LoadDestData failed"; + return false; + } + } + } catch (...) + { + return false; + } + return true; +} + +static bool IsKeyType(string strType) +{ + return (strType== "key" || strType == "wkey" || + strType == "mkey" || strType == "ckey"); +} + +DBErrors CWalletDB::LoadWallet(CWallet* pwallet) +{ + 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; + } + + // Try to be tolerant of single corrupt records: + string strType, strErr; + if (!ReadKeyValue(pwallet, ssKey, ssValue, wss, strType, strErr)) + { + // losing keys is considered a catastrophic error, anything else + // we assume the user can live with: + if (IsKeyType(strType)) + result = DB_CORRUPT; + else + { + // Leave other errors alone, if we try to fix them we might make things worse. + fNoncriticalErrors = true; // ... but do warn the user there is something wrong. + if (strType == "tx") + // Rescan if there is a bad transaction record: + SoftSetBoolArg("-rescan", true); + } + } + if (!strErr.empty()) + LogPrintf("%s\n", strErr); + } + pcursor->close(); + } + catch (boost::thread_interrupted) { + throw; + } + catch (...) { + result = DB_CORRUPT; + } + + if (fNoncriticalErrors && result == DB_LOAD_OK) + result = DB_NONCRITICAL_ERROR; + + // Any wallet corruption at all: skip any rewriting or + // upgrading, we don't want to make it worse. + if (result != DB_LOAD_OK) + return result; + + LogPrintf("nFileVersion = %d\n", wss.nFileVersion); + + 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 + if ((wss.nKeys + wss.nCKeys) != wss.nKeyMeta) + pwallet->nTimeFirstKey = 1; // 0 would be considered 'no value' + + BOOST_FOREACH(uint256 hash, wss.vWalletUpgrade) + WriteTx(hash, pwallet->mapWallet[hash]); + + // Rewrite encrypted wallets of versions 0.4.0 and 0.5.0rc: + if (wss.fIsEncrypted && (wss.nFileVersion == 40000 || wss.nFileVersion == 50000)) + return DB_NEED_REWRITE; + + if (wss.nFileVersion < CLIENT_VERSION) // Update + WriteVersion(CLIENT_VERSION); + + if (wss.fAnyUnordered) + result = ReorderTransactions(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 + RenameThread("bitmark-wallet"); + + static bool fOneThread; + if (fOneThread) + return; + fOneThread = true; + if (!GetBoolArg("-flushwallet", true)) + return; + + unsigned int nLastSeen = nWalletDBUpdated; + unsigned int nLastFlushed = nWalletDBUpdated; + int64_t nLastWalletUpdate = GetTime(); + while (true) + { + MilliSleep(500); + + if (nLastSeen != nWalletDBUpdated) + { + nLastSeen = nWalletDBUpdated; + nLastWalletUpdate = GetTime(); + } + + if (nLastFlushed != nWalletDBUpdated && GetTime() - nLastWalletUpdate >= 2) + { + TRY_LOCK(bitdb.cs_db,lockDb); + if (lockDb) + { + // Don't do this if any databases are in use + int nRefCount = 0; + map::iterator mi = bitdb.mapFileUseCount.begin(); + while (mi != bitdb.mapFileUseCount.end()) + { + nRefCount += (*mi).second; + mi++; + } + + if (nRefCount == 0) + { + boost::this_thread::interruption_point(); + map::iterator mi = bitdb.mapFileUseCount.find(strFile); + if (mi != bitdb.mapFileUseCount.end()) + { + LogPrint("db", "Flushing wallet.dat\n"); + nLastFlushed = nWalletDBUpdated; + int64_t nStart = GetTimeMillis(); + + // Flush wallet.dat so it's self contained + bitdb.CloseDb(strFile); + bitdb.CheckpointLSN(strFile); + + bitdb.mapFileUseCount.erase(mi++); + LogPrint("db", "Flushed wallet.dat %dms\n", GetTimeMillis() - nStart); + } + } + } + } + } +} + +bool BackupWallet(const CWallet& wallet, const string& strDest) +{ + if (!wallet.fFileBacked) + return false; + while (true) + { + { + LOCK(bitdb.cs_db); + if (!bitdb.mapFileUseCount.count(wallet.strWalletFile) || bitdb.mapFileUseCount[wallet.strWalletFile] == 0) + { + // Flush log data to the dat file + bitdb.CloseDb(wallet.strWalletFile); + bitdb.CheckpointLSN(wallet.strWalletFile); + bitdb.mapFileUseCount.erase(wallet.strWalletFile); + + // Copy wallet.dat + filesystem::path pathSrc = GetDataDir() / wallet.strWalletFile; + filesystem::path pathDest(strDest); + if (filesystem::is_directory(pathDest)) + pathDest /= wallet.strWalletFile; + + try { +#if BOOST_VERSION >= 104000 + filesystem::copy_file(pathSrc, pathDest, filesystem::copy_option::overwrite_if_exists); +#else + filesystem::copy_file(pathSrc, pathDest); +#endif + LogPrintf("copied wallet.dat to %s\n", pathDest.string()); + return true; + } catch(const filesystem::filesystem_error &e) { + LogPrintf("error copying wallet.dat to %s - %s\n", pathDest.string(), e.what()); + return false; + } + } + } + MilliSleep(100); + } + return false; +} + +// +// Try to (very carefully!) recover wallet.dat if there is a problem. +// +bool CWalletDB::Recover(CDBEnv& dbenv, std::string filename, bool fOnlyKeys) +{ + // Recovery procedure: + // move wallet.dat to wallet.timestamp.bak + // Call Salvage with fAggressive=true to + // get as much data as possible. + // Rewrite salvaged data to wallet.dat + // Set -rescan so any missing transactions will be + // found. + 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) + LogPrintf("Renamed %s to %s\n", filename, newFilename); + else + { + LogPrintf("Failed to rename %s to %s\n", filename, newFilename); + return false; + } + + std::vector salvagedData; + bool allOK = dbenv.Salvage(newFilename, true, salvagedData); + if (salvagedData.empty()) + { + LogPrintf("Salvage(aggressive) found no records in %s.\n", newFilename); + return false; + } + LogPrintf("Salvage(aggressive) found %u records\n", salvagedData.size()); + + bool fSuccess = allOK; + Db* pdbCopy = new Db(&dbenv.dbenv, 0); + int ret = pdbCopy->open(NULL, // Txn pointer + filename.c_str(), // Filename + "main", // Logical db name + DB_BTREE, // Database type + DB_CREATE, // Flags + 0); + if (ret > 0) + { + LogPrintf("Cannot create database file %s\n", filename); + return false; + } + CWallet dummyWallet; + CWalletScanState wss; + + DbTxn* ptxn = dbenv.TxnBegin(); + BOOST_FOREACH(CDBEnv::KeyValPair& row, salvagedData) + { + if (fOnlyKeys) + { + CDataStream ssKey(row.first, SER_DISK, CLIENT_VERSION); + CDataStream ssValue(row.second, SER_DISK, CLIENT_VERSION); + string strType, strErr; + bool fReadOK = ReadKeyValue(&dummyWallet, ssKey, ssValue, + wss, strType, strErr); + if (!IsKeyType(strType)) + continue; + if (!fReadOK) + { + LogPrintf("WARNING: CWalletDB::Recover skipping %s: %s\n", strType, strErr); + continue; + } + } + Dbt datKey(&row.first[0], row.first.size()); + Dbt datValue(&row.second[0], row.second.size()); + int ret2 = pdbCopy->put(ptxn, &datKey, &datValue, DB_NOOVERWRITE); + if (ret2 > 0) + fSuccess = false; + } + ptxn->commit(0); + pdbCopy->close(0); + delete pdbCopy; + + return fSuccess; +} + +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 54cd34c..22630b6 100644 --- a/src/walletdb.h +++ b/src/walletdb.h @@ -1,6 +1,6 @@ // Copyright (c) 2009-2010 Satoshi Nakamoto // Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers -// Modified Code: Copyright (c) 2014 Project Bitmark +// Modified Code: Copyright (c) 2015 Gamecredits Foundation // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef BITMARK_WALLETDB_H diff --git a/src/walletdb.h~ b/src/walletdb.h~ new file mode 100644 index 0000000..3a08206 --- /dev/null +++ b/src/walletdb.h~ @@ -0,0 +1,134 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Original Code: Copyright (c) 2009-2014 The Bitcoin Core Developers +// Modified Code: Copyright (c) 2015 Pfennig Foundation +// Distributed under the MIT/X11 software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. +#ifndef BITMARK_WALLETDB_H +#define BITMARK_WALLETDB_H + +#include "db.h" +#include "key.h" + +#include +#include +#include +#include +#include + +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 +{ + DB_LOAD_OK, + DB_CORRUPT, + DB_NONCRITICAL_ERROR, + DB_TOO_NEW, + DB_LOAD_FAIL, + DB_NEED_REWRITE +}; + +class CKeyMetadata +{ +public: + static const int CURRENT_VERSION=1; + int nVersion; + int64_t nCreateTime; // 0 means unknown + + CKeyMetadata() + { + SetNull(); + } + CKeyMetadata(int64_t nCreateTime_) + { + nVersion = CKeyMetadata::CURRENT_VERSION; + nCreateTime = nCreateTime_; + } + + IMPLEMENT_SERIALIZE + ( + READWRITE(this->nVersion); + nVersion = this->nVersion; + READWRITE(nCreateTime); + ) + + void SetNull() + { + nVersion = CKeyMetadata::CURRENT_VERSION; + nCreateTime = 0; + } +}; + +/** Access to the wallet database (wallet.dat) */ +class CWalletDB : public CDB +{ +public: + CWalletDB(std::string strFilename, const char* pszMode="r+") : CDB(strFilename.c_str(), pszMode) + { + } +private: + CWalletDB(const CWalletDB&); + void operator=(const CWalletDB&); +public: + bool WriteName(const std::string& strAddress, const std::string& strName); + bool EraseName(const std::string& strAddress); + + bool WritePurpose(const std::string& strAddress, const std::string& purpose); + bool ErasePurpose(const std::string& strAddress); + + bool WriteTx(uint256 hash, const CWalletTx& wtx); + bool EraseTx(uint256 hash); + + 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); + + bool WriteCScript(const uint160& hash, const CScript& redeemScript); + + bool WriteBestBlock(const CBlockLocator& locator); + bool ReadBestBlock(CBlockLocator& locator); + + bool WriteOrderPosNext(int64_t nOrderPosNext); + + bool WriteDefaultKey(const CPubKey& vchPubKey); + + bool ReadPool(int64_t nPool, CKeyPool& keypool); + bool WritePool(int64_t nPool, const CKeyPool& keypool); + bool ErasePool(int64_t nPool); + + 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_t nAccEntryNum, const CAccountingEntry& acentry); +public: + bool WriteAccountingEntry(const CAccountingEntry& acentry); + 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); +}; + +bool BackupWallet(const CWallet& wallet, const std::string& strDest); + +#endif // BITMARK_WALLETDB_H