Merge pull request #384 from Laser9un/master
authorCryptoManiac <CryptoManiac@users.noreply.github.com>
Wed, 4 Dec 2019 14:36:41 +0000 (17:36 +0300)
committerGitHub <noreply@github.com>
Wed, 4 Dec 2019 14:36:41 +0000 (17:36 +0300)
GUI and usability improvements, StunSrvList, build manuals

24 files changed:
doc/bitcoin_logo_doxygen.png [deleted file]
doc/build-msw.txt
doc/build-osx.txt
doc/building novacoin-qt for android under Windows.txt
doc/building novacoind and novacoinqt under Windows with MinGW.txt
doc/crosscompiling_building Windows binary under Unix.txt
doc/novacoin_logo_doxygen.png [new file with mode: 0644]
doc/readme-qt.rst
src/bitcoinrpc.cpp
src/bitcoinrpc.h
src/qt/askpassphrasedialog.cpp
src/qt/askpassphrasedialog.h
src/qt/bitcoinamountfield.cpp
src/qt/bitcoingui.cpp
src/qt/bitcoingui.h
src/qt/forms/rpcconsole.ui
src/qt/optionsmodel.cpp
src/qt/rpcconsole.cpp
src/qt/rpcconsole.h
src/qt/signverifymessagedialog.cpp
src/qt/transactionview.cpp
src/rpcblockchain.cpp
src/stun.cpp
src/wallet.cpp

diff --git a/doc/bitcoin_logo_doxygen.png b/doc/bitcoin_logo_doxygen.png
deleted file mode 100644 (file)
index 5b41b02..0000000
Binary files a/doc/bitcoin_logo_doxygen.png and /dev/null differ
index 4fb5d73..ff150c3 100644 (file)
@@ -1,5 +1,6 @@
 Copyright (c) 2009-2012 Bitcoin Developers
-Copyright (c) 2013 NovaCoin Developers
+Copyright (c) 2013-2019 NovaCoin Developers
+
 Distributed under the MIT/X11 software license, see the accompanying
 file license.txt or http://www.opensource.org/licenses/mit-license.php.
 This product includes software developed by the OpenSSL Project for use in
@@ -24,7 +25,7 @@ Dependencies
 Libraries you need to download separately and build:
 
                 default path               download
-OpenSSL         \openssl-1.0.1j-mgw        http://www.openssl.org/source/
+OpenSSL         \openssl-1.0.2t-mgw        http://www.openssl.org/source/
 Berkeley DB     \db-6.0.20.NC-mgw          http://www.oracle.com/technology/software/products/berkeley-db/index.html
 Boost           \boost-1.57.0-mgw          http://www.boost.org/users/download/
 
@@ -34,7 +35,7 @@ Berkeley DB    New BSD license with additional requirement that linked software
 Boost          MIT-like license
 
 Versions used in this release:
-OpenSSL      1.0.1j
+OpenSSL      1.0.2t
 Berkeley DB  6.0.20.NC
 Boost        1.57.0
 
@@ -45,7 +46,7 @@ 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.1j-mgw
+cd /c/openssl-1.0.2t-mgw
 ./config
 make
 
index 0531156..337fff9 100644 (file)
-Mac OS X Build Instructions and Notes
-====================================
-This guide will show you how to build novacoind(headless client) for OSX.
-
-Notes
------
-
-* Tested on OS X 10.7 through 10.10 on 64-bit Intel processors only.
-
-* 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 also an assumption that you already have `git` installed. 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.
-
-You will also need to install [Homebrew](http://brew.sh) in order to install library
-dependencies.
-
-The installation of the actual dependencies is covered in the Instructions
-sections below.
+Copyright (c) 2017-2019 42 Developers
+Copyright (c) 2019 NovaCoin Developers
 
-Instructions: Homebrew
-----------------------
-
-#### Install dependencies using Homebrew
-
-        brew install autoconf automake libtool boost openssl pkg-config protobuf qt qrencode
-
-#### Installing berkeley-db4 using Homebrew
-
-The homebrew package for berkeley-db4 has been broken for some time.  It will install without Java though.
-
-Running this command takes you into brew's interactive mode, which allows you to configure, make, and install by hand:
-```
-$ brew install https://raw.github.com/mxcl/homebrew/master/Library/Formula/berkeley-db4.rb -–without-java 
-```
-
-The rest of these commands are run inside brew interactive mode:
-```
-/private/tmp/berkeley-db4-UGpd0O/db-4.8.30 $ cd ..
-/private/tmp/berkeley-db4-UGpd0O $ db-4.8.30/dist/configure --prefix=/usr/local/Cellar/berkeley-db4/4.8.30 --mandir=/usr/local/Cellar/berkeley-db4/4.8.30/share/man --enable-cxx
-/private/tmp/berkeley-db4-UGpd0O $ make
-/private/tmp/berkeley-db4-UGpd0O $ make install
-/private/tmp/berkeley-db4-UGpd0O $ exit
-```
-
-After exiting, you'll get a warning that the install is keg-only, which means it wasn't symlinked to `/usr/local`.  You don't need it to link it to build novacoin, but if you want to, here's how:
-
-    $ brew link --force berkeley-db4
+Mac OS X Build Instructions and Notes
+=====================================
 
+MacOS 10.11.6 - El Capitan was used in this manual. All of the commands should be executed in a Terminal application. The built-in one is located in /Applications/Utilities. 
 
-### Building `novacoind`
+1. Install Xcode (7.3.1 for El Capitan), run it and accept the license agreement:
 
-1. Clone the github tree to get the source code and go into the directory.
+https://developer.apple.com/xcode/
 
-        git clone https://github.com/novacoin-project/novacoin.git
-        cd novacoin
+Install Xcode command line tools:
 
-2. Build NovaCoin-Qt application:
-        qmake
-        make
+xcode-select --install
 
-3. Build bitcoind:
-        cd src
-        make -f makefile.osx novacoind
+2. Install MacPorts with main dependencies:
 
-Use Qt Creator as IDE
-------------------------
-You can use Qt Creator as IDE, for debugging and for manipulating forms, etc.
-Download Qt Creator from http://www.qt.io/download/. Download the "community edition" and only install Qt Creator (uncheck the rest during the installation process).
+https://distfiles.macports.org/MacPorts/MacPorts-2.3.5-10.11-ElCapitan.pkg
 
-1. Make sure you installed everything through homebrew mentioned above 
-2. In Qt Creator do "File" -> "Open Project"
-3. Select novacoin-qt.pro as project file.
-4. In the "Projects" tab select "Manage Kits..."
-5. Select the default "Desktop" kit and select "Clang (x86 64bit in /usr/bin)" as compiler
-6. Select LLDB as debugger (you might need to set the path to your installtion)
-7. Start debugging with Qt Creator
+sudo port install autoconf automake libtool pkgconfig db60 openssl qrencode qt5
 
-Creating a release build
-------------------------
-You can ignore this section if you are building `novacoind` for your own use.
+sudo ln -s /opt/local/libexec/qt5/bin/qmake /opt/local/bin/qmake
 
-novacoind binary isn't included in the NovaCoin-Qt.app bundle.
+3. Install Homebrew(http://brew.sh) with dependencies:
 
-If you are building `novacoind` or `NovaCoin-Qt` for others, your build machine should be set up
-as follows for maximum compatibility:
+/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
 
-All dependencies should be compiled with these flags:
+brew install python2 boost@1.60
 
- -mmacosx-version-min=10.7
- -arch x86_64
- -isysroot $(xcode-select --print-path)/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk
+brew link --force boost@1.60
 
-Once dependencies are compiled, you can create the .dmg disk image:
+4. Add to PATH:
 
-./contrib/macdeploy/macdeployqtplus NovaCoin-Qt.app -dmg -fancy ./contrib/macdeploy/fancy.plist
+nano ~/.profile
 
-Running
--------
+export PATH=$PATH:~/opt/local/lib/db6.0
+export PATH=$PATH:~/opt/local/lib/db60/include
+export PATH=$PATH:~/usr/local/Cellar/boost@1.60/1.60.0/include/boost/thread.hpp
 
-It's now available at `./novacoind`, provided that you are still in the `src`
-directory. We have to first create the RPC configuration file, though.
+Ctrl+O, Enter, Ctrl+X
 
-Run `./novacoind` to get the filename where it should be put, or just try these
-commands:
+5. Clone the github tree:
 
-    echo -e "rpcuser=novacoinrpc\nrpcpassword=$(xxd -l 16 -p /dev/urandom)" > "/Users/${USER}/Library/Application Support/NovaCoin/novacoin.conf"
-    chmod 600 "/Users/${USER}/Library/Application Support/NovaCoin/novacoin.conf"
+git clone https://github.com/novacoin-project/novacoin.git
 
-The next time 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:
+6. Build novacoin-Qt application:
 
-    tail -f $HOME/Library/Application\ Support/NovaCoin/debug.log
+cd novacoin
+qmake
+make
 
-Other commands:
--------
+7. Create the .dmg disk image:
 
-    ./novacoind -daemon # to start the bitcoin daemon.
-    ./novacoind --help  # for a list of command-line options.
-    ./novacoind help    # When the daemon is running, to get a list of RPC commands
+sudo easy_install appscript
+./contrib/macdeploy/macdeployqtplus novacoin-Qt.app -dmg -fancy ./contrib/macdeploy/fancy.plist
\ No newline at end of file
index a9d7ef3..2bcb8c0 100644 (file)
@@ -1,47 +1,49 @@
-\feffARMV7
+\feffARMv7 (Собрано в Windows 7)
 1.1 Установка архиватора 7z: http://www.7-zip.org/ 
-(при написании инструкции использовался 7-Zip 9.20 64 bit X64, но скорее всего подойдёт любая версия)
+(при написании инструкции использовался 7-Zip 15.14 64 bit x64, но скорее всего подойдёт любая версия)
 
 1.2 Установка msys shell:
 -Скачайте http://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download
 -нажмите Install
 -директория для установки C:\MinGW
--поставить галочку напротив "...also install support for the graphical user interface."
+-оставить галочку напротив "...also install support for the graphical user interface."
 -убрать галочки напротив "..in the start menu, and/or .." "... on the desktop"
--нажмите continue
--нажмите continue
+-нажмите continue, continue
 -нажмите All Packages, затем MSYS
--поставте галочки напротив:
-msys-autoconf-bin
-msys-automake-bin
-msys-base-bin
-msys-libtool-bin
+-отметьте для установки:
+msys-autoconf bin
+msys-automake bin
+msys-base bin
+msys-libtool bin
 -нажмите Installation, Apply Changes, Apply. После завершения установки нажмите Close и закройте MinGW Installation Manager.
 
-1.3 Установка qt-5.4.0 для Android
--Скачайте http://master.qt.io/archive/qt/5.4/5.4.0/qt-opensource-windows-x86-android-5.4.0.exe
+1.3 Установка qt-5.6.0 для Android
+-Скачайте http://master.qt.io/archive/qt/5.6/5.6.0/qt-opensource-windows-x86-android-5.6.0.exe
 -Запустите установщик
--Укажите каталог для установки(я при написании инструкции устанавливал в папку C:\Qt\Qt5.4.0)
+-Каталог для установки оставьте по умолчанию (C:\Qt\Qt5.6.0)
 -Выберите среди компонентов MinGW 4.9.1, остальные компоненты оставьте по умолчанию
 (У меня окошко выглядит так: https://yadi.sk/i/e9W_pXTge43u5 )
 (можно так же выбрать Android X86, и Android armv5 если собираетесь собирать под эти CPU)
 
 1.4 Установка JAVA JDK
 -Зайдите на сайт http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
--Скачайте и установите JDK(при написании инструкции использовалась jdk-8u25-windows-i586.exe )
+-Скачайте и установите JDK (при написании инструкции использовалась jdk-8u172-windows-i586.exe )
 
 1.5 Установка Android SDK
 -Скачайте http://dl.google.com/android/installer_r24.0.2-windows.exe
 -Установите в папку C:\Android\sdk
 -Запустите SDK Manager.exe
--Установите Android SDK Tools 24.0.2, Android SDK Platform-tools 21, Android SDK Build-tools 21.1.2, Google USB driver, 
-SDK Platform 21, Google API 21, ARM EABI v7a System Image
+-Установите Android SDK Tools 24.4.1, Android SDK Platform-tools 23.0.1, Android SDK Build-tools 23.0.1, SDK Platform 22, Google APIs 22, ARM EABI v7a System Image 22, Google USB driver
+-по окончанию установки, перезапустите SDK Manager.exe для проверки наличия обновлений установленных компонентов
 
 1.6 Установка Android NDK
 -На сайте https://developer.android.com/tools/sdk/ndk/index.html#Downloads
--Скачайте https://dl.google.com/android/ndk/android-ndk-r10d-windows-x86_64.exe 
--Установите в папку C:\Android\android-ndk-r10d  (файл android-ndk-r10d-windows-x86_64.exe это самораспоковывающийся архив, который по двойному клику распаковывается в текущую папку, поэтому лучше открыть его 7-zip и выбрать папку для распаковки самостоятельно)
--Добавьте путь C:\Android\android-ndk-r10d\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin в системную переменную PATH
+-Скачайте https://dl.google.com/android/repository/android-ndk-r13b-windows-x86_64.zip
+
+-Распакуйте в папку C:\Android
+-Добавьте путь C:\Android\android-ndk-r13b\toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin в системную переменную PATH:
+ нажмите правой кнопкой мыши на "Компьютер", в открывшемся меню нажмите "Свойства", затем "Дополнительные параметры системы", потом "Переменные среды"
+https://yadi.sk/i/GnG9HiGme46oi
 Подробное описание как это сделать на Windows 8, Windows 7, Windows XP и Windows Vista
 https://www.java.com/ru/download/help/path.xml
 (только не нужно выполнять последний пункт из этой инструкции "Откройте заново окно командной строки и выполните код java." )
@@ -51,41 +53,38 @@ https://www.java.com/ru/download/help/path.xml
 -наберите arm-linux-androideabi-g++ -v
 В командной строке выведется текст. В конце текста должно быть написано:
 Thread model: posix
-gcc version 4.9 20140827 (prerelease) (GCC)
+gcc version 4.9 20150123 (prerelease) (GCC)
 
 1.7 Установка Apache Ant
 -Зайдите на сайт https://ant.apache.org/bindownload.cgi
--Скачайте архив с программой: http://apache-mirror.rbc.ru/pub/apache//ant/binaries/apache-ant-1.9.4-bin.zip 
--Распакуйте в папку C:\Android\apache-ant-1.9.4
+-Скачайте архив с программой: http://apache-mirror.rbc.ru/pub/apache//ant/binaries/apache-ant-1.10.3-bin.zip
+-Распакуйте в папку C:\Android\apache-ant-1.10.3
 
 1.8 Добавьте новые системные переменные(Они нужны только для пункта 2. Построение зависимостей, после этого их можно убрать)
--Нажмите правой кнопкой мыши на "Компьютер", в открывшемся меню нажмите "Свойства", затем "Дополнительные параметры системы", потом "Переменные среды"
-https://yadi.sk/i/GnG9HiGme46oi
 -В "Системные переменные" нажмите "Cоздать"(ниже будет идти список "переменная и её значение")
-ANDROID_DEV /c/Android/android-ndk-r10d/platforms/android-9/arch-arm/usr
-AR /c/Android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-ar
-AS /c/Android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-as
-CC /c/Android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-gcc
-CFLAGS --sysroot=/c/Android/android-ndk-r10d/platforms/android-9/arch-arm/
-CPP /c/Android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-cpp
-CPPFLAGS --sysroot=/c/Android/android-ndk-r10d/platforms/android-9/arch-arm/
-CXX /c/Android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++
-CXXFLAGS --sysroot=/c/Android/android-ndk-r10d/platforms/android-9/arch-arm/ -I/c/Android/android-ndk-r10d/sources/cxx-stl/gnu-libstdc++/4.9/include -I/c/Android/android-ndk-r10d/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include
-LD /c/Android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-ld
-NDK_PROJECT_PATH C:\Android\android-ndk-r10d
-RANLIB /c/Android/android-ndk-r10d/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-ranlib
+ANDROID_DEV /c/Android/android-ndk-r13b/platforms/android-9/arch-arm/usr
+AR /c/Android/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-ar
+AS /c/Android/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-as
+CC /c/Android/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-gcc
+CFLAGS --sysroot=/c/Android/android-ndk-r13b/platforms/android-9/arch-arm/
+CPP /c/Android/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-cpp
+CPPFLAGS --sysroot=/c/Android/android-ndk-r13b/platforms/android-9/arch-arm/
+CXX /c/Android/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++
+CXXFLAGS --sysroot=/c/Android/android-ndk-r13b/platforms/android-9/arch-arm/ -I/c/Android/android-ndk-r13b/sources/cxx-stl/gnu-libstdc++/4.9/include -I/c/Android/android-ndk-r13b/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include
+LD /c/Android/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-ld
+NDK_PROJECT_PATH C:\Android\android-ndk-r13b
+RANLIB /c/Android/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-ranlib
 
 2. Построение зависимостей.
 В инструкции все зависимости сохраняются в папку C:\Android\deps
 
 2.1 OpenSSL 
--Скачайте http://www.openssl.org/source/openssl-1.0.2.tar.gz
+-Скачайте http://www.openssl.org/source/openssl-1.0.2t.tar.gz
+-Распакуйте в папку C:\Android\deps\openssl-1.0.2
 -Перейдите в папку C:\MinGW\msys\1.0 и запустите msys.bat
 Из MinGw shell выполните следующий код:
 
-cd /c/deps/
-tar xvfz openssl-1.0.2.tar.gz
-cd openssl-1.0.2
+cd /c/Android/deps/openssl-1.0.2
 Configure no-shared no-dso android-armv7
 make
 
@@ -93,7 +92,7 @@ make
 -Скачайте http://download.oracle.com/berkeley-db/db-6.0.20.tar.gz
 -Из MinGw shell выполните следующий код:
 
-cd /c/deps/
+cd /c/Android/deps/
 tar xvfz db-6.0.20.tar.gz
 cd db-6.0.20/build_unix
 ../dist/configure --host=arm-none-linux --enable-cxx --disable-shared --disable-replication
@@ -119,7 +118,7 @@ option.set keep-going : false ;
 
 Вернитесь в командную строку и введите:
 
-b2 --build-type=complete --with-chrono --with-filesystem --with-program_options --with-system --with-thread toolset=gcc-arm variant=release link=static threading=multi threadapi=pthread target-os=android define=BOOST_MATH_DISABLE_FLOAT128 include=C:\Android\android-ndk-r10d\sources\cxx-stl\gnu-libstdc++\4.9\include include=C:\Android\android-ndk-r10d\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi\include include=C:\Android\android-ndk-r10d\platforms\android-9\arch-arm\usr\include
+b2 --build-type=complete --with-chrono --with-filesystem --with-program_options --with-system --with-thread toolset=gcc-arm variant=release link=static threading=multi threadapi=pthread target-os=android define=BOOST_MATH_DISABLE_FLOAT128 include=C:\Android\android-ndk-r13b\sources\cxx-stl\gnu-libstdc++\4.9\include include=C:\Android\android-ndk-r13b\sources\cxx-stl\gnu-libstdc++\4.9\libs\armeabi\include include=C:\Android\android-ndk-r13b\platforms\android-9\arch-arm\usr\include
 
 После выполнения этой команды в папке C:\Android\deps\boost_1_57_0\stage\lib должны появиться следующие файлы:
 libboost_atomic-gcc-mt-s-1_57.a
@@ -202,7 +201,7 @@ src/mruset.h \
 
 После строки src/qt/transactiontablemodel.cpp \ вставьте  src/ifaddrs.c \
 
-Закоментируйте строку 434 LIBS += -lrt
+Закоментируйте строку  LIBS += -lrt
 (то есть чтобы стало выглядеть так:
 !windows:!macx {
     DEFINES += LINUX
@@ -215,49 +214,40 @@ LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -l
 на
 LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread_pthread$$BOOST_THREAD_LIB_SUFFIX
 
--Откройте файл C:\Qt\Qt5.4.0\Tools\QtCreator\bin\qtcreator.exe
--Нажмите "Инструменты"->"Параметры", затем выберите вкладку Android
--Вставьте в строку "Размещение JDK" C:\Program Files (x86)\Java\jdk1.8.0_25
+Сохраните изменения в файле novacoin-qt.pro.
+
+-Откройте файл C:\Qt\Qt5.6.0\Tools\QtCreator\bin\qtcreator.exe
+-Нажмите "Инструменты"->"Параметры"->"Устройства", затем выберите вкладку Android
+-Вставьте в строку "Размещение JDK" C:\Program Files (x86)\Java\jdk1.8.0_172
 -Вставьте в строку "Размещение SDK для Android" C:\Android\sdk
--Вставьте в строку "Размещение NDK для Android" C:\Android\android-ndk-r10d
--Вставьте в строку "Программа Ant" C:\Android\apache-ant-1.9.4\bin\ant.bat
+-Вставьте в строку "Размещение NDK для Android" C:\Android\android-ndk-r13b
+-Проверьте, чтоб в строке "Программа Ant" было C:\Android\apache-ant-1.10.3\bin\ant.bat
 -Нажмите "OK"
 -Нажмите "Файл"->"Открыть файл или проект..."
 -Найдите "novacoin-qt.pro" и нажмите "открыть"
--Поставьте галочку напротив Android для armeabi-v7a(GCC 4.9, Qt 5.4.0), остальные галочки уберите
+-Поставьте галочку напротив Android для armeabi-v7a(GCC 4.9, Qt 5.6.0), остальные галочки уберите
 -Нажмите "Настроить проект"
--Нажмите "Проекты"->"Сборка"->"Создать шаблоны"(картинка чтобы лучше понять https://yadi.sk/i/M8mhG2tce4cEy)
+-Нажмите "Проекты"->Изменить конфигурацию сборки: выберите "Выпуск"->Собрать Android APK "Подробнее"->"Создать шаблоны"(картинка чтобы лучше понять https://yadi.sk/i/M8mhG2tce4cEy)
 -Нажмите "Завершить"
--В проекте novacoin-qt выберете Другие файлы->android->AndroidManifest.xml и задайте имя пакета, имя приложения, иконки приложения(Иконки находятся в папке C:\Android\novacoin-master\src\qt\res\icons) (Для Google Play Market иконка должна быть не менее 512x512)(https://yadi.sk/i/oY-OmnrWe4cTY)
--Возьмите ваш Android телефон/планшет(версия должна быть от 2.3 и выше)
--Перейдите в "Настройки"->"Приложения".
--Поставьте галочку напротив "Неизвестные источники"
--Перейдите в "Разработка"
--Поставьте галочки напротив "Отладка по USB"
--Подключите через USB ваш телефон/планшет к компьютеру. Не выбирайте опцию в телефоне/планшете "Включить USB-накопитель"
--Должно найтись Android устройство. https://yadi.sk/i/wFWZLxtie4DrN
-Если Windows не может найти драйвер для устройства, то укажите самостоятельно в папке C:\Android\sdk\extras\google\usb_driver есть файл android_winusb.inf
--В QtCreator'е нажмите на зеленого робота и выберите Сборка: Выпуск
--Нажмите зеленую стрелку(Запустить)(https://yadi.sk/i/hKHKL_Phe4EFL)
--Выберите свой телефон/планшет, нажмите OK и ждите завершения компиляции.
--После завершения компиляции Novacoin-Qt будет установлен на ваш телефон/планшет и запущен. А в папке C:\Android\build-novacoin-qt-Android_armeabi_v7a_GCC_4_9_Qt_5_4_0-Release\android-build\bin будет файл QtApp-debug.apk. Переименуйте его в Novacoin-Qt-0.5.1-debug.apk и можно распростронять :)
+-Задайте имя пакета "org.fortytwo.coin", выберите иконки для приложения (находятся в папке C:\Android\novacoin-master\src\qt\res\icons, для Google Play Market иконка должна быть не менее 512x512), выберите "целевой SDK: API 21"(https://yadi.sk/i/oY-OmnrWe4cTY)
+-В QtCreator'е нажмите "Сборка"->"Собрать проект "novacoin-qt""->"Сохранить все" и ждите завершения компиляции.
+-После завершения компиляции в папке C:\Android\build-novacoin-qt-Android_armeabi_v7a_GCC_4_9_Qt_5_6_0-Release\android-build\bin будет файл QtApp-debug.apk. Переименуйте его в novacoin-qt.apk и можно распростронять.
 
 Изменения для Android X86
-1. Добавить путь C:\Android\android-ndk-r10d\toolchains\x86-4.9\prebuilt\windows-x86_64\bin в переменную PATH
+1. Добавить путь C:\Android\android-ndk-r13b\toolchains\x86-4.9\prebuilt\windows-x86_64\bin в системную переменную PATH
 2. Изменить системные переменные так:
 
-ANDROID_DEV /c/Android/android-ndk-r10d/platforms/android-9/arch-x86/usr
-AR /c/Android/android-ndk-r10d/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-ar
-AS /c/Android/android-ndk-r10d/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-as
-CC /c/Android/android-ndk-r10d/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-gcc
-CFLAGS --sysroot=/c/Android/android-ndk-r10d/platforms/android-9/arch-x86/
-CPP /c/Android/android-ndk-r10d/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-cpp
-CPPFLAGS --sysroot=/c/Android/android-ndk-r10d/platforms/android-9/arch-x86/
-CXX /c/Android/android-ndk-r10d/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-g++
-CXXFLAGS --sysroot=/c/Android/android-ndk-r10d/platforms/android-9/arch-x86/ -I/c/Android/android-ndk-r10d/sources/cxx-stl/gnu-libstdc++/4.9/include -I/c/Android/android-ndk-r10d/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include
-LD /c/Android/android-ndk-r10d/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-ld
-NDK_PROJECT_PATH C:\Android\android-ndk-r10d
-RANLIB /c/Android/android-ndk-r10d/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-ranlib
+ANDROID_DEV /c/Android/android-ndk-r13b/platforms/android-9/arch-x86/usr
+AR /c/Android/android-ndk-r13b/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-ar
+AS /c/Android/android-ndk-r13b/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-as
+CC /c/Android/android-ndk-r13b/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-gcc
+CFLAGS --sysroot=/c/Android/android-ndk-r13b/platforms/android-9/arch-x86/
+CPP /c/Android/android-ndk-r13b/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-cpp
+CPPFLAGS --sysroot=/c/Android/android-ndk-r13b/platforms/android-9/arch-x86/
+CXX /c/Android/android-ndk-r13b/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-g++
+CXXFLAGS --sysroot=/c/Android/android-ndk-r13b/platforms/android-9/arch-x86/ -I/c/Android/android-ndk-r13b/sources/cxx-stl/gnu-libstdc++/4.9/include -I/c/Android/android-ndk-r13b/sources/cxx-stl/gnu-libstdc++/4.9/libs/x86/include
+LD /c/Android/android-ndk-r13b/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-ld
+RANLIB /c/Android/android-ndk-r13b/toolchains/x86-4.9/prebuilt/windows-x86_64/bin/i686-linux-android-ranlib
 
 3. При построении OpenSSL выполнить
 Configure no-shared no-dso android-x86
index 885b7fb..5ac6ef3 100644 (file)
@@ -25,8 +25,7 @@ msys-libtool-bin
 и распакуйте на C:\
 
 1.4 Добавьте в переменную PATH путь C:\mingw32\bin;
-Подробное описание как это сделать на Windows 8, Windows 7, Windows XP и Windows Vista
-https://www.java.com/ru/download/help/path.xml
+Подробное описание как это сделать в Windows: https://www.java.com/ru/download/help/path.xml
 (только не нужно выполнять последний пункт из этой инструкции "Откройте заново окно командной строки и выполните код java." )
 
 Проверка что вы всё сделали правильно:
@@ -127,12 +126,12 @@ mingw32-make
 
 
 Qt4:
--Скачайте http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.zip
+-Скачайте http://download.qt-project.org/official_releases/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.zip
 -Распакуйте в C:\Qt
--Переименуйте папку qt-everywhere-opensource-src-4.8.6 в 4.8.6
+-Переименуйте папку qt-everywhere-opensource-src-4.8.7 в 4.8.7
 -Откройте командную строку Windows и выполните следующий код:
 
-cd C:\Qt\4.8.6
+cd C:\Qt\4.8.7
 
 configure -release -opensource -confirm-license -static -no-sql-sqlite -no-qt3support -no-opengl -qt-zlib -no-gif -qt-libpng -qt-libmng -no-libtiff -qt-libjpeg -no-dsp -no-vcproj -no-openssl -no-dbus -no-phonon -no-phonon-backend -no-multimedia -no-audio-backend -no-webkit -no-script -no-scripttools -no-declarative -no-declarative-debug -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -no-style-plastique -no-style-cleanlooks -no-style-motif -no-style-cde -nomake demos -nomake examples
 
@@ -151,56 +150,11 @@ mingw32-make
 -Перейдите в папку C:\MyProjects\novacoin-master\src
 -Откройте файл makefile.mingw в текстовом редакторе.(При написании инструкции использовался WordPad)
 -Добавьте  строчку USE_ASM:=1
--Поменяйте текущие INCLUDEPATHS, LIBPATHS, LIBS на:
-
-BOOST_SUFFIX?=-mgw49-mt-s-1_57
-
-INCLUDEPATHS= \
- -I"$(CURDIR)" \
- -I"/c/deps/boost_1_57_0" \
- -I"/c/deps" \
- -I"/c/deps/db-6.0.20/build_unix" \
- -I"/c/deps/openssl-1.0.2/include"
-LIBPATHS= \
- -L"$(CURDIR)/leveldb" \
- -L"/c/deps/boost_1_57_0/stage/lib" \
- -L"/c/deps/db-6.0.20/build_unix" \
- -L"/c/deps/openssl-1.0.2"
-
-LIBS= \
-  -l leveldb \
-  -l memenv \
-  -l boost_system$(BOOST_SUFFIX) \
-  -l boost_filesystem$(BOOST_SUFFIX) \
-  -l boost_program_options$(BOOST_SUFFIX) \
-  -l boost_thread$(BOOST_SUFFIX) \
-  -l boost_chrono$(BOOST_SUFFIX) \
-  -l db_cxx \
-  -l ssl \
-  -l crypto
-
--Поменяйте LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat на 
-LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -Wl,--large-address-aware -static
-
 -Если вы хотите использовать LevelDB как базу блоков то измените:
 USE_LEVELDB:=0 
 на
 USE_LEVELDB:=1
 (выше USE_IPV6:=1)
-Так же измените 
-cd leveldb; make; cd ..
-на 
-cd leveldb; TARGET_OS=NATIVE_WINDOWS make libleveldb.a libmemenv.a; cd ..
-
-Ещё измените
-obj/txdb-leveldb.o: leveldb/libleveldb.lib
-на
-obj/txdb-leveldb.o: leveldb/libleveldb.a
-
-
-
-Если вы хотите использовать BerkeleyDB как базу блоков, то просто удалите строчку USE_LEVELDB:=1
 
 -Сохраните измененный файл makefile.mingw
 
@@ -285,14 +239,14 @@ mingw32-make -f Makefile.Release
 
 Qt4 + транзакционный индекс BDB
 
-set PATH=%PATH%;C:\Qt\4.8.6\bin
+set PATH=%PATH%;C:\Qt\4.8.7\bin
 cd C:\MyProjects\novacoin-master
 qmake "USE_IPV6=1" "USE_ASM=1" novacoin-qt.pro
 mingw32-make -f Makefile.Release
 
 Qt4 + транзакционный индекс LevelDB
 
-set PATH=%PATH%;C:\Qt\4.8.6\bin
+set PATH=%PATH%;C:\Qt\4.8.7\bin
 cd C:\MyProjects\novacoin-master
 qmake "USE_IPV6=1" "USE_LEVELDB=1" "USE_ASM=1" novacoin-qt.pro
 mingw32-make -f Makefile.Release
@@ -400,9 +354,9 @@ qmake qttranslations.pro
 mingw32-make
 
 Qt4:
--Скачайте http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.zip
+-Скачайте http://download.qt-project.org/official_releases/qt/4.8/4.8.7/qt-everywhere-opensource-src-4.8.7.zip
 -Распакуйте в C:\Qt
--Переименуйте папку qt-everywhere-opensource-src-4.8.6 в 4.8.6-x64
+-Переименуйте папку qt-everywhere-opensource-src-4.8.7 в 4.8.7-x64
 -Откройте командную строку Windows и выполните следующий код:
 
 configure -release -opensource -confirm-license -static -no-sql-sqlite -no-qt3support -no-opengl -qt-zlib -no-gif -qt-libpng -qt-libmng -no-libtiff -qt-libjpeg -no-dsp -no-vcproj -no-openssl -no-dbus -no-phonon -no-phonon-backend -no-multimedia -no-audio-backend -no-webkit -no-script -no-scripttools -no-declarative -no-declarative-debug -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -no-style-plastique -no-style-cleanlooks -no-style-motif -no-style-cde -nomake demos -nomake examples
@@ -480,14 +434,14 @@ mingw32-make -f Makefile.Release
 
 Qt4 + транзакционный индекс BDB
 
-set PATH=%PATH%;C:\Qt\4.8.6-x64\bin
+set PATH=%PATH%;C:\Qt\4.8.7-x64\bin
 cd C:\MyProjects\novacoin-master
 qmake "USE_IPV6=1" "USE_ASM=1" novacoin-qt64.pro
 mingw32-make -f Makefile.Release
 
 Qt4 + транзакционный индекс LevelDB
 
-set PATH=%PATH%;C:\Qt\4.8.6-x64\bin
+set PATH=%PATH%;C:\Qt\4.8.7-x64\bin
 cd C:\MyProjects\novacoin-master
 qmake "USE_IPV6=1" "USE_LEVELDB=1" "USE_ASM=1" novacoin-qt64.pro
 mingw32-make -f Makefile.Release
index 5c0a38e..7196859 100644 (file)
@@ -1,24 +1,28 @@
 \feffДанный способ должен подходить для любой Unix системы: Linux, FreeBSD, MacOS X
-При написании этого руководства использовался Linux Mint 17.1 ( http://linuxmint.com/ )
+Данное руководство писалось на Linux Mint 17.1 ( http://linuxmint.com/ ) и проверялось на Ubuntu 14.04 (https://www.ubuntu.com/)
+
 1) Подготовка системы для кросскомпиляции.
 
- sudo apt-get install git bison cmake flex g++ gperf ruby scons libghc-zlib-dev  libghc-zlib-bindings-dev
+sudo apt-get install git bison cmake flex g++ gperf ruby scons libghc-zlib-dev  libghc-zlib-bindings-dev
 
 2) Установка MXE и зависимостей
- cd /home/<ваше имя>/
- git clone https://github.com/mxe/mxe.git
+
+cd /home/<ваше имя>/
+git clone https://github.com/mxe/mxe.git
  
+sudo apt-get install autoconf automake autopoint libtool intltool libtoolize p7zip-full libgtk2.0-dev
 
 2.1) gcc
- cd /home/<ваше имя>/mxe
- make gcc zlib libpng
+
+cd /home/<ваше имя>/mxe
+make gcc zlib libpng
 
 Проверка того, что установка gcc прошла успешно:
 В папке /home/<ваше имя>/mxe/usr/bin должен появиться файл i686-w64-mingw32.static-gcc и i686-w64-mingw32.static-g++
-И при запуске ./i686-w64-mingw32.static-gcc -v должно выдаваться
+И при запуске /home/<ваше имя>/mxe/usr/bin/i686-w64-mingw32.static-gcc -v должно выдаваться
 ......
 Thread model: win32
-gcc version 4.9.3 (GCC)
+gcc version 5.4.0 (GCC)
 
 В папке /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib должны быть файлы:
 libz.a
@@ -26,8 +30,8 @@ libpng.a
 
 2.2) Openssl
  
- cd /home/<ваше имя>/mxe
- make openssl
+cd /home/<ваше имя>/mxe
+make openssl
 
 Проверка что установка Openssl прошла успешно:
 В папке /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib должны появиться два файла
@@ -37,8 +41,8 @@ libpng.a
 
 2.3) Boost
 
- cd /home/<ваше имя>/mxe
- make boost
+cd /home/<ваше имя>/mxe
+make boost
 
 Проверка что установка Boost прошла успешно:
 В /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib папке должны появиться файлы:
@@ -56,11 +60,15 @@ libpng.a
 на
 #include <winioctl.h>
 -Сохраните файл
--Откройте терминал
- cd /home/<ваше имя>/db-6.0.20/build_unix
- export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
- ../dist/configure --host=i686-w64-mingw32.static --enable-mingw --enable-cxx --disable-shared --disable-replication
- make
+-Откройте терминал:
+
+cd /home/<ваше имя>/db-6.0.20/dist
+chmod +x configure
+cd
+cd /home/<ваше имя>/db-6.0.20/build_unix
+export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
+../dist/configure --host=i686-w64-mingw32.static --enable-mingw --enable-cxx --disable-shared --disable-replication
+make
 
 Проверка, что установка Berkeley DB прошла успешно:
 В папке /home/<ваше имя>/db-6.0.20/build_unix должны появиться файлы:
@@ -72,10 +80,11 @@ libdb_cxx.a
 -Распакуйте в домашнюю папку
 -Откройте терминал:
 
- export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
- cd /home/<ваше имя>/qrencode-3.4.4
- ./configure --host=i686-w64-mingw32.static --enable-static --disable-shared --without-tools
- make
+export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
+cd /home/<ваше имя>/qrencode-3.4.4
+chmod +x configure
+./configure --host=i686-w64-mingw32.static --enable-static --disable-shared --without-tools
+make
 
 Проверка что qrencode успешно собралась:
 в папке /home/<ваше имя>/qrencode-3.4.4/.libs должен быть файл:
@@ -84,51 +93,52 @@ libqrencode.a
 2.6 Qt 5 и Qt 4
 
 Qt 4
--Откройте терминал
+-Откройте терминал:
 
- cd /home/<ваше имя>/mxe
- make qt
+cd /home/<ваше имя>/mxe
+make qt
 
 Проверка что Qt4 собрался правильно:
--Откройте терминал
--Введите следующие команды
- export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
- i686-w64-mingw32.static-qmake-qt4 -v
+-Откройте терминал:
+
+export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
+i686-w64-mingw32.static-qmake-qt4 -v
 
 -Должно появиться в ответ
 QMake version 2.01a
 Using Qt version 4.8.7 in /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/qt/lib
 
 Qt 5
--Откройте терминал
+-Откройте терминал:
 
- export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
- cd /home/<ваше имя>/mxe
- make qtbase qttools qttranslations
+export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
+cd /home/<ваше имя>/mxe
+make qtbase qttools qttranslations
 
 Проверка что Qt5 собрался правильно:
--Откройте терминал
--Введите следующие команды
- export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
- i686-w64-mingw32.static-qmake-qt5 -v
+-Откройте терминал:
+
+export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
+i686-w64-mingw32.static-qmake-qt5 -v
 
 -Должно появиться в ответ
-QMake version 3.0
-Using Qt version 5.5.1 in /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/qt5/lib
+QMake version 3.1
+Using Qt version 5.8.0 in /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/qt5/lib
 
 3. Компиляция
 
 3.1 Скачиваем исходники
 -Перейдите в домашнюю папку
--Откройте терминал
+-Откройте терминал:
 
- git clone https://github.com/novacoin-project/novacoin.git
+git clone https://github.com/novacoin-project/novacoin.git
 
 3.2 Собираем novacoind 
--Откройте файл makefile.mingw в текстовом редакторе.(При написании инструкции использовался Pluma 1.8.1)
--Вставьте 
+-Откройте файл makefile.mingw в текстовом редакторе (например, Pluma, gedit)
+-Замените CC=gcc на 
 CC=$(CROSS)gcc
 CXX=$(CROSS)g++
+
 -Добавьте  строчку USE_ASM:=1
 -Поменяйте текущие INCLUDEPATHS, LIBPATHS, LIBS на:
 
@@ -179,7 +189,7 @@ CXX=$(CROSS)g++
 Сохраните файл
 
 Снова возвращаемся в файл makefile.mingw, измените 
-cd leveldb; make; cd ..
+cd leveldb;TARGET_OS=NATIVE_WINDOWS make libleveldb.a libmemenv.a; cd ..
 на 
 cd leveldb; TARGET_OS=NATIVE_WINDOWS make CROSS=i686-w64-mingw32.static- libleveldb.a libmemenv.a; cd ..
 
@@ -200,28 +210,26 @@ clean:
 
 -Сохраните измененный файл makefile.mingw
 
--Откройте терминал
+-Откройте терминал:
+
 cd /home/<ваше имя>/novacoin/src
 export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
 make -j n CROSS=i686-w64-mingw32.static- -f makefile.mingw (вместо n количество ядер вашего процессора, которые вы хотите выделить под сборку)
 strip novacoind.exe
 
-
-Во время линковки будут выдаваться подобные сообщения:
-libboost_thread_win32-mt.a(thread.o): duplicate section `.rdata$_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian9bad_monthEEEEE[__ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian9bad_monthEEEEE]' has different size
-Игнорируйте их. На работоспособность программы это никак не влияет
-
+Если всё сделано правильно, то файл novacoind.exe будет находится в папке /home/<ваше имя>/novacoin/src.
 
 3.3 Собираем Novacoin QT
 
 Внимание: Если вы хотите собирать Novacoin Qt с LevelDB, но пропустили шаг со сборкой novacoind.exe, то 
 -Измените Makefile в папке leveldb также как в пункте 3.2
--Откройте терминал и выполните следующие команды:
+-Откройте терминал:
+
 export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
 cd /home/<ваше имя>/novacoin/src/leveldb
 TARGET_OS=NATIVE_WINDOWS make CROSS=i686-w64-mingw32.static- libleveldb.a libmemenv.a
 
--Откройте файл /home/<ваше имя>/novacoin/novacoin-qt.pro в текстовом редакторе(при написании инструкции использовался Pluma 1.8.1)
+-Откройте файл /home/<ваше имя>/novacoin/novacoin-qt.pro в текстовом редакторе (например, Pluma, gedit)
 -Ниже 
 # Dependency library locations can be customized with:
 #    BOOST_INCLUDE_PATH, BOOST_LIB_PATH, BDB_INCLUDE_PATH,
@@ -247,7 +255,7 @@ LIBS += -lshlwapi
 Если в файле нет такой строчки CONFIG += static , то добавьте её.
 
 Измените 
-win32:QMAKE_LFLAGS........................
+win32:QMAKE_LFLAGS *= -Wl,--dynamicbase -Wl,--nxcompat
 на 
 win32:QMAKE_LFLAGS *= -Wl,--large-address-aware -static 
 
@@ -257,7 +265,7 @@ win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe
 win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
 
 -Сохраните измененный файл novacoin-qt.pro
--Откройте терминал и выполните следующие команды
+-Откройте терминал и выполните следующие команды:
 
 Qt4 + транзакционный индекс LevelDB
 
@@ -287,11 +295,7 @@ cd /home/<ваше имя>/novacoin
 i686-w64-mingw32.static-qmake-qt5 "USE_IPV6=1" "USE_ASM=1" novacoin-qt.pro
 make -j n -f Makefile.Release  (вместо n количество ядер вашего процессора, которые вы хотите выделить под сборку)
 
-
-Если всё сделано правильно, то файл novacoin-qt.exe будет находится в папке /home/<ваше имя>/novacoin/release
-Во время линковки будут выдаваться подобные сообщения:
-libboost_thread_win32-mt.a(thread.o): duplicate section `.rdata$_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian9bad_monthEEEEE[__ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian9bad_monthEEEEE]' has different size
-Игнорируйте их. На работоспособность программы это никак не влияет 
+Если всё сделано правильно, то файл novacoin-qt.exe будет находится в папке /home/<ваше имя>/novacoin/release.
 
 Если вы хотите уменьшить размер бинарных файлов, то
 1) Перейдите на сайт http://upx.sourceforge.net/#downloadupx
diff --git a/doc/novacoin_logo_doxygen.png b/doc/novacoin_logo_doxygen.png
new file mode 100644 (file)
index 0000000..b14d47a
Binary files /dev/null and b/doc/novacoin_logo_doxygen.png differ
index 955bcfa..b2d72d8 100644 (file)
@@ -16,7 +16,7 @@ for Debian and Ubuntu  <= 11.10 :
 
 ::
 
-    apt-get install qt4-qmake libqt4-dev build-essential libboost-dev libboost-system-dev \
+    sudo apt-get install qt4-qmake libqt4-dev build-essential libboost-dev libboost-system-dev \
         libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev \
         libssl-dev libdb4.8++-dev
 
@@ -24,21 +24,43 @@ for Ubuntu >= 12.04 (please read the 'Berkely DB version warning' below):
 
 ::
 
-    apt-get install qt4-qmake libqt4-dev build-essential libboost-dev libboost-system-dev \
+    sudo apt-get install qt4-qmake libqt4-dev build-essential libboost-dev libboost-system-dev \
         libboost-filesystem-dev libboost-program-options-dev libboost-thread-dev \
         libssl-dev libdb++-dev
+               
+install Git:
 
-then execute the following:
+::
+
+    sudo apt-get install git
+
+clone the repository :
 
 ::
 
-    qmake
+    git clone https://github.com/novacoin-project/novacoin
+   
+
+Execute the following:
+
+::
+
+    cd novacoin
+    qmake USE_O3=1 USE_ASM=1 RELEASE=1
     make
 
 Alternatively, install Qt Creator and open the `novacoin-qt.pro` file.
 
 An executable named `novacoin-qt` will be built.
 
+To build novacoind execute the following:
+
+::
+
+    cd src
+    make -f makefile.unix USE_O3=1 USE_ASM=1 STATIC=1
+    strip novacoind
+
 
 Windows
 --------
index b32b86e..70b807a 100644 (file)
@@ -1110,6 +1110,16 @@ json_spirit::Value CRPCTable::execute(const std::string &strMethod, const json_s
     }
 }
 
+std::vector<std::string> CRPCTable::listCommands() const
+{
+    std::vector<std::string> commandList;
+    typedef std::map<std::string, const CRPCCommand*> commandMap;
+
+    std::transform( mapCommands.begin(), mapCommands.end(),
+                   std::back_inserter(commandList),
+                   boost::bind(&commandMap::value_type::first,_1) );
+    return commandList;
+}
 
 Object CallRPC(const string& strMethod, const Array& params)
 {
index 6c707ea..ba7c0fb 100644 (file)
@@ -119,6 +119,12 @@ public:
      * @throws an exception (json_spirit::Value) when an error happens.
      */
     json_spirit::Value execute(const std::string &method, const json_spirit::Array &params) const;
+
+    /**
+    * Returns a list of registered commands
+    * @returns List of registered commands.
+    */
+    std::vector<std::string> listCommands() const;
 };
 
 extern const CRPCTable tableRPC;
index 9e91cb1..6569989 100644 (file)
@@ -67,10 +67,7 @@ AskPassphraseDialog::AskPassphraseDialog(Mode mode, QWidget *parent) :
 
 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()));
+    secureClearPassFields();
     delete ui;
 }
 
@@ -92,6 +89,8 @@ void AskPassphraseDialog::accept()
     oldpass.assign(ui->passEdit1->text().toStdString().c_str());
     newpass1.assign(ui->passEdit2->text().toStdString().c_str());
     newpass2.assign(ui->passEdit3->text().toStdString().c_str());
+       
+       secureClearPassFields();
 
     switch(mode)
     {
@@ -267,3 +266,17 @@ bool AskPassphraseDialog::eventFilter(QObject *object, QEvent *event)
     }
     return QDialog::eventFilter(object, event);
 }
+
+static void SecureClearQLineEdit(QLineEdit* edit)
+{
+    // Attempt to overwrite text so that they do not linger around in memory
+    edit->setText(QString(" ").repeated(edit->text().size()));
+    edit->clear();
+}
+
+void AskPassphraseDialog::secureClearPassFields()
+{
+    SecureClearQLineEdit(ui->passEdit1);
+    SecureClearQLineEdit(ui->passEdit2);
+    SecureClearQLineEdit(ui->passEdit3);
+}
\ No newline at end of file
index 5909fb6..9e46410 100644 (file)
@@ -39,6 +39,7 @@ private:
 
 private slots:
     void textChanged();
+       void secureClearPassFields();
     bool event(QEvent *event);
     bool eventFilter(QObject *, QEvent *event);
 };
index 9514ec8..7248cf7 100644 (file)
@@ -21,7 +21,7 @@ BitcoinAmountField::BitcoinAmountField(QWidget *parent):
     amount->setLocale(QLocale::c());
     amount->setDecimals(8);
     amount->installEventFilter(this);
-    amount->setMaximumWidth(170);
+    amount->setMaximumWidth(240);
     amount->setSingleStep(0.001);
 
     QHBoxLayout *layout = new QHBoxLayout(this);
index 15c8075..db888a8 100644 (file)
@@ -101,17 +101,74 @@ BitcoinGUI::BitcoinGUI(QWidget *parent):
     setUnifiedTitleAndToolBarOnMac(true);
     QApplication::setAttribute(Qt::AA_DontShowIconsInMenus);
 #endif
+
+    int nQtStyle = GetArg("-qtstyle", 0);
+    if(nQtStyle < 0) nQtStyle = 0;
+
+    if(!nQtStyle) {
+        resize(850, 550);
+        qApp->setStyleSheet("");
+    } else if(nQtStyle == 1) {
+        resize(850, 525);
+#ifndef Q_OS_MAC
+        qApp->setStyleSheet("QToolBar QToolButton { text-align: center; width: 100%; \
+          padding-left: 5px; padding-right: 5px; padding-top: 2px; padding-bottom: 2px; \
+          margin-top: 2px; } \
+          QToolBar QToolButton:hover { font-weight: bold; } \
+          #toolbar { border: none; height: 100%; min-width: 150px; max-width: 150px; } \
+          QMenuBar { min-height: 20px; }");
+#else
+        qApp->setStyleSheet("QToolBar QToolButton { text-align: center; width: 100%; \
+          padding-left: 5px; padding-right: 5px; padding-top: 2px; padding-bottom: 2px; \
+          margin-top: 2px; } \
+          QToolBar QToolButton:hover { font-weight: bold; background-color: transparent; } \
+          #toolbar { border: none; height: 100%; min-width: 150px; max-width: 150px; }");
+#endif
+    } else {
+        resize(850, 525);
+#ifndef Q_OS_MAC
+        qApp->setStyleSheet("QToolBar QToolButton { text-align: center; width: 100%; \
+          color: white; background-color: grey; padding-left: 5px; padding-right: 5px; \
+          padding-top: 2px; padding-bottom: 2px; margin-top: 2px; } \
+          QToolBar QToolButton:hover { font-weight: bold; \
+          background-color: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 2, \
+          stop: 0 #808080, stop: 1 #d2d2d2); } \
+          #toolbar { border: none; height: 100%; min-width: 150px; max-width: 150px; \
+          background-color: grey; } \
+          QMenuBar { color: white; background-color: grey; } \
+          QMenuBar::item { color: white; background-color: grey; \
+          padding-top: 6px; padding-bottom: 6px; \
+          padding-left: 10px; padding-right: 10px; } \
+          QMenuBar::item:selected { background-color: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 2, \
+          stop: 0 #808080, stop: 1 #d2d2d2); } \
+          QMenu { border: 1px solid; color: black; background-color: grey; } \
+          QMenu::item { background-color: grey; } \
+          QMenu::item:disabled { color: gray; } \
+          QMenu::item:enabled:selected { color: white; background-color: grey; } \
+          QMenu::separator { height: 4px; }");
+#else
+        qApp->setStyleSheet("QToolBar QToolButton { text-align: center; width: 100%; \
+          color: white; padding-left: 5px; padding-right: 5px; \
+          padding-top: 2px; padding-bottom: 2px; margin-top: 2px; } \
+          QToolBar QToolButton:hover { font-weight: bold; \
+          background-color: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 2, \
+          stop: 0 #808080, stop: 1 #d2d2d2); } \
+          #toolbar { border: none; height: 100%; min-width: 150px; max-width: 150px; \
+          background-color: grey; }");
+#endif
+    }
+
     // Accept D&D of URIs
     setAcceptDrops(true);
 
     // Create actions for the toolbar, menu bar and tray/dock icon
-    createActions();
+    createActions(nQtStyle);
 
     // Create application menu bar
     createMenuBar();
 
     // Create the toolbars
-    createToolBars();
+    createToolBars(nQtStyle);
 
     // Create the tray icon (or setup the dock icon)
     createTrayIcon();
@@ -237,7 +294,7 @@ BitcoinGUI::~BitcoinGUI()
     delete signVerifyMessageDialog;
 }
 
-void BitcoinGUI::createActions()
+void BitcoinGUI::createActions(int nQtStyle)
 {
     QActionGroup *tabGroup = new QActionGroup(this);
 
@@ -407,10 +464,22 @@ void BitcoinGUI::createMenuBar()
     help->addAction(aboutQtAction);
 }
 
-void BitcoinGUI::createToolBars()
+void BitcoinGUI::createToolBars(int nQtStyle)
 {
-    QToolBar *toolbar = addToolBar(tr("Tabs toolbar"));
-    toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+    QToolBar *toolbar = addToolBar(tr("Primary tool bar"));
+    toolbar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+    toolbar->setMovable(false);
+    toolbar->setIconSize(QSize(32, 32));
+
+    if(!nQtStyle) {
+        toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+    } else {
+        toolbar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+        toolbar->setObjectName("toolbar");
+        addToolBar(Qt::LeftToolBarArea, toolbar);
+        toolbar->setOrientation(Qt::Vertical);
+    }
+
     toolbar->addAction(overviewAction);
     toolbar->addAction(sendCoinsAction);
     toolbar->addAction(receiveCoinsAction);
index 20eb7ca..f4e72b3 100644 (file)
@@ -119,11 +119,11 @@ private:
     QMovie *syncIconMovie;
 
     /** Create the main UI actions. */
-    void createActions();
+    void createActions(int nQtStyle);
     /** Create the menu bar and sub-menus. */
     void createMenuBar();
     /** Create the toolbars */
-    void createToolBars();
+    void createToolBars(int nQtStyle);
     /** Create system tray (notification) icon */
     void createTrayIcon();
 
index f5b50f6..97390ea 100644 (file)
           </widget>
          </item>
          <item>
-          <widget class="QLineEdit" name="lineEdit"/>
+          <widget class="QLineEdit" name="lineEdit">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+          </widget>
          </item>
          <item>
           <widget class="QPushButton" name="clearButton">
index 5dcf9df..59553c3 100644 (file)
@@ -67,9 +67,9 @@ void OptionsModel::Init()
         if(fTestNet)
             settings.setValue("strThirdPartyTxUrls", "");
         else
-            settings.setValue("strThirdPartyTxUrls", "https://bitinfocharts.com/novacoin/tx/%s|https://explorer.novaco.in/tx/%s|https://bchain.info/NVC/tx/%s");
+            settings.setValue("strThirdPartyTxUrls", "https://bitinfocharts.com/novacoin/tx/%s|https://explorer.novaco.in/tx/%s|https://novacoin.ru/explorer/tx/%s|https://prohashing.com/explorer/novacoin/%s");
     }
-    strThirdPartyTxUrls = settings.value("strThirdPartyTxUrls", "https://bitinfocharts.com/novacoin/tx/%s|https://explorer.novaco.in/tx/%s|https://bchain.info/NVC/tx/%s").toString();
+    strThirdPartyTxUrls = settings.value("strThirdPartyTxUrls", "https://bitinfocharts.com/novacoin/tx/%s|https://explorer.novaco.in/tx/%s|https://novacoin.ru/explorer/tx/%s|https://prohashing.com/explorer/novacoin/%s").toString();
     fMinimizeToTray = settings.value("fMinimizeToTray", false).toBool();
     fMinimizeOnClose = settings.value("fMinimizeOnClose", false).toBool();
     fCoinControlFeatures = settings.value("fCoinControlFeatures", false).toBool();
index c793bf9..7e6ccd6 100644 (file)
@@ -13,6 +13,7 @@
 #include <QKeyEvent>
 #include <QUrl>
 #include <QScrollBar>
+#include <QStringList>
 
 #include <openssl/crypto.h>
 #include <db_cxx.h>
@@ -243,6 +244,14 @@ bool RPCConsole::eventFilter(QObject* obj, QEvent *event)
                 return true;
             }
             break;
+        case Qt::Key_Return:
+        case Qt::Key_Enter:
+            // forward these events to lineEdit
+            if(obj == autoCompleter->popup()) {
+                QApplication::postEvent(ui->lineEdit, 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
@@ -253,6 +262,7 @@ bool RPCConsole::eventFilter(QObject* obj, QEvent *event)
             {
                 ui->lineEdit->setFocus();
                 QApplication::postEvent(ui->lineEdit, new QKeyEvent(*keyevt));
+                autoCompleter->popup()->hide();
                 return true;
             }
         }
@@ -282,6 +292,24 @@ void RPCConsole::setClientModel(ClientModel *model)
         ui->isTestNet->setChecked(model->isTestNet());
 
         setNumBlocks(model->getNumBlocks(), model->getNumBlocksOfPeers());
+
+        //Setup autocomplete and attach it
+        QStringList wordList;
+        std::vector<std::string> commandList = tableRPC.listCommands();
+        for (size_t i = 0; i < commandList.size(); ++i)
+        {
+            wordList << commandList[i].c_str();
+            wordList << ("help " + commandList[i]).c_str();
+        }
+
+        wordList.sort();
+        autoCompleter = new QCompleter(wordList, this);
+        autoCompleter->setModelSorting(QCompleter::CaseSensitivelySortedModel);
+        // ui->lineEdit is initially disabled because running commands is only
+        // possible from now on.
+        ui->lineEdit->setEnabled(true);
+        ui->lineEdit->setCompleter(autoCompleter);
+        autoCompleter->popup()->installEventFilter(this);
     }
 }
 
index aa8c8f3..dbca630 100644 (file)
@@ -2,6 +2,7 @@
 #define RPCCONSOLE_H
 
 #include <QWidget>
+#include <QCompleter>
 
 namespace Ui {
     class RPCConsole;
@@ -80,6 +81,7 @@ private:
     ClientModel *clientModel;
     QStringList history;
     int historyPtr;
+       QCompleter *autoCompleter;
 
     void startExecutor();
 };
index 0782a46..7f39763 100644 (file)
@@ -140,12 +140,12 @@ void SignVerifyMessageDialog::on_signMessageButton_SM_clicked()
         return;
     }
 
-    CDataStream ss(SER_GETHASH, 0);
+    CHashWriter ss(SER_GETHASH, 0);
     ss << strMessageMagic;
     ss << ui->messageIn_SM->document()->toPlainText().toStdString();
 
     std::vector<unsigned char> vchSig;
-    if (!key.SignCompact(Hash(ss.begin(), ss.end()), vchSig))
+    if (!key.SignCompact(ss.GetHash(), vchSig))
     {
         ui->statusLabel_SM->setStyleSheet("QLabel { color: red; }");
         ui->statusLabel_SM->setText(QString("<nobr>") + tr("Message signing failed.") + QString("</nobr>"));
@@ -216,12 +216,12 @@ void SignVerifyMessageDialog::on_verifyMessageButton_VM_clicked()
         return;
     }
 
-    CDataStream ss(SER_GETHASH, 0);
+    CHashWriter ss(SER_GETHASH, 0);
     ss << strMessageMagic;
     ss << ui->messageIn_VM->document()->toPlainText().toStdString();
 
     CPubKey key;
-    if (!key.SetCompactSignature(Hash(ss.begin(), ss.end()), vchSig))
+    if (!key.SetCompactSignature(ss.GetHash(), vchSig))
     {
         ui->signatureIn_VM->setValid(false);
         ui->statusLabel_VM->setStyleSheet("QLabel { color: red; }");
index 321d587..88b119a 100644 (file)
@@ -259,7 +259,7 @@ void TransactionView::chooseDate(int idx)
         break;
     case LastMonth:
         transactionProxyModel->setDateRange(
-                QDateTime(QDate(current.year(), current.month()-1, 1)),
+                QDateTime(QDate(current.year(), current.month(), 1).addMonths(-1)),
                 QDateTime(QDate(current.year(), current.month(), 1)));
         break;
     case ThisYear:
index 054dca2..69e436c 100644 (file)
@@ -102,7 +102,7 @@ double GetPoSKernelPS()
 Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool fPrintTransactionDetail)
 {
     Object result;
-    result.push_back(Pair("hash", block.GetHash().GetHex()));
+    result.push_back(Pair("hash", blockindex->GetBlockHash().GetHex()));
     CMerkleTx txGen(block.vtx[0]);
     txGen.SetMerkleBranch(&block);
     result.push_back(Pair("confirmations", (int)txGen.GetDepthInMainChain()));
index e6bc133..746c72c 100644 (file)
@@ -62,9 +62,10 @@ struct StunSrv {
 };
 
 /*---------------------------------------------------------------------*/
-static const int StunSrvListQty = 701; // Must be PRIME!!!!!
+// STUN server list from 2019-06-27
+static const int StunSrvListQty = 619; // Must be PRIME!!!!!
 
-static struct StunSrv StunSrvList[701] = {
+static struct StunSrv StunSrvList[619] = {
   {"iphone-stun.strato-iphone.de",     3478},
   {"stun.1-voip.com",  3478},
   {"stun.12connect.com",       3478},
@@ -72,7 +73,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.1531.ru",     3478},
   {"stun.1cbit.ru",    3478},
   {"stun.1und1.de",    3478},
-  {"stun.3clogic.com", 3478},
   {"stun.3cx.com",     3478},
   {"stun.3deluxe.de",  3478},
   {"stun.3wayint.com", 3478},
@@ -91,12 +91,9 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.aeta-audio.com",      3478},
   {"stun.aeta.com",    3478},
   {"stun.alberon.cz",  3478},
-  {"stun.alexeev.in.ua",       3478},
   {"stun.allflac.com", 3478},
   {"stun.alphacron.de",        3478},
   {"stun.alpirsbacher.de",     3478},
-  {"stun.amiwx.com",   3478},
-  {"stun.anglodance.co.uk",    3478},
   {"stun.anlx.net",    3478},
   {"stun.ansur.no",    3478},
   {"stun.antisip.com", 3478},
@@ -114,7 +111,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.b2b2c.ca",    3478},
   {"stun.babelforce.com",      3478},
   {"stun.bahnhof.net", 3478},
-  {"stun.baileymarine.co.uk",  3478},
   {"stun.baltmannsweiler.de",  3478},
   {"stun.bandyer.com", 3478},
   {"stun.barbaratabita.it",    3478},
@@ -129,20 +125,14 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.bethesda.net",        3478},
   {"stun.biamp.com",   3478},
   {"stun.bimp.fr",     3478},
-  {"stun.bistri.com",  3478},
   {"stun.bitburger.de",        3478},
   {"stun.bluesip.net", 3478},
-  {"stun.bolignet.dk", 3478},
-  {"stun.bomgar.com",  3478},
   {"stun.botonakis.com",       3478},
   {"stun.bridesbay.com",       3478},
   {"stun.budgetsip.com",       3478},
   {"stun.bultest.org", 3478},
-  {"stun.bungi.com",   3478},
   {"stun.business-isp.nl",     3478},
-  {"stun.bytedesk.com",        3478},
   {"stun.cablenet-as.net",     3478},
-  {"stun.cabsoapp.com",        3478},
   {"stun.call.me",     3478},
   {"stun.callromania.ro",      3478},
   {"stun.callwithus.com",      3478},
@@ -157,15 +147,12 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.chewinggum.nl",       3478},
   {"stun.cibercloud.com.br",   3478},
   {"stun.circledoo.com",       3478},
-  {"stun.cle.com.ua",  3478},
   {"stun.clickphone.ro",       3478},
-  {"stun.clonesgame.com",      3478},
   {"stun.cloopen.com", 3478},
   {"stun.club-galicia-bonn.de",        3478},
   {"stun.cnj.gov.br",  3478},
   {"stun.cnj.jus.br",  3478},
   {"stun.coffee-sen.com",      3478},
-  {"stun.commpeak.com",        3478},
   {"stun.comrex.com",  3478},
   {"stun.comtube.com", 3478},
   {"stun.comtube.ru",  3478},
@@ -181,7 +168,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.csforall.org",        3478},
   {"stun.ctafauni.it", 3478},
   {"stun.databay.de",  3478},
-  {"stun.davemadethis.com",    3478},
   {"stun.dcalling.de", 3478},
   {"stun.deepfinesse.com",     3478},
   {"stun.degaronline.com",     3478},
@@ -190,7 +176,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.deutscherskiverband.de",      3478},
   {"stun.diallog.com", 3478},
   {"stun.dincloud.com",        3478},
-  {"stun.disroot.org", 3478},
   {"stun.dls.net",     3478},
   {"stun.dokom.net",   3478},
   {"stun.dorfbrunnen.eu",      3478},
@@ -201,7 +186,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.dsin-berufsschulen.de",       3478},
   {"stun.dsin-blog.de",        3478},
   {"stun.dukun.de",    3478},
-  {"stun.dumdarac.com",        3478},
   {"stun.dunyatelekom.com",    3478},
   {"stun.dus.net",     3478},
   {"stun.eaclipt.org", 3478},
@@ -211,7 +195,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.edwin-wiegele.at",    3478},
   {"stun.effexx.com",  3478},
   {"stun.einfachcallback.de",  3478},
-  {"stun.ekiga.net",   3478},
   {"stun.ekir.de",     3478},
   {"stun.eleusi.com",  3478},
   {"stun.elitetele.com",       3478},
@@ -220,13 +203,11 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.eoni.com",    3478},
   {"stun.epygi.com",   3478},
   {"stun.eurescom.de", 3478},
-  {"stun.eurescom.eu", 3478},
   {"stun.eurosys.be",  3478},
   {"stun.evolution-movement.com",      3478},
   {"stun.exoplatform.org",     3478},
   {"stun.expandable.io",       3478},
   {"stun.extrasaltmobile.com", 3478},
-  {"stun.ezuce.com",   3478},
   {"stun.faceflow.com",        3478},
   {"stun.faelix.net",  3478},
   {"stun.fairytel.at", 3478},
@@ -245,23 +226,19 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.fondazioneroccochinnici.it",  3478},
   {"stun.framasoft.org",       3478},
   {"stun.framatalk.org",       3478},
-  {"stun.francescopaologravina.it",    3478},
   {"stun.freecall.com",        3478},
   {"stun.freeswitch.org",      3478},
   {"stun.freevoipdeal.com",    3478},
   {"stun.frozenmountain.com",  3478},
   {"stun.funwithelectronics.com",      3478},
-  {"stun.fusion-lifestyle.eu", 3478},
   {"stun.futurasp.es", 3478},
   {"stun.galeriemagnet.at",    3478},
   {"stun.galerievorspann.com", 3478},
-  {"stun.gap.im",      3478},
   {"stun.geekyboo.com",        3478},
   {"stun.geesthacht.de",       3478},
   {"stun.genymotion.com",      3478},
   {"stun.geonet.ro",   3478},
   {"stun.getzoop.com", 3478},
-  {"stun.gezondheid-solidariteit.be",  3478},
   {"stun.gigaset.net", 3478},
   {"stun.gkarnet.org", 3478},
   {"stun.globalmeet.com",      3478},
@@ -271,7 +248,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.godatenow.com",       3478},
   {"stun.goldener-internetpreis.de",   3478},
   {"stun.goldfish.ie", 3478},
-  {"stun.goober.com",  3478},
   {"stun.gotye.com.cn",        3478},
   {"stun.graftlab.com",        3478},
   {"stun.gravitel.ru", 3478},
@@ -280,7 +256,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.gruene.at",   3478},
   {"stun.guenzburg.de",        3478},
   {"stun.gulfsip.com", 3478},
-  {"stun.gurumd.net",  3478},
   {"stun.h4v.eu",      3478},
   {"stun.hacknology.de",       3478},
   {"stun.halonet.pl",  3478},
@@ -292,7 +267,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.hide.me",     3478},
   {"stun.highfidelity.io",     3478},
   {"stun.hinet.net",   3478},
-  {"stun.hiphone.org", 3478},
   {"stun.histocaffe.com",      3478},
   {"stun.hitv.com",    3478},
   {"stun.hobby-drechselei.de", 3478},
@@ -302,13 +276,10 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.hotelparadisebeach.it",       3478},
   {"stun.ica-net.it",  3478},
   {"stun.ideasip.com", 3478},
-  {"stun.idnext.net",  3478},
   {"stun.ihk.cn",      3478},
   {"stun.imafex.sk",   3478},
   {"stun.imp.ch",      3478},
   {"stun.ines-seidel.de",      3478},
-  {"stun.inetvl.ru",   3478},
-  {"stun.infoartikel.site",    3478},
   {"stun.infra.net",   3478},
   {"stun.innotel.com.au",      3478},
   {"stun.innovaphone.com",     3478},
@@ -318,14 +289,13 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.interplanet.it",      3478},
   {"stun.intervoip.com",       3478},
   {"stun.invaluable.com",      3478},
-  {"stun.ipex.cz",     3478},
   {"stun.ippi.com",    3478},
   {"stun.ippi.fr",     3478},
+  {"stun.ipshka.com",  3478},
   {"stun.irishvoip.com",       3478},
   {"stun.isp.net.au",  3478},
   {"stun.issabel.org", 3478},
   {"stun.istitutogramscisiciliano.it", 3478},
-  {"stun.it-zone.org", 3478},
   {"stun.it1.hr",      3478},
   {"stun.ivao.aero",   3478},
   {"stun.ivao.co.uk",  3478},
@@ -335,7 +305,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.jabbim.cz",   3478},
   {"stun.janmedia.pl", 3478},
   {"stun.jay.net",     3478},
-  {"stun.jesuislibre.net",     3478},
   {"stun.jowisoftware.de",     3478},
   {"stun.jpluso.cz",   3478},
   {"stun.julienschmidt.com",   3478},
@@ -343,23 +312,15 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.jumblo.com",  3478},
   {"stun.junet.se",    3478},
   {"stun.justvoip.com",        3478},
-  {"stun.kanatasymphony.ca",   3478},
   {"stun.kanojo.de",   3478},
-  {"stun.kaospilot.dk",        3478},
-  {"stun.kaospilot.no",        3478},
-  {"stun.kaospilot.se",        3478},
-  {"stun.kaospilots.dk",       3478},
   {"stun.kaseya.com",  3478},
   {"stun.katholischekirche-ruegen.de", 3478},
   {"stun.kaznpu.kz",   3478},
-  {"stun.keatsmuseum.frl",     3478},
   {"stun.kedr.io",     3478},
   {"stun.kendama.ru",  3478},
   {"stun.kiesler.at",  3478},
   {"stun.kitamaebune.com",     3478},
-  {"stun.klimaschutzgarten.at",        3478},
   {"stun.ko2100.at",   3478},
-  {"stun.kolatzek.org",        3478},
   {"stun.komsa.de",    3478},
   {"stun.kore.com",    3478},
   {"stun.kostenloses-forum.com",       3478},
@@ -404,7 +365,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.mda.gov.br",  3478},
   {"stun.mdaemon.com", 3478},
   {"stun.medvc.eu",    3478},
-  {"stun.meebl.de",    3478},
   {"stun.meetangee.com",       3478},
   {"stun.meetwife.com",        3478},
   {"stun.megakosmos.com.br",   3478},
@@ -417,7 +377,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.mls.com.br",  3478},
   {"stun.mobile-italia.com",   3478},
   {"stun.modulus.gr",  3478},
-  {"stun.modxclub.ru", 3478},
   {"stun.mondiaspora.net",     3478},
   {"stun.mondiaspora.org",     3478},
   {"stun.moonlight-stream.org",        3478},
@@ -436,7 +395,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.nabto.com",   3478},
   {"stun.nanocosmos.de",       3478},
   {"stun.naturfakta.com",      3478},
-  {"stun.naturfakta.no",       3478},
   {"stun.nautile.nc",  3478},
   {"stun.ncic.com",    3478},
   {"stun.neomedia.it", 3478},
@@ -462,10 +420,8 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.officinabit.com",     3478},
   {"stun.olimontel.it",        3478},
   {"stun.omnitor.se",  3478},
-  {"stun.omnivoice.eu",        3478},
   {"stun.oncloud7.ch", 3478},
   {"stun.onesuite.com",        3478},
-  {"stun.onez.cn",     3478},
   {"stun.onthenet.com.au",     3478},
   {"stun.ooma.com",    3478},
   {"stun.openjobs.hu", 3478},
@@ -475,14 +431,9 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.ortopediacoam.it",    3478},
   {"stun.osbid.cz",    3478},
   {"stun.otos.pl",     3478},
-  {"stun.ovesnekladruby.cz",   3478},
-  {"stun.ozekiphone.com",      3478},
   {"stun.pados.hu",    3478},
   {"stun.palava.tv",   3478},
   {"stun.parcodeinebrodi.it",  3478},
-  {"stun.parejas.net", 3478},
-  {"stun.pavelepifanov.org",   3478},
-  {"stun.pawlowicz.name",      3478},
   {"stun.pbo.ru",      3478},
   {"stun.peeters.com", 3478},
   {"stun.peethultra.be",       3478},
@@ -510,7 +461,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.qbictechnology.com",  3478},
   {"stun.qcol.net",    3478},
   {"stun.qq.com",      3478},
-  {"stun.qualitalia.fr",       3478},
   {"stun.qwant.com",   3478},
   {"stun.rackco.com",  3478},
   {"stun.racknine.net",        3478},
@@ -520,11 +470,9 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.realgarant.com",      3478},
   {"stun.redworks.nl", 3478},
   {"stun.revreso.de",  3478},
-  {"stun.ridesroadsandronman.com",     3478},
   {"stun.ringostat.com",       3478},
   {"stun.ringvoz.com", 3478},
   {"stun.rmf.pl",      3478},
-  {"stun.roannais-agglomeration.fr",   3478},
   {"stun.robocup.at",  3478},
   {"stun.rockenstein.de",      3478},
   {"stun.rolmail.net", 3478},
@@ -535,19 +483,13 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.rudtp.ru",    3478},
   {"stun.rynga.com",   3478},
   {"stun.sacko.com.au",        3478},
-  {"stun.salustelehealth.com", 3478},
   {"stun.samy.pl",     3478},
-  {"stun.sanierer.at", 3478},
-  {"stun.sante-solidarite.be", 3478},
   {"stun.saooti.com",  3478},
-  {"stun.saratov-rcdo.ru",     3478},
-  {"stun.saripkro.ru", 3478},
   {"stun.savemgo.com", 3478},
   {"stun.scalix.com",  3478},
   {"stun.schlund.de",  3478},
   {"stun.schoeffel.de",        3478},
   {"stun.schulinformatik.at",  3478},
-  {"stun.secret-wg.org",       3478},
   {"stun.selasky.org", 3478},
   {"stun.semiocast.com",       3478},
   {"stun.senstar.com", 3478},
@@ -556,12 +498,10 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.shadrinsk.net",       3478},
   {"stun.sharpbai.com",        3478},
   {"stun.shy.cz",      3478},
-  {"stun.sibel.by",    3478},
   {"stun.siedle.com",  3478},
   {"stun.sigmavoip.com",       3478},
   {"stun.signalwire.com",      3478},
   {"stun.simlar.org",  3478},
-  {"stun.simplewan.com",       3478},
   {"stun.sip.us",      3478},
   {"stun.sipdiscount.com",     3478},
   {"stun.sipgate.net", 10000},
@@ -569,8 +509,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.sipglobalphone.com",  3478},
   {"stun.siplogin.de", 3478},
   {"stun.sipnet.com",  3478},
-  {"stun.sipnet.net",  3478},
-  {"stun.sipnet.ru",   3478},
   {"stun.siportal.it", 3478},
   {"stun.sippeer.dk",  3478},
   {"stun.sipthor.net", 3478},
@@ -584,14 +522,11 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.skydrone.aero",       3478},
   {"stun.slackline.at",        3478},
   {"stun.sma.de",      3478},
-  {"stun.smart-university.ru", 3478},
   {"stun.smartvoip.com",       3478},
   {"stun.smdr.ru",     3478},
   {"stun.smsdiscount.com",     3478},
   {"stun.smslisto.com",        3478},
-  {"stun.snafu.de",    3478},
   {"stun.soho66.co.uk",        3478},
-  {"stun.soiro.ru",    3478},
   {"stun.sokoll.com",  3478},
   {"stun.solcon.nl",   3478},
   {"stun.solnet.ch",   3478},
@@ -625,12 +560,9 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.syncthing.net",       3478},
   {"stun.synergiejobs.be",     3478},
   {"stun.syrex.co.za", 3478},
-  {"stun.szatmarnet.hu",       3478},
   {"stun.t-online.de", 3478},
   {"stun.talk.by",     3478},
-  {"stun.talkfusionconnect.com",       3478},
   {"stun.talkho.com",  3478},
-  {"stun.talking-forex.com",   3478},
   {"stun.talks.by",    3478},
   {"stun.taxsee.com",  3478},
   {"stun.teamfon.de",  3478},
@@ -645,7 +577,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.telnyx.com",  3478},
   {"stun.telonline.com",       3478},
   {"stun.telviva.com", 3478},
-  {"stun.telz.com",    3478},
   {"stun.telzio.com",  3478},
   {"stun.testreach.com",       3478},
   {"stun.textz.com",   3478},
@@ -659,7 +590,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.touchcast.com",       3478},
   {"stun.training-online.eu",  3478},
   {"stun.trainingspace.online",        3478},
-  {"stun.transitiontown-essen.de",     3478},
   {"stun.trivenet.it", 3478},
   {"stun.ttmath.org",  3478},
   {"stun.tula.nu",     3478},
@@ -674,16 +604,11 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.vadacom.co.nz",       3478},
   {"stun.var6.cn",     3478},
   {"stun.vavadating.com",      3478},
-  {"stun.vbuzzer.com", 3478},
-  {"stun.vedamo.com",  3478},
   {"stun.verbo.be",    3478},
   {"stun.viagenie.ca", 3478},
-  {"stun.vietid.net",  3478},
   {"stun.villapalagonia.it",   3478},
   {"stun.vincross.com",        3478},
-  {"stun.vipgroup.net",        3478},
   {"stun.viptel.sk",   3478},
-  {"stun.virishi.net", 3478},
   {"stun.visocon.com", 3478},
   {"stun.viva.gr",     3478},
   {"stun.vivox.com",   3478},
@@ -698,7 +623,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.voipblast.com",       3478},
   {"stun.voipbuster.com",      3478},
   {"stun.voipbusterpro.com",   3478},
-  {"stun.voipcheap.co.uk",     3478},
   {"stun.voipcheap.com",       3478},
   {"stun.voipconnect.com",     3478},
   {"stun.voipdiscount.com",    3478},
@@ -718,14 +642,12 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.voipxs.nl",   3478},
   {"stun.voipzoom.com",        3478},
   {"stun.vomessen.de", 3478},
-  {"stun.voxgratia.org",       3478},
   {"stun.voxox.com",   3478},
   {"stun.voys.nl",     3478},
   {"stun.vozelia.com", 3478},
   {"stun.voztele.com", 3478},
   {"stun.voztovoice.org",      3478},
   {"stun.waterpolopalermo.it", 3478},
-  {"stun.watsh.tv",    3478},
   {"stun.wcoil.com",   3478},
   {"stun.webcalldirect.com",   3478},
   {"stun.webfreak.org",        3478},
@@ -733,8 +655,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.webmatrix.com.br",    3478},
   {"stun.webscience-journal.net",      3478},
   {"stun.weepee.org",  3478},
-  {"stun.weilnetz.de", 3478},
-  {"stun.welten-wechsler.de",  3478},
   {"stun.wemag.com",   3478},
   {"stun.westtel.ky",  3478},
   {"stun.whc.net",     3478},
@@ -745,7 +665,6 @@ static struct StunSrv StunSrvList[701] = {
   {"stun.xn----8sbcoa5btidn9i.xn--p1ai",       3478},
   {"stun.xten.com",    3478},
   {"stun.xtratelecom.es",      3478},
-  {"stun.xyzz.work",   3478},
   {"stun.yangutu.com", 3478},
   {"stun.yesdates.com",        3478},
   {"stun.yeymo.com",   3478},
index 9140710..2455b27 100644 (file)
@@ -1888,7 +1888,8 @@ bool CWallet::SelectCoinsMinConf(int64_t nTargetValue, unsigned int nSpendTime,
     }
 
     // Solve subset sum by stochastic approximation
-    sort(vValue.rbegin(), vValue.rend(), CompareValueOnly());
+    std::sort(vValue.begin(), vValue.end(), CompareValueOnly());
+    std::reverse(vValue.begin(), vValue.end());
     vector<char> vfBest;
     int64_t nBest;