diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bitcoinrpc.cpp | 27 | ||||
-rw-r--r-- | src/checkpoints.cpp | 1 | ||||
-rw-r--r-- | src/init.cpp | 6 | ||||
-rw-r--r-- | src/irc.cpp | 51 | ||||
-rw-r--r-- | src/irc.h | 1 | ||||
-rw-r--r-- | src/main.cpp | 53 | ||||
-rw-r--r-- | src/net.cpp | 51 | ||||
-rw-r--r-- | src/net.h | 24 | ||||
-rw-r--r-- | src/protocol.h | 1 | ||||
-rw-r--r-- | src/qt/addressbookpage.cpp | 6 | ||||
-rw-r--r-- | src/qt/bitcoin.cpp | 12 | ||||
-rw-r--r-- | src/qt/guiutil.cpp | 49 | ||||
-rw-r--r-- | src/qt/guiutil.h | 14 | ||||
-rw-r--r-- | src/qt/qrcodedialog.cpp | 22 | ||||
-rw-r--r-- | src/qt/transactionview.cpp | 6 | ||||
-rw-r--r-- | src/test/multisig_tests.cpp | 8 | ||||
-rw-r--r-- | src/test/script_P2SH_tests.cpp | 6 | ||||
-rw-r--r-- | src/test/script_tests.cpp | 14 | ||||
-rw-r--r-- | src/test/sigopcount_tests.cpp | 2 | ||||
-rw-r--r-- | src/test/transaction_tests.cpp | 2 | ||||
-rw-r--r-- | src/uint256.h | 7 |
21 files changed, 215 insertions, 148 deletions
diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp index be40e937b8..c677b174ca 100644 --- a/src/bitcoinrpc.cpp +++ b/src/bitcoinrpc.cpp @@ -120,6 +120,17 @@ Value ValueFromAmount(int64 amount) return (double)amount / (double)COIN; } +std::string +HexBits(unsigned int nBits) +{ + union { + int32_t nBits; + char cBits[4]; + } uBits; + uBits.nBits = htonl((int32_t)nBits); + return HexStr(BEGIN(uBits.cBits), END(uBits.cBits)); +} + void WalletTxToJSON(const CWalletTx& wtx, Object& entry) { int confirms = wtx.GetDepthInMainChain(); @@ -147,11 +158,13 @@ Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex) { Object result; result.push_back(Pair("hash", block.GetHash().GetHex())); - result.push_back(Pair("blockcount", blockindex->nHeight)); + result.push_back(Pair("size", (int)::GetSerializeSize(block, SER_NETWORK))); + result.push_back(Pair("height", blockindex->nHeight)); result.push_back(Pair("version", block.nVersion)); result.push_back(Pair("merkleroot", block.hashMerkleRoot.GetHex())); result.push_back(Pair("time", (boost::int64_t)block.GetBlockTime())); result.push_back(Pair("nonce", (boost::uint64_t)block.nNonce)); + result.push_back(Pair("bits", HexBits(block.nBits))); result.push_back(Pair("difficulty", GetDifficulty(blockindex))); Array txhashes; BOOST_FOREACH (const CTransaction&tx, block.vtx) @@ -159,9 +172,9 @@ Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex) result.push_back(Pair("tx", txhashes)); if (blockindex->pprev) - result.push_back(Pair("hashprevious", blockindex->pprev->GetBlockHash().GetHex())); + result.push_back(Pair("previousblockhash", blockindex->pprev->GetBlockHash().GetHex())); if (blockindex->pnext) - result.push_back(Pair("hashnext", blockindex->pnext->GetBlockHash().GetHex())); + result.push_back(Pair("nextblockhash", blockindex->pnext->GetBlockHash().GetHex())); return result; } @@ -1939,13 +1952,7 @@ Value getmemorypool(const Array& params, bool fHelp) result.push_back(Pair("time", (int64_t)pblock->nTime)); result.push_back(Pair("mintime", (int64_t)pindexPrev->GetMedianTimePast()+1)); result.push_back(Pair("curtime", (int64_t)GetAdjustedTime())); - - union { - int32_t nBits; - char cBits[4]; - } uBits; - uBits.nBits = htonl((int32_t)pblock->nBits); - result.push_back(Pair("bits", HexStr(BEGIN(uBits.cBits), END(uBits.cBits)))); + result.push_back(Pair("bits", HexBits(pblock->nBits))); return result; } diff --git a/src/checkpoints.cpp b/src/checkpoints.cpp index f78712ef4b..f5ce053870 100644 --- a/src/checkpoints.cpp +++ b/src/checkpoints.cpp @@ -30,6 +30,7 @@ namespace Checkpoints (118000, uint256("0x000000000000774a7f8a7a12dc906ddb9e17e75d684f15e00f8767f9e8f36553")) (134444, uint256("0x00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe")) (140700, uint256("0x000000000000033b512028abb90e1626d8b346fd0ed598ac0a3c371138dce2bd")) + (168000, uint256("0x000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763")) ; bool CheckBlock(int nHeight, const uint256& hash) diff --git a/src/init.cpp b/src/init.cpp index f09f044f16..3a8fcdf524 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -187,6 +187,7 @@ bool AppInit2(int argc, char* argv[]) " -gen \t\t " + _("Generate coins") + "\n" + " -gen=0 \t\t " + _("Don't generate coins") + "\n" + " -min \t\t " + _("Start minimized") + "\n" + + " -splash \t\t " + _("Show splash screen on startup (default: 1)") + "\n" + " -datadir=<dir> \t\t " + _("Specify data directory") + "\n" + " -timeout=<n> \t " + _("Specify connection timeout (in milliseconds)") + "\n" + " -proxy=<ip:port> \t " + _("Connect through socks4 proxy") + "\n" + @@ -259,6 +260,11 @@ bool AppInit2(int argc, char* argv[]) } fTestNet = GetBoolArg("-testnet"); + if (fTestNet) + { + SoftSetBoolArg("-irc", true); + } + fDebug = GetBoolArg("-debug"); #if !defined(WIN32) && !defined(QT_GUI) diff --git a/src/irc.cpp b/src/irc.cpp index e79577269e..7a6f40cfad 100644 --- a/src/irc.cpp +++ b/src/irc.cpp @@ -76,57 +76,6 @@ static bool Send(SOCKET hSocket, const char* pszSend) return true; } -bool RecvLine(SOCKET hSocket, string& strLine) -{ - strLine = ""; - loop - { - char c; - int nBytes = recv(hSocket, &c, 1, 0); - if (nBytes > 0) - { - if (c == '\n') - continue; - if (c == '\r') - return true; - strLine += c; - if (strLine.size() >= 9000) - return true; - } - else if (nBytes <= 0) - { - if (fShutdown) - return false; - if (nBytes < 0) - { - int nErr = WSAGetLastError(); - if (nErr == WSAEMSGSIZE) - continue; - if (nErr == WSAEWOULDBLOCK || nErr == WSAEINTR || nErr == WSAEINPROGRESS) - { - Sleep(10); - continue; - } - } - if (!strLine.empty()) - return true; - if (nBytes == 0) - { - // socket closed - printf("IRC socket closed\n"); - return false; - } - else - { - // socket error - int nErr = WSAGetLastError(); - printf("IRC recv failed: %d\n", nErr); - return false; - } - } - } -} - bool RecvLineIRC(SOCKET hSocket, string& strLine) { loop @@ -5,7 +5,6 @@ #ifndef BITCOIN_IRC_H #define BITCOIN_IRC_H -bool RecvLine(SOCKET hSocket, std::string& strLine); void ThreadIRCSeed(void* parg); extern int nGotIRCAddresses; diff --git a/src/main.cpp b/src/main.cpp index b73037fb6a..a9311e2ceb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -21,7 +21,7 @@ using namespace boost; // Name of client reported in the 'version' message. Report the same name // for both bitcoind and bitcoin-qt, to make it harder for attackers to // target servers or GUI users specifically. -const std::string CLIENT_NAME("bitcoin-qt"); +const std::string CLIENT_NAME("Satoshi"); CCriticalSection cs_setpwalletRegistered; set<CWallet*> setpwalletRegistered; @@ -1405,6 +1405,9 @@ bool static Reorganize(CTxDB& txdb, CBlockIndex* pindexNew) BOOST_FOREACH(CTransaction& tx, vDelete) tx.RemoveFromMemoryPool(); + printf("REORGANIZE: Disconnected %i blocks; %s..%s\n", vDisconnect.size(), pfork->GetBlockHash().ToString().substr(0,20).c_str(), pindexBest->GetBlockHash().ToString().substr(0,20).c_str()); + printf("REORGANIZE: Connected %i blocks; %s..%s\n", vConnect.size(), pfork->GetBlockHash().ToString().substr(0,20).c_str(), pindexNew->GetBlockHash().ToString().substr(0,20).c_str()); + return true; } @@ -1652,7 +1655,8 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock) int64 deltaTime = pblock->GetBlockTime() - pcheckpoint->nTime; if (deltaTime < 0) { - pfrom->Misbehaving(100); + if (pfrom) + pfrom->Misbehaving(100); return error("ProcessBlock() : block with timestamp before last checkpoint"); } CBigNum bnNewBlock; @@ -1661,7 +1665,8 @@ bool ProcessBlock(CNode* pfrom, CBlock* pblock) bnRequired.SetCompact(ComputeMinWork(pcheckpoint->nBits, deltaTime)); if (bnNewBlock > bnRequired) { - pfrom->Misbehaving(100); + if (pfrom) + pfrom->Misbehaving(100); return error("ProcessBlock() : block with too little proof-of-work"); } } @@ -2100,18 +2105,24 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) CAddress addrFrom; uint64 nNonce = 1; vRecv >> pfrom->nVersion >> pfrom->nServices >> nTime >> addrMe; + if (pfrom->nVersion < 209) + { + // Since Februari 20, 2012, the protocol is initiated at version 209, + // and earlier versions are no longer supported + printf("partner %s using obsolete version %i; disconnecting\n", pfrom->addr.ToString().c_str(), pfrom->nVersion); + pfrom->fDisconnect = true; + return false; + } + if (pfrom->nVersion == 10300) pfrom->nVersion = 300; - if (pfrom->nVersion >= 106 && !vRecv.empty()) + if (!vRecv.empty()) vRecv >> addrFrom >> nNonce; - if (pfrom->nVersion >= 106 && !vRecv.empty()) + if (!vRecv.empty()) vRecv >> pfrom->strSubVer; - if (pfrom->nVersion >= 209 && !vRecv.empty()) + if (!vRecv.empty()) vRecv >> pfrom->nStartingHeight; - if (pfrom->nVersion == 0) - return false; - // Disconnect if we connected to ourself if (nNonce == nLocalHostNonce && nNonce > 1) { @@ -2129,11 +2140,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) AddTimeData(pfrom->addr, nTime); // Change version - if (pfrom->nVersion >= 209) - pfrom->PushMessage("verack"); + pfrom->PushMessage("verack"); pfrom->vSend.SetVersion(min(pfrom->nVersion, PROTOCOL_VERSION)); - if (pfrom->nVersion < 209) - pfrom->vRecv.SetVersion(min(pfrom->nVersion, PROTOCOL_VERSION)); if (!pfrom->fInbound) { @@ -2197,8 +2205,6 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) vRecv >> vAddr; // Don't want addr from older versions unless seeding - if (pfrom->nVersion < 209) - return true; if (pfrom->nVersion < 31402 && mapAddresses.size() > 1000) return true; if (vAddr.size() > 1000) @@ -2660,17 +2666,14 @@ bool ProcessMessages(CNode* pfrom) } // Checksum - if (vRecv.GetVersion() >= 209) + uint256 hash = Hash(vRecv.begin(), vRecv.begin() + nMessageSize); + unsigned int nChecksum = 0; + memcpy(&nChecksum, &hash, sizeof(nChecksum)); + if (nChecksum != hdr.nChecksum) { - uint256 hash = Hash(vRecv.begin(), vRecv.begin() + nMessageSize); - unsigned int nChecksum = 0; - memcpy(&nChecksum, &hash, sizeof(nChecksum)); - if (nChecksum != hdr.nChecksum) - { - printf("ProcessMessage(%s, %u bytes) : CHECKSUM ERROR nChecksum=%08x hdr.nChecksum=%08x\n", - strCommand.c_str(), nMessageSize, nChecksum, hdr.nChecksum); - continue; - } + printf("ProcessMessage(%s, %u bytes) : CHECKSUM ERROR nChecksum=%08x hdr.nChecksum=%08x\n", + strCommand.c_str(), nMessageSize, nChecksum, hdr.nChecksum); + continue; } // Copy message to its own buffer diff --git a/src/net.cpp b/src/net.cpp index fd488ce671..546bc6adc8 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -83,6 +83,57 @@ void CNode::PushGetBlocks(CBlockIndex* pindexBegin, uint256 hashEnd) +bool RecvLine(SOCKET hSocket, string& strLine) +{ + strLine = ""; + loop + { + char c; + int nBytes = recv(hSocket, &c, 1, 0); + if (nBytes > 0) + { + if (c == '\n') + continue; + if (c == '\r') + return true; + strLine += c; + if (strLine.size() >= 9000) + return true; + } + else if (nBytes <= 0) + { + if (fShutdown) + return false; + if (nBytes < 0) + { + int nErr = WSAGetLastError(); + if (nErr == WSAEMSGSIZE) + continue; + if (nErr == WSAEWOULDBLOCK || nErr == WSAEINTR || nErr == WSAEINPROGRESS) + { + Sleep(10); + continue; + } + } + if (!strLine.empty()) + return true; + if (nBytes == 0) + { + // socket closed + printf("socket closed\n"); + return false; + } + else + { + // socket error + int nErr = WSAGetLastError(); + printf("recv failed: %d\n", nErr); + return false; + } + } + } +} + bool GetMyExternalIP2(const CService& addrConnect, const char* pszGet, const char* pszKeyword, CNetAddr& ipRet) @@ -29,6 +29,7 @@ inline unsigned int ReceiveBufferSize() { return 1000*GetArg("-maxreceivebuffer" inline unsigned int SendBufferSize() { return 1000*GetArg("-maxsendbuffer", 10*1000); } static const unsigned int PUBLISH_HOPS = 5; +bool RecvLine(SOCKET hSocket, std::string& strLine); bool GetMyExternalIP(CNetAddr& ipRet); bool AddAddress(CAddress addr, int64 nTimePenalty=0, CAddrDB *pAddrDB=NULL); void AddressCurrentlyConnected(const CService& addr); @@ -166,15 +167,9 @@ public: nServices = 0; hSocket = hSocketIn; vSend.SetType(SER_NETWORK); - vSend.SetVersion(0); vRecv.SetType(SER_NETWORK); - vRecv.SetVersion(0); - // Version 0.2 obsoletes 20 Feb 2012 - if (GetTime() > 1329696000) - { - vSend.SetVersion(209); - vRecv.SetVersion(209); - } + vSend.SetVersion(209); + vRecv.SetVersion(209); nLastSend = 0; nLastRecv = 0; nLastSendEmpty = GetTime(); @@ -333,14 +328,11 @@ public: memcpy((char*)&vSend[nHeaderStart] + offsetof(CMessageHeader, nMessageSize), &nSize, sizeof(nSize)); // Set the checksum - if (vSend.GetVersion() >= 209) - { - uint256 hash = Hash(vSend.begin() + nMessageStart, vSend.end()); - unsigned int nChecksum = 0; - memcpy(&nChecksum, &hash, sizeof(nChecksum)); - assert(nMessageStart - nHeaderStart >= offsetof(CMessageHeader, nChecksum) + sizeof(nChecksum)); - memcpy((char*)&vSend[nHeaderStart] + offsetof(CMessageHeader, nChecksum), &nChecksum, sizeof(nChecksum)); - } + uint256 hash = Hash(vSend.begin() + nMessageStart, vSend.end()); + unsigned int nChecksum = 0; + memcpy(&nChecksum, &hash, sizeof(nChecksum)); + assert(nMessageStart - nHeaderStart >= offsetof(CMessageHeader, nChecksum) + sizeof(nChecksum)); + memcpy((char*)&vSend[nHeaderStart] + offsetof(CMessageHeader, nChecksum), &nChecksum, sizeof(nChecksum)); if (fDebug) { printf("(%d bytes)\n", nSize); diff --git a/src/protocol.h b/src/protocol.h index 9ebbfad701..b70dd71b82 100644 --- a/src/protocol.h +++ b/src/protocol.h @@ -45,7 +45,6 @@ class CMessageHeader READWRITE(FLATDATA(pchMessageStart)); READWRITE(FLATDATA(pchCommand)); READWRITE(nMessageSize); - if (nVersion >= 209) READWRITE(nChecksum); ) diff --git a/src/qt/addressbookpage.cpp b/src/qt/addressbookpage.cpp index b5a798ca31..76aa87b134 100644 --- a/src/qt/addressbookpage.cpp +++ b/src/qt/addressbookpage.cpp @@ -9,7 +9,6 @@ #include <QSortFilterProxyModel> #include <QClipboard> -#include <QFileDialog> #include <QMessageBox> #include <QMenu> @@ -277,10 +276,9 @@ void AddressBookPage::done(int retval) void AddressBookPage::exportClicked() { // CSV is currently the only supported format - QString filename = QFileDialog::getSaveFileName( + QString filename = GUIUtil::getSaveFileName( this, - tr("Export Address Book Data"), - QDir::currentPath(), + tr("Export Address Book Data"), QString(), tr("Comma separated file (*.csv)")); if (filename.isNull()) return; diff --git a/src/qt/bitcoin.cpp b/src/qt/bitcoin.cpp index 354e87c983..03b89f06fc 100644 --- a/src/qt/bitcoin.cpp +++ b/src/qt/bitcoin.cpp @@ -183,9 +183,12 @@ int main(int argc, char *argv[]) app.setApplicationName(QApplication::translate("main", "Bitcoin-Qt")); QSplashScreen splash(QPixmap(":/images/splash"), 0); - splash.show(); - splash.setAutoFillBackground(true); - splashref = &splash; + if (GetBoolArg("-splash", true) && !GetBoolArg("-min")) + { + splash.show(); + splash.setAutoFillBackground(true); + splashref = &splash; + } app.processEvents(); @@ -199,7 +202,8 @@ int main(int argc, char *argv[]) // Put this in a block, so that BitcoinGUI is cleaned up properly before // calling Shutdown() in case of exceptions. BitcoinGUI window; - splash.finish(&window); + if (splashref) + splash.finish(&window); OptionsModel optionsModel(pwalletMain); ClientModel clientModel(&optionsModel); WalletModel walletModel(pwalletMain, &optionsModel); diff --git a/src/qt/guiutil.cpp b/src/qt/guiutil.cpp index 02fc3b6700..ac69bd07e9 100644 --- a/src/qt/guiutil.cpp +++ b/src/qt/guiutil.cpp @@ -15,6 +15,8 @@ #include <QAbstractItemView> #include <QApplication> #include <QClipboard> +#include <QFileDialog> +#include <QDesktopServices> QString GUIUtil::dateTimeStr(qint64 nTime) { @@ -135,3 +137,50 @@ void GUIUtil::copyEntryData(QAbstractItemView *view, int column, int role) QApplication::clipboard()->setText(selection.at(0).data(role).toString()); } } + +QString GUIUtil::getSaveFileName(QWidget *parent, const QString &caption, + const QString &dir, + const QString &filter, + QString *selectedSuffixOut) +{ + QString selectedFilter; + QString myDir; + if(dir.isEmpty()) // Default to user documents location + { + myDir = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); + } + else + { + myDir = dir; + } + QString result = QFileDialog::getSaveFileName(parent, caption, myDir, filter, &selectedFilter); + + /* Extract first suffix from filter pattern "Description (*.foo)" or "Description (*.foo *.bar ...) */ + QRegExp filter_re(".* \\(\\*\\.(.*)[ \\)]"); + QString selectedSuffix; + if(filter_re.exactMatch(selectedFilter)) + { + selectedSuffix = filter_re.cap(1); + } + + /* Add suffix if needed */ + QFileInfo info(result); + if(!result.isEmpty()) + { + if(info.suffix().isEmpty() && !selectedSuffix.isEmpty()) + { + /* No suffix specified, add selected suffix */ + if(!result.endsWith(".")) + result.append("."); + result.append(selectedSuffix); + } + } + + /* Return selected suffix if asked to */ + if(selectedSuffixOut) + { + *selectedSuffixOut = selectedSuffix; + } + return result; +} + diff --git a/src/qt/guiutil.h b/src/qt/guiutil.h index 0c8b17186f..75ba53f206 100644 --- a/src/qt/guiutil.h +++ b/src/qt/guiutil.h @@ -46,6 +46,20 @@ public: */ static void copyEntryData(QAbstractItemView *view, int column, int role=Qt::EditRole); + /** Get save file name, mimics QFileDialog::getSaveFileName, except that it appends a default suffix + when no suffix is provided by the user. + + @param[in] parent Parent window (or 0) + @param[in] caption Window caption (or empty, for default) + @param[in] dir Starting directory (or empty, to default to documents directory) + @param[in] filter Filter specification such as "Comma Separated Files (*.csv)" + @param[out] selectedSuffixOut Pointer to return the suffix (file type) that was selected (or 0). + Can be useful when choosing the save file format based on suffix. + */ + static QString getSaveFileName(QWidget *parent=0, const QString &caption=QString(), + const QString &dir=QString(), const QString &filter=QString(), + QString *selectedSuffixOut=0); + }; #endif // GUIUTIL_H diff --git a/src/qt/qrcodedialog.cpp b/src/qt/qrcodedialog.cpp index ed4c758e38..82959831de 100644 --- a/src/qt/qrcodedialog.cpp +++ b/src/qt/qrcodedialog.cpp @@ -1,9 +1,9 @@ #include "qrcodedialog.h" #include "ui_qrcodedialog.h" +#include "guiutil.h" + #include <QPixmap> #include <QUrl> -#include <QFileDialog> -#include <QDesktopServices> #include <QDebug> #include <qrencode.h> @@ -34,8 +34,8 @@ QRCodeDialog::~QRCodeDialog() delete ui; } -void QRCodeDialog::genCode() { - +void QRCodeDialog::genCode() +{ QString uri = getURI(); //qDebug() << "Encoding:" << uri.toUtf8().constData(); QRcode *code = QRcode_encodeString(uri.toUtf8().constData(), 0, QR_ECLEVEL_L, QR_MODE_8, 1); @@ -52,7 +52,8 @@ void QRCodeDialog::genCode() { ui->lblQRCode->setPixmap(QPixmap::fromImage(myImage).scaled(300, 300)); } -QString QRCodeDialog::getURI() { +QString QRCodeDialog::getURI() +{ QString ret = QString("bitcoin:%1").arg(address); int paramCount = 0; @@ -80,21 +81,24 @@ QString QRCodeDialog::getURI() { return ret; } -void QRCodeDialog::on_lnReqAmount_textChanged(const QString &) { +void QRCodeDialog::on_lnReqAmount_textChanged(const QString &) +{ genCode(); } -void QRCodeDialog::on_lnLabel_textChanged(const QString &) { +void QRCodeDialog::on_lnLabel_textChanged(const QString &) +{ genCode(); } -void QRCodeDialog::on_lnMessage_textChanged(const QString &) { +void QRCodeDialog::on_lnMessage_textChanged(const QString &) +{ genCode(); } void QRCodeDialog::on_btnSaveAs_clicked() { - QString fn = QFileDialog::getSaveFileName(this, "Save Image...", QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation), "Images (*.png)"); + QString fn = GUIUtil::getSaveFileName(this, tr("Save Image..."), QString(), tr("PNG Images (*.png)")); if(!fn.isEmpty()) { myImage.scaled(EXPORT_IMAGE_SIZE, EXPORT_IMAGE_SIZE).save(fn); } diff --git a/src/qt/transactionview.cpp b/src/qt/transactionview.cpp index 4c357d1379..eaed48bfdf 100644 --- a/src/qt/transactionview.cpp +++ b/src/qt/transactionview.cpp @@ -21,7 +21,6 @@ #include <QTableView> #include <QHeaderView> #include <QPushButton> -#include <QFileDialog> #include <QMessageBox> #include <QPoint> #include <QMenu> @@ -264,10 +263,9 @@ void TransactionView::changedAmount(const QString &amount) void TransactionView::exportClicked() { // CSV is currently the only supported format - QString filename = QFileDialog::getSaveFileName( + QString filename = GUIUtil::getSaveFileName( this, - tr("Export Transaction Data"), - QDir::currentPath(), + tr("Export Transaction Data"), QString(), tr("Comma separated file (*.csv)")); if (filename.isNull()) return; diff --git a/src/test/multisig_tests.cpp b/src/test/multisig_tests.cpp index 56b18044b8..8ae9290fcc 100644 --- a/src/test/multisig_tests.cpp +++ b/src/test/multisig_tests.cpp @@ -46,7 +46,7 @@ BOOST_AUTO_TEST_CASE(multisig_verify) { CKey key[4]; for (int i = 0; i < 4; i++) - key[i].MakeNewKey(); + key[i].MakeNewKey(true); CScript a_and_b; a_and_b << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; @@ -131,7 +131,7 @@ BOOST_AUTO_TEST_CASE(multisig_IsStandard) { CKey key[4]; for (int i = 0; i < 4; i++) - key[i].MakeNewKey(); + key[i].MakeNewKey(true); CScript a_and_b; a_and_b << OP_2 << key[0].GetPubKey() << key[1].GetPubKey() << OP_2 << OP_CHECKMULTISIG; @@ -178,7 +178,7 @@ BOOST_AUTO_TEST_CASE(multisig_Solver1) CBitcoinAddress keyaddr[3]; for (int i = 0; i < 3; i++) { - key[i].MakeNewKey(); + key[i].MakeNewKey(true); keystore.AddKey(key[i]); keyaddr[i].SetPubKey(key[i].GetPubKey()); } @@ -257,7 +257,7 @@ BOOST_AUTO_TEST_CASE(multisig_Sign) CKey key[4]; for (int i = 0; i < 4; i++) { - key[i].MakeNewKey(); + key[i].MakeNewKey(true); keystore.AddKey(key[i]); } diff --git a/src/test/script_P2SH_tests.cpp b/src/test/script_P2SH_tests.cpp index e3899113a3..aa72c00092 100644 --- a/src/test/script_P2SH_tests.cpp +++ b/src/test/script_P2SH_tests.cpp @@ -57,7 +57,7 @@ BOOST_AUTO_TEST_CASE(sign) CKey key[4]; for (int i = 0; i < 4; i++) { - key[i].MakeNewKey(); + key[i].MakeNewKey(true); keystore.AddKey(key[i]); } @@ -148,7 +148,7 @@ BOOST_AUTO_TEST_CASE(set) std::vector<CKey> keys; for (int i = 0; i < 4; i++) { - key[i].MakeNewKey(); + key[i].MakeNewKey(true); keystore.AddKey(key[i]); keys.push_back(key[i]); } @@ -249,7 +249,7 @@ BOOST_AUTO_TEST_CASE(AreInputsStandard) vector<CKey> keys; for (int i = 0; i < 3; i++) { - key[i].MakeNewKey(); + key[i].MakeNewKey(true); keystore.AddKey(key[i]); keys.push_back(key[i]); } diff --git a/src/test/script_tests.cpp b/src/test/script_tests.cpp index 79dd7f1bd3..493ea69d93 100644 --- a/src/test/script_tests.cpp +++ b/src/test/script_tests.cpp @@ -72,9 +72,9 @@ sign_multisig(CScript scriptPubKey, CKey key, CTransaction transaction) BOOST_AUTO_TEST_CASE(script_CHECKMULTISIG12) { CKey key1, key2, key3; - key1.MakeNewKey(); - key2.MakeNewKey(); - key3.MakeNewKey(); + key1.MakeNewKey(true); + key2.MakeNewKey(false); + key3.MakeNewKey(true); CScript scriptPubKey12; scriptPubKey12 << OP_1 << key1.GetPubKey() << key2.GetPubKey() << OP_2 << OP_CHECKMULTISIG; @@ -105,10 +105,10 @@ BOOST_AUTO_TEST_CASE(script_CHECKMULTISIG12) BOOST_AUTO_TEST_CASE(script_CHECKMULTISIG23) { CKey key1, key2, key3, key4; - key1.MakeNewKey(); - key2.MakeNewKey(); - key3.MakeNewKey(); - key4.MakeNewKey(); + key1.MakeNewKey(true); + key2.MakeNewKey(false); + key3.MakeNewKey(true); + key4.MakeNewKey(false); CScript scriptPubKey23; scriptPubKey23 << OP_2 << key1.GetPubKey() << key2.GetPubKey() << key3.GetPubKey() << OP_3 << OP_CHECKMULTISIG; diff --git a/src/test/sigopcount_tests.cpp b/src/test/sigopcount_tests.cpp index 0b0a4a62d8..d301313a9d 100644 --- a/src/test/sigopcount_tests.cpp +++ b/src/test/sigopcount_tests.cpp @@ -41,7 +41,7 @@ BOOST_AUTO_TEST_CASE(GetSigOpCount) for (int i = 0; i < 3; i++) { CKey k; - k.MakeNewKey(); + k.MakeNewKey(true); keys.push_back(k); } CScript s2; diff --git a/src/test/transaction_tests.cpp b/src/test/transaction_tests.cpp index cd4d7eed96..99163e55f2 100644 --- a/src/test/transaction_tests.cpp +++ b/src/test/transaction_tests.cpp @@ -38,7 +38,7 @@ SetupDummyInputs(CBasicKeyStore& keystoreRet, MapPrevTx& inputsRet) CKey key[4]; for (int i = 0; i < 4; i++) { - key[i].MakeNewKey(); + key[i].MakeNewKey(i % 2); keystoreRet.AddKey(key[i]); } diff --git a/src/uint256.h b/src/uint256.h index 5b1ba9f6f7..caf6fa118b 100644 --- a/src/uint256.h +++ b/src/uint256.h @@ -92,13 +92,6 @@ public: return *this; } - base_uint& operator&=(uint64 b) - { - pn[0] &= (unsigned int)b; - pn[1] &= (unsigned int)(b >> 32); - return *this; - } - base_uint& operator|=(uint64 b) { pn[0] |= (unsigned int)b; |