diff options
53 files changed, 185 insertions, 114 deletions
diff --git a/bitcoin-qt.pro b/bitcoin-qt.pro index 5042adfbd..bf4131405 100644 --- a/bitcoin-qt.pro +++ b/bitcoin-qt.pro @@ -30,10 +30,8 @@ contains(RELEASE, 1) { macx:QMAKE_OBJECTIVE_CFLAGS += -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk !win32:!macx { - # Linux: static link + # Linux: static link and extra security (see: https://wiki.debian.org/Hardening) LIBS += -Wl,-Bstatic -Wl,-z,relro -Wl,-z,now - # for extra security (see: https://wiki.debian.org/Hardening) - QMAKE_CXXFLAGS *= -D_FORTIFY_SOURCE=2 } } @@ -44,6 +42,8 @@ contains(RELEASE, 1) { # Exclude on Windows cross compile with MinGW 4.2.x, as it will result in a non-working executable! # This can be enabled for Windows, when we switch to MinGW >= 4.4.x. } +# for extra security (see: https://wiki.debian.org/Hardening): this flag is GCC compiler-specific +QMAKE_CXXFLAGS *= -D_FORTIFY_SOURCE=2 # for extra security on Windows: enable ASLR and DEP via GCC linker flags win32:QMAKE_LFLAGS *= -Wl,--dynamicbase -Wl,--nxcompat # on Windows: enable GCC large address aware linker flag diff --git a/src/checkpoints.cpp b/src/checkpoints.cpp index 9b11f0b35..62234b911 100644 --- a/src/checkpoints.cpp +++ b/src/checkpoints.cpp @@ -44,6 +44,7 @@ namespace Checkpoints (193000, uint256("0x000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317")) (210000, uint256("0x000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e")) (216116, uint256("0x00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e")) + (225430, uint256("0x00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932")) ; static const CCheckpointData data = { &mapCheckpoints, diff --git a/src/main.cpp b/src/main.cpp index 9a06dbf13..22baf0f3e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2056,6 +2056,25 @@ bool CBlock::CheckBlock(CValidationState &state, bool fCheckPOW, bool fCheckMerk if (vtx.empty() || vtx.size() > MAX_BLOCK_SIZE || ::GetSerializeSize(*this, SER_NETWORK, PROTOCOL_VERSION) > MAX_BLOCK_SIZE) return state.DoS(100, error("CheckBlock() : size limits failed")); + // Special short-term limits to avoid 10,000 BDB lock limit: + if (GetBlockTime() >= 1363867200 && // start enforcing 21 March 2013, noon GMT + GetBlockTime() < 1368576000) // stop enforcing 15 May 2013 00:00:00 + { + // Rule is: #unique txids referenced <= 4,500 + // ... to prevent 10,000 BDB lock exhaustion on old clients + set<uint256> setTxIn; + for (size_t i = 0; i < vtx.size(); i++) + { + setTxIn.insert(vtx[i].GetHash()); + if (i == 0) continue; // skip coinbase txin + BOOST_FOREACH(const CTxIn& txin, vtx[i].vin) + setTxIn.insert(txin.prevout.hash); + } + size_t nTxids = setTxIn.size(); + if (nTxids > 4500) + return error("CheckBlock() : 15 May maxlocks violation"); + } + // Check proof of work matches claimed amount if (fCheckPOW && !CheckProofOfWork(GetHash(), nBits)) return state.DoS(50, error("CheckBlock() : proof of work failed")); @@ -4136,6 +4155,10 @@ CBlockTemplate* CreateNewBlock(CReserveKey& reservekey) // Limit to betweeen 1K and MAX_BLOCK_SIZE-1K for sanity: nBlockMaxSize = std::max((unsigned int)1000, std::min((unsigned int)(MAX_BLOCK_SIZE-1000), nBlockMaxSize)); + // Special compatibility rule before 15 May: limit size to 500,000 bytes: + if (GetAdjustedTime() < 1368576000) + nBlockMaxSize = std::min(nBlockMaxSize, (unsigned int)(MAX_BLOCK_SIZE_GEN)); + // How much of the block should be dedicated to high-priority transactions, // included regardless of the fees they pay unsigned int nBlockPrioritySize = GetArg("-blockprioritysize", 27000); diff --git a/src/qt/addressbookpage.cpp b/src/qt/addressbookpage.cpp index f4696d5a3..b53a37fc2 100644 --- a/src/qt/addressbookpage.cpp +++ b/src/qt/addressbookpage.cpp @@ -8,15 +8,15 @@ #include "csvmodelwriter.h" #include "guiutil.h" +#ifdef USE_QRCODE +#include "qrcodedialog.h" +#endif + #include <QSortFilterProxyModel> #include <QClipboard> #include <QMessageBox> #include <QMenu> -#ifdef USE_QRCODE -#include "qrcodedialog.h" -#endif - AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) : QDialog(parent), ui(new Ui::AddressBookPage), diff --git a/src/qt/addresstablemodel.cpp b/src/qt/addresstablemodel.cpp index 03b09cdce..180144452 100644 --- a/src/qt/addresstablemodel.cpp +++ b/src/qt/addresstablemodel.cpp @@ -1,4 +1,5 @@ #include "addresstablemodel.h" + #include "guiutil.h" #include "walletmodel.h" @@ -6,7 +7,6 @@ #include "base58.h" #include <QFont> -#include <QColor> const QString AddressTableModel::Send = "S"; const QString AddressTableModel::Receive = "R"; diff --git a/src/qt/addresstablemodel.h b/src/qt/addresstablemodel.h index ae3e3b2f0..48baff5e5 100644 --- a/src/qt/addresstablemodel.h +++ b/src/qt/addresstablemodel.h @@ -14,6 +14,7 @@ class WalletModel; class AddressTableModel : public QAbstractTableModel { Q_OBJECT + public: explicit AddressTableModel(CWallet *wallet, WalletModel *parent = 0); ~AddressTableModel(); diff --git a/src/qt/askpassphrasedialog.h b/src/qt/askpassphrasedialog.h index 338853ce2..9df002da2 100644 --- a/src/qt/askpassphrasedialog.h +++ b/src/qt/askpassphrasedialog.h @@ -6,7 +6,6 @@ namespace Ui { class AskPassphraseDialog; } - class WalletModel; /** Multifunctional dialog to ask for passphrases. Used for encryption, unlocking, and changing the passphrase. diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index 75e9b965b..e3d51be54 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -1,6 +1,9 @@ /* * W.J. van der Laan 2011-2012 */ + +#include <QApplication> + #include "bitcoingui.h" #include "clientmodel.h" #include "walletmodel.h" @@ -11,7 +14,6 @@ #include "ui_interface.h" #include "paymentserver.h" -#include <QApplication> #include <QMessageBox> #include <QTextCodec> #include <QLocale> diff --git a/src/qt/bitcoin.qrc b/src/qt/bitcoin.qrc index b13a87dd2..84ebb2483 100644 --- a/src/qt/bitcoin.qrc +++ b/src/qt/bitcoin.qrc @@ -1,4 +1,4 @@ -<RCC> +<!DOCTYPE RCC><RCC version="1.0"> <qresource prefix="/icons"> <file alias="bitcoin">res/icons/bitcoin.png</file> <file alias="address-book">res/icons/address-book.png</file> diff --git a/src/qt/bitcoinaddressvalidator.h b/src/qt/bitcoinaddressvalidator.h index 9710d122b..2b6a59367 100644 --- a/src/qt/bitcoinaddressvalidator.h +++ b/src/qt/bitcoinaddressvalidator.h @@ -1,7 +1,7 @@ #ifndef BITCOINADDRESSVALIDATOR_H #define BITCOINADDRESSVALIDATOR_H -#include <QRegExpValidator> +#include <QValidator> /** Base48 entry widget validator. Corrects near-miss characters and refuses characters that are no part of base48. @@ -9,16 +9,13 @@ class BitcoinAddressValidator : public QValidator { Q_OBJECT + public: explicit BitcoinAddressValidator(QObject *parent = 0); State validate(QString &input, int &pos) const; static const int MaxAddressLength = 35; -signals: - -public slots: - }; #endif // BITCOINADDRESSVALIDATOR_H diff --git a/src/qt/bitcoinamountfield.cpp b/src/qt/bitcoinamountfield.cpp index 9514ec846..ddf185c41 100644 --- a/src/qt/bitcoinamountfield.cpp +++ b/src/qt/bitcoinamountfield.cpp @@ -1,18 +1,14 @@ #include "bitcoinamountfield.h" + #include "qvaluecombobox.h" #include "bitcoinunits.h" - #include "guiconstants.h" -#include <QLabel> -#include <QLineEdit> -#include <QRegExpValidator> #include <QHBoxLayout> #include <QKeyEvent> #include <QDoubleSpinBox> -#include <QComboBox> #include <QApplication> -#include <qmath.h> +#include <qmath.h> // for qPow() BitcoinAmountField::BitcoinAmountField(QWidget *parent): QWidget(parent), amount(0), currentUnit(-1) diff --git a/src/qt/bitcoinamountfield.h b/src/qt/bitcoinamountfield.h index 4797c4c88..dacbb395e 100644 --- a/src/qt/bitcoinamountfield.h +++ b/src/qt/bitcoinamountfield.h @@ -13,7 +13,9 @@ QT_END_NAMESPACE class BitcoinAmountField: public QWidget { Q_OBJECT + Q_PROPERTY(qint64 value READ value WRITE setValue NOTIFY textChanged USER true) + public: explicit BitcoinAmountField(QWidget *parent = 0); @@ -56,5 +58,4 @@ private slots: }; - #endif // BITCOINAMOUNTFIELD_H diff --git a/src/qt/bitcoingui.cpp b/src/qt/bitcoingui.cpp index f1bf5f588..4f97a4815 100644 --- a/src/qt/bitcoingui.cpp +++ b/src/qt/bitcoingui.cpp @@ -4,7 +4,11 @@ * W.J. van der Laan 2011-2012 * The Bitcoin Developers 2011-2012 */ + +#include <QApplication> + #include "bitcoingui.h" + #include "transactiontablemodel.h" #include "addressbookpage.h" #include "sendcoinsdialog.h" @@ -31,19 +35,13 @@ #include "macdockiconhandler.h" #endif -#include <QApplication> -#include <QMainWindow> #include <QMenuBar> #include <QMenu> #include <QIcon> -#include <QTabWidget> #include <QVBoxLayout> #include <QToolBar> #include <QStatusBar> #include <QLabel> -#include <QLineEdit> -#include <QPushButton> -#include <QLocale> #include <QMessageBox> #include <QProgressBar> #include <QStackedWidget> @@ -54,6 +52,7 @@ #include <QTimer> #include <QDragEnterEvent> #include <QUrl> +#include <QMimeData> #include <QStyle> #include <iostream> diff --git a/src/qt/bitcoingui.h b/src/qt/bitcoingui.h index 8ce0335bc..b992bfdc6 100644 --- a/src/qt/bitcoingui.h +++ b/src/qt/bitcoingui.h @@ -17,13 +17,9 @@ class RPCConsole; QT_BEGIN_NAMESPACE class QLabel; -class QLineEdit; -class QTableView; -class QAbstractItemModel; class QModelIndex; class QProgressBar; class QStackedWidget; -class QUrl; QT_END_NAMESPACE /** @@ -33,6 +29,7 @@ QT_END_NAMESPACE class BitcoinGUI : public QMainWindow { Q_OBJECT + public: explicit BitcoinGUI(QWidget *parent = 0); ~BitcoinGUI(); diff --git a/src/qt/bitcoinunits.h b/src/qt/bitcoinunits.h index 9b7c9e160..6e96cef59 100644 --- a/src/qt/bitcoinunits.h +++ b/src/qt/bitcoinunits.h @@ -9,6 +9,8 @@ */ class BitcoinUnits: public QAbstractListModel { + Q_OBJECT + public: explicit BitcoinUnits(QObject *parent); @@ -58,6 +60,7 @@ public: int rowCount(const QModelIndex &parent) const; QVariant data(const QModelIndex &index, int role) const; ///@} + private: QList<BitcoinUnits::Unit> unitlist; }; diff --git a/src/qt/clientmodel.cpp b/src/qt/clientmodel.cpp index 858fbe241..ae6692418 100644 --- a/src/qt/clientmodel.cpp +++ b/src/qt/clientmodel.cpp @@ -1,4 +1,5 @@ #include "clientmodel.h" + #include "guiconstants.h" #include "optionsmodel.h" #include "addresstablemodel.h" diff --git a/src/qt/clientmodel.h b/src/qt/clientmodel.h index a3fe92048..3ba34b278 100644 --- a/src/qt/clientmodel.h +++ b/src/qt/clientmodel.h @@ -24,6 +24,7 @@ enum BlockSource { class ClientModel : public QObject { Q_OBJECT + public: explicit ClientModel(OptionsModel *optionsModel, QObject *parent = 0); ~ClientModel(); @@ -66,6 +67,7 @@ private: void subscribeToCoreSignals(); void unsubscribeFromCoreSignals(); + signals: void numConnectionsChanged(int count); void numBlocksChanged(int count, int countOfPeers); diff --git a/src/qt/csvmodelwriter.h b/src/qt/csvmodelwriter.h index 6c9dcbaf3..c4504ee91 100644 --- a/src/qt/csvmodelwriter.h +++ b/src/qt/csvmodelwriter.h @@ -14,6 +14,7 @@ QT_END_NAMESPACE class CSVModelWriter : public QObject { Q_OBJECT + public: explicit CSVModelWriter(const QString &filename, QObject *parent = 0); @@ -36,11 +37,6 @@ private: int role; }; QList<Column> columns; - -signals: - -public slots: - }; #endif // CSVMODELWRITER_H diff --git a/src/qt/editaddressdialog.cpp b/src/qt/editaddressdialog.cpp index 5cfcb34b9..9abad7647 100644 --- a/src/qt/editaddressdialog.cpp +++ b/src/qt/editaddressdialog.cpp @@ -1,5 +1,6 @@ #include "editaddressdialog.h" #include "ui_editaddressdialog.h" + #include "addresstablemodel.h" #include "guiutil.h" diff --git a/src/qt/editaddressdialog.h b/src/qt/editaddressdialog.h index 0e4183bd5..44e5023d2 100644 --- a/src/qt/editaddressdialog.h +++ b/src/qt/editaddressdialog.h @@ -3,15 +3,15 @@ #include <QDialog> -QT_BEGIN_NAMESPACE -class QDataWidgetMapper; -QT_END_NAMESPACE - namespace Ui { class EditAddressDialog; } class AddressTableModel; +QT_BEGIN_NAMESPACE +class QDataWidgetMapper; +QT_END_NAMESPACE + /** Dialog for editing an address and associated information. */ class EditAddressDialog : public QDialog diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index d4e73adf9..30ad8ef66 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -1,11 +1,14 @@ +#include <QApplication> + #include "guiutil.h" + #include "bitcoinaddressvalidator.h" #include "walletmodel.h" #include "bitcoinunits.h" + #include "util.h" #include "init.h" -#include <QString> #include <QDateTime> #include <QDoubleValidator> #include <QFont> @@ -13,7 +16,6 @@ #include <QUrl> #include <QTextDocument> // For Qt::escape #include <QAbstractItemView> -#include <QApplication> #include <QClipboard> #include <QFileDialog> #include <QDesktopServices> diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index db100bdb7..e2c7d18aa 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -5,6 +5,8 @@ #include <QObject> #include <QMessageBox> +class SendCoinsRecipient; + QT_BEGIN_NAMESPACE class QFont; class QLineEdit; @@ -13,7 +15,6 @@ class QDateTime; class QUrl; class QAbstractItemView; QT_END_NAMESPACE -class SendCoinsRecipient; /** Utility functions used by the Bitcoin Qt UI. */ diff --git a/src/qt/macdockiconhandler.h b/src/qt/macdockiconhandler.h index dd85e0c33..5018456aa 100644 --- a/src/qt/macdockiconhandler.h +++ b/src/qt/macdockiconhandler.h @@ -3,9 +3,11 @@ #include <QObject> +QT_BEGIN_NAMESPACE class QMenu; class QIcon; class QWidget; +QT_END_NAMESPACE #ifdef __OBJC__ @class DockIconClickEventHandler; @@ -18,6 +20,7 @@ class DockIconClickEventHandler; class MacDockIconHandler : public QObject { Q_OBJECT + public: ~MacDockIconHandler(); @@ -31,8 +34,6 @@ public: signals: void dockIconClicked(); -public slots: - private: MacDockIconHandler(); diff --git a/src/qt/macdockiconhandler.mm b/src/qt/macdockiconhandler.mm index 75684403e..ea868401c 100644 --- a/src/qt/macdockiconhandler.mm +++ b/src/qt/macdockiconhandler.mm @@ -1,4 +1,3 @@ - #include "macdockiconhandler.h" #include <QMenu> diff --git a/src/qt/monitoreddatamapper.cpp b/src/qt/monitoreddatamapper.cpp index 88948d07b..4c201834c 100644 --- a/src/qt/monitoreddatamapper.cpp +++ b/src/qt/monitoreddatamapper.cpp @@ -9,7 +9,6 @@ MonitoredDataMapper::MonitoredDataMapper(QObject *parent) : { } - void MonitoredDataMapper::addMapping(QWidget *widget, int section) { QDataWidgetMapper::addMapping(widget, section); diff --git a/src/qt/monitoreddatamapper.h b/src/qt/monitoreddatamapper.h index 33a874e73..de55c86fc 100644 --- a/src/qt/monitoreddatamapper.h +++ b/src/qt/monitoreddatamapper.h @@ -13,19 +13,18 @@ QT_END_NAMESPACE class MonitoredDataMapper : public QDataWidgetMapper { Q_OBJECT + public: explicit MonitoredDataMapper(QObject *parent=0); void addMapping(QWidget *widget, int section); void addMapping(QWidget *widget, int section, const QByteArray &propertyName); + private: void addChangeMonitor(QWidget *widget); signals: void viewModified(); - }; - - #endif // MONITOREDDATAMAPPER_H diff --git a/src/qt/notificator.cpp b/src/qt/notificator.cpp index 628dca159..397e7aa4a 100644 --- a/src/qt/notificator.cpp +++ b/src/qt/notificator.cpp @@ -12,7 +12,7 @@ #include <QImageWriter> #ifdef USE_DBUS -#include <QtDBus/QtDBus> +#include <QtDBus> #include <stdint.h> #endif diff --git a/src/qt/notificator.h b/src/qt/notificator.h index 833b52cb1..d20673abb 100644 --- a/src/qt/notificator.h +++ b/src/qt/notificator.h @@ -15,6 +15,7 @@ QT_END_NAMESPACE class Notificator: public QObject { Q_OBJECT + public: /** Create a new notificator. @note Ownership of trayIcon is not transferred to this object. @@ -25,13 +26,12 @@ public: // Message class enum Class { - Information, /**< Informational message */ - Warning, /**< Notify user of potential problem */ - Critical /**< An error occurred */ + Information, /**< Informational message */ + Warning, /**< Notify user of potential problem */ + Critical /**< An error occurred */ }; public slots: - /** Show notification message. @param[in] cls general message class @param[in] title title shown with message diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index 6b98ab192..4fa1f6092 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -10,8 +10,6 @@ #include <QIntValidator> #include <QLocale> #include <QMessageBox> -#include <QRegExp> -#include <QRegExpValidator> OptionsDialog::OptionsDialog(QWidget *parent) : QDialog(parent), diff --git a/src/qt/optionsmodel.cpp b/src/qt/optionsmodel.cpp index 2457e3874..cd3170a30 100644 --- a/src/qt/optionsmodel.cpp +++ b/src/qt/optionsmodel.cpp @@ -1,11 +1,12 @@ #include "optionsmodel.h" -#include "bitcoinunits.h" -#include <QSettings> +#include "bitcoinunits.h" #include "init.h" #include "walletdb.h" #include "guiutil.h" +#include <QSettings> + OptionsModel::OptionsModel(QObject *parent) : QAbstractListModel(parent) { diff --git a/src/qt/overviewpage.h b/src/qt/overviewpage.h index bb32a0c33..b287f479f 100644 --- a/src/qt/overviewpage.h +++ b/src/qt/overviewpage.h @@ -3,10 +3,6 @@ #include <QWidget> -QT_BEGIN_NAMESPACE -class QModelIndex; -QT_END_NAMESPACE - namespace Ui { class OverviewPage; } @@ -15,6 +11,10 @@ class WalletModel; class TxViewDelegate; class TransactionFilterProxy; +QT_BEGIN_NAMESPACE +class QModelIndex; +QT_END_NAMESPACE + /** Overview ("home") page widget */ class OverviewPage : public QWidget { diff --git a/src/qt/paymentserver.cpp b/src/qt/paymentserver.cpp index 05f2ac10e..a92e6fc32 100644 --- a/src/qt/paymentserver.cpp +++ b/src/qt/paymentserver.cpp @@ -2,14 +2,15 @@ // Distributed under the MIT/X11 software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. +#include <QApplication> + #include "paymentserver.h" + #include "guiconstants.h" #include "ui_interface.h" #include "util.h" -#include <QApplication> #include <QByteArray> -#include <QCoreApplication> #include <QDataStream> #include <QDebug> #include <QFileOpenEvent> @@ -59,7 +60,7 @@ bool PaymentServer::ipcSendCommandLine() { bool fResult = false; - const QStringList& args = QCoreApplication::arguments(); + const QStringList& args = qApp->arguments(); for (int i = 1; i < args.size(); i++) { if (!args[i].startsWith(BITCOIN_IPC_PREFIX, Qt::CaseInsensitive)) diff --git a/src/qt/qvalidatedlineedit.h b/src/qt/qvalidatedlineedit.h index 66e26be9a..ec74633c0 100644 --- a/src/qt/qvalidatedlineedit.h +++ b/src/qt/qvalidatedlineedit.h @@ -9,6 +9,7 @@ class QValidatedLineEdit : public QLineEdit { Q_OBJECT + public: explicit QValidatedLineEdit(QWidget *parent = 0); void clear(); diff --git a/src/qt/qvaluecombobox.h b/src/qt/qvaluecombobox.h index 1a47bb656..64a7da9df 100644 --- a/src/qt/qvaluecombobox.h +++ b/src/qt/qvaluecombobox.h @@ -8,7 +8,9 @@ class QValueComboBox : public QComboBox { Q_OBJECT + Q_PROPERTY(QVariant value READ value WRITE setValue NOTIFY valueChanged USER true) + public: explicit QValueComboBox(QWidget *parent = 0); @@ -21,8 +23,6 @@ public: signals: void valueChanged(); -public slots: - private: int role; diff --git a/src/qt/res/bitcoin-qt.rc b/src/qt/res/bitcoin-qt.rc index 834001c0c..5449ff835 100644 --- a/src/qt/res/bitcoin-qt.rc +++ b/src/qt/res/bitcoin-qt.rc @@ -22,7 +22,7 @@ BEGIN VALUE "FileDescription", "Bitcoin-Qt (OSS GUI client for Bitcoin)" VALUE "FileVersion", VER_FILEVERSION_STR VALUE "InternalName", "bitcoin-qt" - VALUE "LegalCopyright", "2009-2012 The Bitcoin developers" + VALUE "LegalCopyright", "2009-2013 The Bitcoin developers" VALUE "LegalTrademarks1", "Distributed under the MIT/X11 software license, see the accompanying file COPYING or http://www.opensource.org/licenses/mit-license.php." VALUE "OriginalFilename", "bitcoin-qt.exe" VALUE "ProductName", "Bitcoin-Qt" diff --git a/src/qt/rpcconsole.cpp b/src/qt/rpcconsole.cpp index 7cf2d4196..c9ce37434 100644 --- a/src/qt/rpcconsole.cpp +++ b/src/qt/rpcconsole.cpp @@ -6,9 +6,7 @@ #include "guiutil.h" #include <QTime> -#include <QTimer> #include <QThread> -#include <QTextEdit> #include <QKeyEvent> #include <QUrl> #include <QScrollBar> @@ -35,12 +33,14 @@ const struct { /* Object for executing console RPC commands in a separate thread. */ -class RPCExecutor: public QObject +class RPCExecutor : public QObject { Q_OBJECT + public slots: void start(); void request(const QString &command); + signals: void reply(int category, const QString &command); }; diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp index 0c1547bd8..56392f96d 100644 --- a/src/qt/sendcoinsdialog.cpp +++ b/src/qt/sendcoinsdialog.cpp @@ -1,5 +1,6 @@ #include "sendcoinsdialog.h" #include "ui_sendcoinsdialog.h" + #include "walletmodel.h" #include "bitcoinunits.h" #include "addressbookpage.h" @@ -10,7 +11,6 @@ #include "base58.h" #include <QMessageBox> -#include <QLocale> #include <QTextDocument> #include <QScrollBar> diff --git a/src/qt/sendcoinsentry.cpp b/src/qt/sendcoinsentry.cpp index c4d84c388..7dbca2408 100644 --- a/src/qt/sendcoinsentry.cpp +++ b/src/qt/sendcoinsentry.cpp @@ -1,5 +1,6 @@ #include "sendcoinsentry.h" #include "ui_sendcoinsentry.h" + #include "guiutil.h" #include "bitcoinunits.h" #include "addressbookpage.h" diff --git a/src/qt/signverifymessagedialog.cpp b/src/qt/signverifymessagedialog.cpp index 371b5ba53..7c43e5839 100644 --- a/src/qt/signverifymessagedialog.cpp +++ b/src/qt/signverifymessagedialog.cpp @@ -10,11 +10,11 @@ #include "walletmodel.h" #include "wallet.h" +#include <QClipboard> + #include <string> #include <vector> -#include <QClipboard> - SignVerifyMessageDialog::SignVerifyMessageDialog(QWidget *parent) : QDialog(parent), ui(new Ui::SignVerifyMessageDialog), diff --git a/src/qt/signverifymessagedialog.h b/src/qt/signverifymessagedialog.h index 2c2677cc0..558f24e23 100644 --- a/src/qt/signverifymessagedialog.h +++ b/src/qt/signverifymessagedialog.h @@ -8,9 +8,6 @@ namespace Ui { } class WalletModel; -QT_BEGIN_NAMESPACE -QT_END_NAMESPACE - class SignVerifyMessageDialog : public QDialog { Q_OBJECT diff --git a/src/qt/test/uritests.cpp b/src/qt/test/uritests.cpp index 4662f5ed3..802d74719 100644 --- a/src/qt/test/uritests.cpp +++ b/src/qt/test/uritests.cpp @@ -4,15 +4,6 @@ #include <QUrl> -/* -struct SendCoinsRecipient -{ - QString address; - QString label; - qint64 amount; -}; -*/ - void URITests::uriTests() { SendCoinsRecipient rv; diff --git a/src/qt/transactiondesc.cpp b/src/qt/transactiondesc.cpp index d5b08448d..e4dbf9c0d 100644 --- a/src/qt/transactiondesc.cpp +++ b/src/qt/transactiondesc.cpp @@ -2,13 +2,14 @@ #include "guiutil.h" #include "bitcoinunits.h" - #include "main.h" #include "wallet.h" #include "db.h" #include "ui_interface.h" #include "base58.h" +#include <string> + QString TransactionDesc::FormatTxStatus(const CWalletTx& wtx) { if (!wtx.IsFinal()) diff --git a/src/qt/transactiondesc.h b/src/qt/transactiondesc.h index 2523f9aa6..cb0dda5b5 100644 --- a/src/qt/transactiondesc.h +++ b/src/qt/transactiondesc.h @@ -3,7 +3,6 @@ #include <QString> #include <QObject> -#include <string> class CWallet; class CWalletTx; @@ -13,8 +12,10 @@ class CWalletTx; class TransactionDesc: public QObject { Q_OBJECT + public: static QString toHTML(CWallet *wallet, CWalletTx &wtx); + private: TransactionDesc() {} diff --git a/src/qt/transactiondescdialog.h b/src/qt/transactiondescdialog.h index e86fb58a6..f7ceacb63 100644 --- a/src/qt/transactiondescdialog.h +++ b/src/qt/transactiondescdialog.h @@ -6,6 +6,7 @@ namespace Ui { class TransactionDescDialog; } + QT_BEGIN_NAMESPACE class QModelIndex; QT_END_NAMESPACE diff --git a/src/qt/transactionfilterproxy.cpp b/src/qt/transactionfilterproxy.cpp index 16fb4dab9..068e5550d 100644 --- a/src/qt/transactionfilterproxy.cpp +++ b/src/qt/transactionfilterproxy.cpp @@ -1,4 +1,5 @@ #include "transactionfilterproxy.h" + #include "transactiontablemodel.h" #include <QDateTime> diff --git a/src/qt/transactionfilterproxy.h b/src/qt/transactionfilterproxy.h index 30b98588f..1aea85a00 100644 --- a/src/qt/transactionfilterproxy.h +++ b/src/qt/transactionfilterproxy.h @@ -8,6 +8,7 @@ class TransactionFilterProxy : public QSortFilterProxyModel { Q_OBJECT + public: explicit TransactionFilterProxy(QObject *parent = 0); @@ -32,6 +33,7 @@ public: void setLimit(int limit); int rowCount(const QModelIndex &parent = QModelIndex()) const; + protected: bool filterAcceptsRow(int source_row, const QModelIndex & source_parent) const; @@ -42,11 +44,6 @@ private: quint32 typeFilter; qint64 minAmount; int limitRows; - -signals: - -public slots: - }; #endif // TRANSACTIONFILTERPROXY_H diff --git a/src/qt/transactionrecord.h b/src/qt/transactionrecord.h index f6570803d..d760d47c8 100644 --- a/src/qt/transactionrecord.h +++ b/src/qt/transactionrecord.h @@ -14,8 +14,8 @@ class TransactionStatus { public: TransactionStatus(): - confirmed(false), sortKey(""), maturity(Mature), - matures_in(0), status(Offline), depth(0), open_for(0), cur_num_blocks(-1) + confirmed(false), sortKey(""), maturity(Mature), + matures_in(0), status(Offline), depth(0), open_for(0), cur_num_blocks(-1) { } enum Maturity diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp index aef0e409b..baf1e1648 100644 --- a/src/qt/transactiontablemodel.cpp +++ b/src/qt/transactiontablemodel.cpp @@ -1,4 +1,5 @@ #include "transactiontablemodel.h" + #include "guiutil.h" #include "transactionrecord.h" #include "guiconstants.h" @@ -11,13 +12,11 @@ #include "wallet.h" #include "ui_interface.h" -#include <QLocale> #include <QList> #include <QColor> #include <QTimer> #include <QIcon> #include <QDateTime> -#include <QtAlgorithms> // Amount column is right-aligned it contains numbers static int column_alignments[] = { diff --git a/src/qt/transactiontablemodel.h b/src/qt/transactiontablemodel.h index b0687d539..6b2961c28 100644 --- a/src/qt/transactiontablemodel.h +++ b/src/qt/transactiontablemodel.h @@ -14,6 +14,7 @@ class WalletModel; class TransactionTableModel : public QAbstractTableModel { Q_OBJECT + public: explicit TransactionTableModel(CWallet* wallet, WalletModel *parent = 0); ~TransactionTableModel(); @@ -55,6 +56,7 @@ public: QVariant data(const QModelIndex &index, int role) const; QVariant headerData(int section, Qt::Orientation orientation, int role) const; QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const; + private: CWallet* wallet; WalletModel *walletModel; diff --git a/src/qt/transactionview.cpp b/src/qt/transactionview.cpp index 7acf5deaa..e7c384161 100644 --- a/src/qt/transactionview.cpp +++ b/src/qt/transactionview.cpp @@ -20,12 +20,9 @@ #include <QLineEdit> #include <QTableView> #include <QHeaderView> -#include <QPushButton> #include <QMessageBox> #include <QPoint> #include <QMenu> -#include <QApplication> -#include <QClipboard> #include <QLabel> #include <QDateTimeEdit> @@ -173,16 +170,11 @@ void TransactionView::setModel(WalletModel *model) transactionView->sortByColumn(TransactionTableModel::Status, Qt::DescendingOrder); transactionView->verticalHeader()->hide(); - transactionView->horizontalHeader()->resizeSection( - TransactionTableModel::Status, 23); - transactionView->horizontalHeader()->resizeSection( - TransactionTableModel::Date, 120); - transactionView->horizontalHeader()->resizeSection( - TransactionTableModel::Type, 120); - transactionView->horizontalHeader()->setResizeMode( - TransactionTableModel::ToAddress, QHeaderView::Stretch); - transactionView->horizontalHeader()->resizeSection( - TransactionTableModel::Amount, 100); + transactionView->horizontalHeader()->resizeSection(TransactionTableModel::Status, 23); + transactionView->horizontalHeader()->resizeSection(TransactionTableModel::Date, 120); + transactionView->horizontalHeader()->resizeSection(TransactionTableModel::Type, 120); + transactionView->horizontalHeader()->setResizeMode(TransactionTableModel::ToAddress, QHeaderView::Stretch); + transactionView->horizontalHeader()->resizeSection(TransactionTableModel::Amount, 100); } } diff --git a/src/qt/transactionview.h b/src/qt/transactionview.h index 4ade3ecd5..e61515fda 100644 --- a/src/qt/transactionview.h +++ b/src/qt/transactionview.h @@ -22,6 +22,7 @@ QT_END_NAMESPACE class TransactionView : public QWidget { Q_OBJECT + public: explicit TransactionView(QWidget *parent = 0); diff --git a/src/qt/walletmodel.h b/src/qt/walletmodel.h index fd5c8c4d4..f14b09eff 100644 --- a/src/qt/walletmodel.h +++ b/src/qt/walletmodel.h @@ -26,6 +26,7 @@ public: class WalletModel : public QObject { Q_OBJECT + public: explicit WalletModel(CWallet *wallet, OptionsModel *optionsModel, QObject *parent = 0); ~WalletModel(); @@ -161,5 +162,4 @@ public slots: void pollBalanceChanged(); }; - #endif // WALLETMODEL_H diff --git a/src/test/checkblock_tests.cpp b/src/test/checkblock_tests.cpp new file mode 100644 index 000000000..3cfb6dbfa --- /dev/null +++ b/src/test/checkblock_tests.cpp @@ -0,0 +1,66 @@ +// +// Unit tests for block.CheckBlock() +// +#include <algorithm> + +#include <boost/assign/list_of.hpp> // for 'map_list_of()' +#include <boost/date_time/posix_time/posix_time_types.hpp> +#include <boost/test/unit_test.hpp> +#include <boost/foreach.hpp> + +#include "main.h" +#include "wallet.h" +#include "net.h" +#include "util.h" + +BOOST_AUTO_TEST_SUITE(CheckBlock_tests) + +bool +read_block(const std::string& filename, CBlock& block) +{ + namespace fs = boost::filesystem; + fs::path testFile = fs::current_path() / "test" / "data" / filename; +#ifdef TEST_DATA_DIR + if (!fs::exists(testFile)) + { + testFile = fs::path(BOOST_PP_STRINGIZE(TEST_DATA_DIR)) / filename; + } +#endif + FILE* fp = fopen(testFile.string().c_str(), "rb"); + if (!fp) return false; + + fseek(fp, 8, SEEK_SET); // skip msgheader/size + + CAutoFile filein = CAutoFile(fp, SER_DISK, CLIENT_VERSION); + if (!filein) return false; + + filein >> block; + + return true; +} + +BOOST_AUTO_TEST_CASE(May15) +{ + // Putting a 1MB binary file in the git repository is not a great + // idea, so this test is only run if you manually download + // test/data/Mar12Fork.dat from + // http://sourceforge.net/projects/bitcoin/files/Bitcoin/blockchain/Mar12Fork.dat/download + unsigned int tMay15 = 1368576000; + SetMockTime(tMay15); // Test as if it was right at May 15 + + CBlock forkingBlock; + if (read_block("Mar12Fork.dat", forkingBlock)) + { + CValidationState state; + forkingBlock.nTime = tMay15-1; // Invalidates PoW + BOOST_CHECK(!forkingBlock.CheckBlock(state, false, false)); + + // After May 15'th, big blocks are OK: + forkingBlock.nTime = tMay15; // Invalidates PoW + BOOST_CHECK(forkingBlock.CheckBlock(state, false, false)); + } + + SetMockTime(0); +} + +BOOST_AUTO_TEST_SUITE_END() |