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
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/
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
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
-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
-\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." )
-наберите 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
-Скачайте 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
Вернитесь в командную строку и введите:
-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
После строки src/qt/transactiontablemodel.cpp \ вставьте src/ifaddrs.c \
-Закоментируйте строку 434 LIBS += -lrt
+Закоментируйте строку LIBS += -lrt
(то есть чтобы стало выглядеть так:
!windows:!macx {
DEFINES += LINUX
на
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
и распакуйте на 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." )
Проверка что вы всё сделали правильно:
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
-Перейдите в папку 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
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
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
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
\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
2.2) Openssl
- cd /home/<ваше имя>/mxe
- make openssl
+cd /home/<ваше имя>/mxe
+make openssl
Проверка что установка Openssl прошла успешно:
В папке /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib должны появиться два файла
2.3) Boost
- cd /home/<ваше имя>/mxe
- make boost
+cd /home/<ваше имя>/mxe
+make boost
Проверка что установка Boost прошла успешно:
В /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib папке должны появиться файлы:
на
#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 должны появиться файлы:
-Распакуйте в домашнюю папку
-Откройте терминал:
- 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 должен быть файл:
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 на:
Сохраните файл
Снова возвращаемся в файл 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 ..
-Сохраните измененный файл 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,
Если в файле нет такой строчки CONFIG += static , то добавьте её.
Измените
-win32:QMAKE_LFLAGS........................
+win32:QMAKE_LFLAGS *= -Wl,--dynamicbase -Wl,--nxcompat
на
win32:QMAKE_LFLAGS *= -Wl,--large-address-aware -static
win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
-Сохраните измененный файл novacoin-qt.pro
--Откройте терминал и выполните следующие команды
+-Откройте терминал и выполните следующие команды:
Qt4 + транзакционный индекс LevelDB
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
::
- 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
::
- 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
--------
}
}
+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)
{
* @throws an exception (json_spirit::Value) when an error happens.
*/
json_spirit::Value execute(const std::string &method, const json_spirit::Array ¶ms) const;
+
+ /**
+ * Returns a list of registered commands
+ * @returns List of registered commands.
+ */
+ std::vector<std::string> listCommands() const;
};
extern const CRPCTable tableRPC;
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;
}
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)
{
}
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
private slots:
void textChanged();
+ void secureClearPassFields();
bool event(QEvent *event);
bool eventFilter(QObject *, QEvent *event);
};
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);
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();
delete signVerifyMessageDialog;
}
-void BitcoinGUI::createActions()
+void BitcoinGUI::createActions(int nQtStyle)
{
QActionGroup *tabGroup = new QActionGroup(this);
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);
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();
</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">
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();
#include <QKeyEvent>
#include <QUrl>
#include <QScrollBar>
+#include <QStringList>
#include <openssl/crypto.h>
#include <db_cxx.h>
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
{
ui->lineEdit->setFocus();
QApplication::postEvent(ui->lineEdit, new QKeyEvent(*keyevt));
+ autoCompleter->popup()->hide();
return true;
}
}
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);
}
}
#define RPCCONSOLE_H
#include <QWidget>
+#include <QCompleter>
namespace Ui {
class RPCConsole;
ClientModel *clientModel;
QStringList history;
int historyPtr;
+ QCompleter *autoCompleter;
void startExecutor();
};
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>"));
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; }");
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:
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()));
};
/*---------------------------------------------------------------------*/
-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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
{"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},
}
// 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;