diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..b08d0fe --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +# Text files with fixed EOL requirements +*.bat text eol=crlf +*.rc text eol=crlf +*.sh text eol=lf + diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b6921f..d187d85 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,7 @@ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE GIT_REVISION) set(CRYPTONOTE_LIB cryptonote) +set(WITH_MD_LIBRARY ON) include_directories(${CMAKE_BINARY_DIR} src @@ -32,6 +33,10 @@ else(WIN32) set(Boost_USE_STATIC_RUNTIME ON) endif(WIN32) +if(PORTABLE) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=nehalem") +endif() + find_package(Boost 1.58 REQUIRED COMPONENTS date_time filesystem program_options regex serialization system thread chrono) if ((${Boost_MAJOR_VERSION} EQUAL 1) AND (${Boost_MINOR_VERSION} EQUAL 54)) message(SEND_ERROR "Boost version 1.58 is unsupported, more details are available here http://goo.gl/RrCFmA") diff --git a/CryptoNoteWallet.cmake b/CryptoNoteWallet.cmake index 57da0e4..f7d4d4d 100644 --- a/CryptoNoteWallet.cmake +++ b/CryptoNoteWallet.cmake @@ -1,4 +1,4 @@ set(CN_PROJECT_NAME "Bitcoinote") set(CN_CURRENCY_DISPLAY_NAME "BitcoiNote") set(CN_CURRENCY_TICKER "BTCN") -set(CN_VERSION 1.1.0) +set(CN_VERSION 1.2.0) diff --git a/ReleaseNotes.txt b/ReleaseNotes.txt index f31e6eb..f514e05 100644 --- a/ReleaseNotes.txt +++ b/ReleaseNotes.txt @@ -1,3 +1,7 @@ +Release notes 1.2.0 + +- Update to core version 1.2.0, see core changelog. Most important changes: HARD FORK with new difficulty algorithm and bigger block size + Release notes 1.1.0 - Change coin name to BitcoiNote - auto-create symlink for data directory so that both old and new name work (.Bitcoinote and .BitcoiNote) diff --git a/src/Application/CommandLineParser.cpp b/src/Application/CommandLineParser.cpp index 65cb466..a40e8c7 100644 --- a/src/Application/CommandLineParser.cpp +++ b/src/Application/CommandLineParser.cpp @@ -39,6 +39,7 @@ CommandLineParser::CommandLineParser(QObject* _parent) : QObject(_parent), m_par "add-priority-node and seed-node are ignored"), tr("node")), m_seedNodeOption("seed-node", tr("Connect to a node to retrieve peer addresses, and disconnect"), tr("node")), m_hideMyPortOption("hide-my-port", tr("Do not announce yourself as peerlist candidate")), + m_noDefaultSeedsOption("no-default-seeds", tr("Do not use default seed nodes")), m_dataDirOption("data-dir", tr("Specify data directory"), tr("directory"), QString::fromLocal8Bit(Tools::getDefaultDataDirectory().c_str())), m_minimized("minimized", tr("Run application in minimized mode")) { m_parser.setApplicationDescription(tr("Bitcoinote wallet")); @@ -55,6 +56,7 @@ CommandLineParser::CommandLineParser(QObject* _parent) : QObject(_parent), m_par m_parser.addOption(m_addExclusiveNodeOption); m_parser.addOption(m_seedNodeOption); m_parser.addOption(m_hideMyPortOption); + m_parser.addOption(m_noDefaultSeedsOption); m_parser.addOption(m_dataDirOption); m_parser.addOption(m_minimized); } @@ -99,6 +101,10 @@ bool CommandLineParser::hasHideMyPortOption() const { return m_parser.isSet(m_hideMyPortOption); } +bool CommandLineParser::hasNoDefaultSeedsOption() const { + return m_parser.isSet(m_noDefaultSeedsOption); +} + QString CommandLineParser::getErrorText() const { return m_parser.errorText(); } diff --git a/src/Application/CommandLineParser.h b/src/Application/CommandLineParser.h index 856c4f5..0ac3b95 100644 --- a/src/Application/CommandLineParser.h +++ b/src/Application/CommandLineParser.h @@ -38,6 +38,7 @@ class CommandLineParser : public QObject { bool hasMinimizedOption() const; bool hasAllowLocalIpOption() const; bool hasHideMyPortOption() const; + bool hasNoDefaultSeedsOption() const; QString getErrorText() const; QString getHelpText() const; QString getP2pBindIp() const; @@ -64,6 +65,7 @@ class CommandLineParser : public QObject { QCommandLineOption m_addExclusiveNodeOption; QCommandLineOption m_seedNodeOption; QCommandLineOption m_hideMyPortOption; + QCommandLineOption m_noDefaultSeedsOption; QCommandLineOption m_dataDirOption; QCommandLineOption m_minimized; }; diff --git a/src/CryptoNoteWrapper/InProcessNodeWorker.cpp b/src/CryptoNoteWrapper/InProcessNodeWorker.cpp index 466d26e..c0fc0ab 100644 --- a/src/CryptoNoteWrapper/InProcessNodeWorker.cpp +++ b/src/CryptoNoteWrapper/InProcessNodeWorker.cpp @@ -69,6 +69,7 @@ CryptoNote::NetNodeConfig makeNetNodeConfig() { boost::any p2pAllowLocalIp = Settings::instance().hasAllowLocalIpOption(); std::string dataDir = Settings::instance().getDataDir().absolutePath().toLocal8Bit().constData(); boost::any hideMyPort = Settings::instance().hasHideMyPortOption(); + boost::any noDefaultSeeds = Settings::instance().hasNoDefaultSeedsOption(); options.insert(std::make_pair("p2p-bind-ip", boost::program_options::variable_value(p2pBindIp, false))); options.insert(std::make_pair("p2p-bind-port", boost::program_options::variable_value(p2pBindPort, false))); options.insert(std::make_pair("p2p-external-port", boost::program_options::variable_value(p2pExternalPort, false))); @@ -94,6 +95,7 @@ CryptoNote::NetNodeConfig makeNetNodeConfig() { } options.insert(std::make_pair("hide-my-port", boost::program_options::variable_value(hideMyPort, false))); + options.insert(std::make_pair("no-default-seeds", boost::program_options::variable_value(noDefaultSeeds, false))); options.insert(std::make_pair("data-dir", boost::program_options::variable_value(dataDir, false))); config.init(options); config.setTestnet(Settings::instance().isTestnet()); diff --git a/src/Gui/Send/TransferFrame.cpp b/src/Gui/Send/TransferFrame.cpp index 1b895e0..a117e14 100644 --- a/src/Gui/Send/TransferFrame.cpp +++ b/src/Gui/Send/TransferFrame.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include "TransferFrame.h" #include "Settings/Settings.h" @@ -182,6 +183,7 @@ void TransferFrame::setBigTransactionError(bool _error) { m_ui->m_amountTextLabel->setText(tr("TRANSACTION IS TOO BIG")); connect(m_ui->m_sendAmountSpin, static_cast(&QDoubleSpinBox::valueChanged), this, &TransferFrame::validateAmount, Qt::UniqueConnection); + QMessageBox::warning(this, tr("Warning"), tr("Your transaction cannot be sent because its data size is too big. A transaction needs to reference all inputs (i.e. spent coins), so a popular cause for too big a transaction is spending a large amount using small inputs (e.g. mining rewards). You can try reducing the privacy level and/or send multiple smaller transactions.")); } else { m_ui->m_amountTextLabel->setText(tr("AMOUNT")); } diff --git a/src/Settings/Settings.cpp b/src/Settings/Settings.cpp index 1f2cb99..788ed95 100644 --- a/src/Settings/Settings.cpp +++ b/src/Settings/Settings.cpp @@ -70,7 +70,7 @@ const quint64 DEFAULT_OPTIMIZATION_THRESHOLD = 10000000000000; const quint64 DEFAULT_OPTIMIZATION_MIXIN = 6; const quint64 VERSION_MAJOR = 1; -const quint64 VERSION_MINOR = 1; +const quint64 VERSION_MINOR = 2; const quint64 VERSION_PATCH = 0; } @@ -190,6 +190,12 @@ bool Settings::hasHideMyPortOption() const { return m_cmdLineParser->hasHideMyPortOption(); } +bool Settings::hasNoDefaultSeedsOption() const { + QReadLocker lock(&m_lock); + Q_ASSERT(m_cmdLineParser != nullptr); + return m_cmdLineParser->hasNoDefaultSeedsOption(); +} + QString Settings::getP2pBindIp() const { QReadLocker lock(&m_lock); Q_ASSERT(m_cmdLineParser != nullptr); diff --git a/src/Settings/Settings.h b/src/Settings/Settings.h index 56729e9..0801a5e 100644 --- a/src/Settings/Settings.h +++ b/src/Settings/Settings.h @@ -45,6 +45,7 @@ class Settings { bool hasDebugOption() const; bool hasAllowLocalIpOption() const; bool hasHideMyPortOption() const; + bool hasNoDefaultSeedsOption() const; bool isEncrypted() const; bool isMiningOnLockedScreenEnabled(bool _defaultValue) const; bool isSystemTrayAvailable() const;