diff --git a/configure.ac b/configure.ac index 1e22dca7a..64e4ecb41 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ([2.60]) define(_CLIENT_VERSION_MAJOR, 0) define(_CLIENT_VERSION_MINOR, 11) define(_CLIENT_VERSION_REVISION, 0) -define(_CLIENT_VERSION_BUILD, 3) +define(_CLIENT_VERSION_BUILD, 4) define(_CLIENT_VERSION_IS_RELEASE, true) define(_COPYRIGHT_YEAR, 2015) AC_INIT([Darkcoin Core],[_CLIENT_VERSION_MAJOR._CLIENT_VERSION_MINOR._CLIENT_VERSION_REVISION],[info@darkcoin.io],[darkcoin]) diff --git a/src/clientversion.h b/src/clientversion.h index b355f6c05..bd10b9c50 100644 --- a/src/clientversion.h +++ b/src/clientversion.h @@ -13,7 +13,7 @@ #define CLIENT_VERSION_MAJOR 0 #define CLIENT_VERSION_MINOR 11 #define CLIENT_VERSION_REVISION 0 -#define CLIENT_VERSION_BUILD 3 +#define CLIENT_VERSION_BUILD 4 diff --git a/src/core.h b/src/core.h index 8124b39a5..30d9fc9d4 100644 --- a/src/core.h +++ b/src/core.h @@ -12,7 +12,7 @@ #include -#define START_MASTERNODE_PAYMENTS_TESTNET 1403568776 //Tue, 24 Jun 2014 00:12:56 GMT +#define START_MASTERNODE_PAYMENTS_TESTNET 1420837558 //Fri, 09 Jan 2015 21:05:58 GMT #define START_MASTERNODE_PAYMENTS 1403728576 //Wed, 25 Jun 2014 20:36:16 GMT static const int64_t DARKSEND_COLLATERAL = (0.1*COIN); @@ -181,7 +181,7 @@ public: // to spend something, then we consider it dust. // A typical txout is 34 bytes big, and will // need a CTxIn of at least 148 bytes to spend, - // so dust is a txout less than 546 satoshis + // so dust is a txout less than 546 satoshis // with default nMinRelayTxFee. return ((nValue*1000)/(3*((int)GetSerializeSize(SER_DISK,0)+148)) < nMinRelayTxFee); } diff --git a/src/darksend.cpp b/src/darksend.cpp index d2e36b64f..f488d36f3 100644 --- a/src/darksend.cpp +++ b/src/darksend.cpp @@ -435,6 +435,7 @@ int GetInputDarksendRounds(CTxIn in, int rounds) void CDarkSendPool::Reset(){ cachedLastSuccess = 0; vecMasternodesUsed.clear(); + UnlockCoins(); SetNull(); } @@ -1675,7 +1676,7 @@ bool CDarkSendPool::DoAutomaticDenominating(bool fDryRun, bool ready) if(!ready) return true; if(sessionDenom == 0) return true; - + return false; } diff --git a/src/main.cpp b/src/main.cpp index 7808c61ce..f62426264 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2918,7 +2918,7 @@ bool CheckBlock(const CBlock& block, CValidationState& state, bool fCheckPOW, bo CBitcoinAddress address2(address1); LogPrintf("CheckBlock() : Couldn't find masternode payment(%d|%d) or payee(%d|%s) nHeight %d. \n", foundPaymentAmount, masternodePaymentAmount, foundPayee, address2.ToString().c_str(), chainActive.Tip()->nHeight+1); - if(!TestNet() && !RegTest()) return state.DoS(100, error("CheckBlock() : Couldn't find masternode payment or payee")); + if(!RegTest()) return state.DoS(100, error("CheckBlock() : Couldn't find masternode payment or payee")); } } } else { diff --git a/src/masternodeconfig.cpp b/src/masternodeconfig.cpp index 5dbfdf1c1..12afcce2f 100644 --- a/src/masternodeconfig.cpp +++ b/src/masternodeconfig.cpp @@ -1,3 +1,5 @@ + +#include "net.h" #include "masternodeconfig.h" #include "util.h" @@ -26,6 +28,13 @@ bool CMasternodeConfig::read(boost::filesystem::path path, std::string& strErr) streamConfig.close(); return false; } + + if(CService(ip).GetPort() != 19999 && CService(ip).GetPort() != 9999) { + strErr = "Invalid port (must be 9999 for mainnet or 19999 for testnet) detected in masternode.conf: " + line; + streamConfig.close(); + return false; + } + add(alias, ip, privKey, txHash, outputIndex); } diff --git a/src/qt/transactionrecord.cpp b/src/qt/transactionrecord.cpp index 645928585..4773224c5 100644 --- a/src/qt/transactionrecord.cpp +++ b/src/qt/transactionrecord.cpp @@ -85,6 +85,23 @@ QList TransactionRecord::decomposeTransaction(const CWallet * if (fAllFromMe && fAllToMe) { + + for (unsigned int nOut = 0; nOut < wtx.vout.size(); nOut++) + { + const CTxOut& txout = wtx.vout[nOut]; + TransactionRecord sub(hash, nTime); + sub.idx = parts.size(); + + if(txout.nValue == (DARKSEND_COLLATERAL*2)+DARKSEND_FEE || + txout.nValue == (DARKSEND_COLLATERAL*2)+DARKSEND_FEE || + txout.nValue == (DARKSEND_COLLATERAL*3)+DARKSEND_FEE || + txout.nValue == (DARKSEND_COLLATERAL*4)+DARKSEND_FEE || + txout.nValue == (DARKSEND_COLLATERAL*5)+DARKSEND_FEE + ) { + sub.type = TransactionRecord::DarksendSplitUpLarge; + } + } + // Payment to self int64_t nChange = wtx.GetChange(); @@ -125,6 +142,17 @@ QList TransactionRecord::decomposeTransaction(const CWallet * sub.address = mapValue["to"]; } + if(wtx.IsDenominated()){ + sub.type = TransactionRecord::Darksent; + } + + if(txout.nValue == DARKSEND_COLLATERAL){ + sub.type = TransactionRecord::DarksendCollateralPayment; + } + if(txout.nValue == DARKSEND_COLLATERAL*5){ + sub.type = TransactionRecord::DarksendSplitUpLarge; + } + int64_t nValue = txout.nValue; /* Add fee to first output */ if (nTxFee > 0) @@ -142,7 +170,18 @@ QList TransactionRecord::decomposeTransaction(const CWallet * // // Mixed debit transaction, can't break down payees // - parts.append(TransactionRecord(hash, nTime, TransactionRecord::Other, "", nNet, 0)); + bool isDarksent = false; + + for (unsigned int nOut = 0; nOut < wtx.vout.size(); nOut++) + { + const CTxOut& txout = wtx.vout[nOut]; + + BOOST_FOREACH(int64_t d, darkSendDenominations) + if(txout.nValue == d) + isDarksent = true; + } + + parts.append(TransactionRecord(hash, nTime, isDarksent ? TransactionRecord::DarksendDenominate : TransactionRecord::Other, "", nNet, 0)); } } diff --git a/src/qt/transactionrecord.h b/src/qt/transactionrecord.h index af6fd403b..e7d008dcf 100644 --- a/src/qt/transactionrecord.h +++ b/src/qt/transactionrecord.h @@ -75,7 +75,12 @@ public: SendToOther, RecvWithAddress, RecvFromOther, - SendToSelf + SendToSelf, + RecvWithDarksend, + DarksendDenominate, + DarksendCollateralPayment, + DarksendSplitUpLarge, + Darksent }; /** Number of confirmation recommended for accepting a transaction */ diff --git a/src/qt/transactiontablemodel.cpp b/src/qt/transactiontablemodel.cpp index 8cf2b0a1b..dff083c1e 100644 --- a/src/qt/transactiontablemodel.cpp +++ b/src/qt/transactiontablemodel.cpp @@ -356,6 +356,8 @@ QString TransactionTableModel::formatTxType(const TransactionRecord *wtx) const return tr("Received with"); case TransactionRecord::RecvFromOther: return tr("Received from"); + case TransactionRecord::RecvWithDarksend: + return tr("Received via Darksend"); case TransactionRecord::SendToAddress: case TransactionRecord::SendToOther: return tr("Sent to"); @@ -363,6 +365,16 @@ QString TransactionTableModel::formatTxType(const TransactionRecord *wtx) const return tr("Payment to yourself"); case TransactionRecord::Generated: return tr("Mined"); + + case TransactionRecord::DarksendDenominate: + return tr("Darksend Denominate"); + case TransactionRecord::DarksendCollateralPayment: + return tr("Darksend Collateral Payment"); + case TransactionRecord::DarksendSplitUpLarge: + return tr("Darksend Split Up Large Inputs"); + case TransactionRecord::Darksent: + return tr("Darksent"); + default: return QString(); } @@ -374,6 +386,7 @@ QVariant TransactionTableModel::txAddressDecoration(const TransactionRecord *wtx { case TransactionRecord::Generated: return QIcon(":/icons/tx_mined"); + case TransactionRecord::RecvWithDarksend: case TransactionRecord::RecvWithAddress: case TransactionRecord::RecvFromOther: return QIcon(":/icons/tx_input"); @@ -393,8 +406,10 @@ QString TransactionTableModel::formatTxToAddress(const TransactionRecord *wtx, b case TransactionRecord::RecvFromOther: return QString::fromStdString(wtx->address); case TransactionRecord::RecvWithAddress: + case TransactionRecord::RecvWithDarksend: case TransactionRecord::SendToAddress: case TransactionRecord::Generated: + case TransactionRecord::Darksent: return lookupAddress(wtx->address, tooltip); case TransactionRecord::SendToOther: return QString::fromStdString(wtx->address); diff --git a/src/qt/transactionview.cpp b/src/qt/transactionview.cpp index d4d29416c..46316773b 100644 --- a/src/qt/transactionview.cpp +++ b/src/qt/transactionview.cpp @@ -78,6 +78,8 @@ TransactionView::TransactionView(QWidget *parent) : TransactionFilterProxy::TYPE(TransactionRecord::RecvFromOther)); typeWidget->addItem(tr("Sent to"), TransactionFilterProxy::TYPE(TransactionRecord::SendToAddress) | TransactionFilterProxy::TYPE(TransactionRecord::SendToOther)); + typeWidget->addItem(tr("Darksent"), TransactionFilterProxy::TYPE(TransactionRecord::Darksent)); + typeWidget->addItem(tr("Darksend Denominate"), TransactionFilterProxy::TYPE(TransactionRecord::DarksendDenominate)); typeWidget->addItem(tr("To yourself"), TransactionFilterProxy::TYPE(TransactionRecord::SendToSelf)); typeWidget->addItem(tr("Mined"), TransactionFilterProxy::TYPE(TransactionRecord::Generated)); typeWidget->addItem(tr("Other"), TransactionFilterProxy::TYPE(TransactionRecord::Other));