mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 13:03:17 +01:00
fixed some bugs
This commit is contained in:
parent
f9f7d69162
commit
f69ff36c77
52
src/main.cpp
52
src/main.cpp
@ -3885,7 +3885,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
||||
}
|
||||
|
||||
if(darkSendPool.submittedToMasternode != pfrom->addr){
|
||||
LogPrintf("dsc - message doesn't match current masternode - %s != %s\n", darkSendPool.submittedToMasternode.ToString().c_str(), pfrom->addr.ToString().c_str());
|
||||
//LogPrintf("dsc - message doesn't match current masternode - %s != %s\n", darkSendPool.submittedToMasternode.ToString().c_str(), pfrom->addr.ToString().c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -3908,7 +3908,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
||||
}
|
||||
|
||||
if(darkSendPool.submittedToMasternode != pfrom->addr){
|
||||
LogPrintf("dsc - message doesn't match current masternode - %s != %s\n", darkSendPool.submittedToMasternode.ToString().c_str(), pfrom->addr.ToString().c_str());
|
||||
//LogPrintf("dsc - message doesn't match current masternode - %s != %s\n", darkSendPool.submittedToMasternode.ToString().c_str(), pfrom->addr.ToString().c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -4090,7 +4090,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
|
||||
}
|
||||
|
||||
if(darkSendPool.submittedToMasternode != pfrom->addr){
|
||||
LogPrintf("dssu - message doesn't match current masternode - %s != %s\n", darkSendPool.submittedToMasternode.ToString().c_str(), pfrom->addr.ToString().c_str());
|
||||
//LogPrintf("dssu - message doesn't match current masternode - %s != %s\n", darkSendPool.submittedToMasternode.ToString().c_str(), pfrom->addr.ToString().c_str());
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -6100,6 +6100,19 @@ void CDarkSendPool::Check()
|
||||
LOCK2(cs_main, pwalletMain->cs_wallet);
|
||||
{
|
||||
if (fMasterNode) { //only the main node is master atm
|
||||
LogPrintf("Transaction 2: %s\n", txNew.ToString().c_str());
|
||||
|
||||
// Broadcast
|
||||
if (!txNew.AcceptToMemoryPool(true, false))
|
||||
{
|
||||
LogPrintf("CDarkSendPool::Check() - CommitTransaction : Error: Transaction not valid\n");
|
||||
SetNull();
|
||||
pwalletMain->Lock();
|
||||
UpdateState(POOL_STATUS_ACCEPTING_ENTRIES);
|
||||
RelayDarkSendCompletedTransaction(sessionID, true, "Transaction not valid, please try again");
|
||||
return;
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
BOOST_FOREACH(const CTxIn& txin, txNew.vin)
|
||||
{
|
||||
@ -6120,19 +6133,6 @@ void CDarkSendPool::Check()
|
||||
i++;
|
||||
}
|
||||
|
||||
LogPrintf("Transaction 2: %s\n", txNew.ToString().c_str());
|
||||
|
||||
// Broadcast
|
||||
if (!txNew.AcceptToMemoryPool(true, false))
|
||||
{
|
||||
LogPrintf("CDarkSendPool::Check() - CommitTransaction : Error: Transaction not valid\n");
|
||||
SetNull();
|
||||
pwalletMain->Lock();
|
||||
UpdateState(POOL_STATUS_ACCEPTING_ENTRIES);
|
||||
RelayDarkSendCompletedTransaction(sessionID, true, "Transaction not valid, please try again");
|
||||
return;
|
||||
}
|
||||
|
||||
if(myEntries.size() > 0) {
|
||||
// add to my wallet if it's mine
|
||||
pwalletMain->AddToWallet(txNew);
|
||||
@ -7110,7 +7110,7 @@ bool CDarkSendPool::DoAutomaticDenominating(bool fDryRun)
|
||||
}
|
||||
|
||||
if(fDryRun) return true;
|
||||
|
||||
/*
|
||||
// initial phase, find a masternode
|
||||
if(!sessionFoundMasternode){
|
||||
int64 nTotalValue = pwalletMain->GetTotalValue(vCoins) - DARKSEND_FEE;
|
||||
@ -7171,9 +7171,10 @@ bool CDarkSendPool::DoAutomaticDenominating(bool fDryRun)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
std::string strError = pwalletMain->DarkSendDenominate(minRounds, maxAmount);
|
||||
LogPrintf("DoAutomaticDenominating : Running darksend denominate. Return '%s'\n", strError.c_str());
|
||||
return true;
|
||||
|
||||
if(strError == "") return true;
|
||||
|
||||
@ -7191,9 +7192,15 @@ bool CDarkSendPool::DoAutomaticDenominating(bool fDryRun)
|
||||
|
||||
bool CDarkSendPool::SplitUpMoney(bool justCollateral)
|
||||
{
|
||||
if((nBestHeight - lastSplitUpBlock) < 10){
|
||||
LogPrintf("SplitUpMoney - Too soon to split up again\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
int64 nTotalBalance = pwalletMain->GetDenominatedBalance(false);
|
||||
if(justCollateral && nTotalBalance > 1*COIN) nTotalBalance = 1*COIN;
|
||||
int64 nTotalOut = 0;
|
||||
lastSplitUpBlock = nBestHeight;
|
||||
|
||||
LogPrintf("DoAutomaticDenominating: Split up large input (justCollateral %d):\n", justCollateral);
|
||||
LogPrintf(" auto -- nTotalBalance %"PRI64d"\n", nTotalBalance);
|
||||
@ -7221,8 +7228,7 @@ bool CDarkSendPool::SplitUpMoney(bool justCollateral)
|
||||
if(!justCollateral) addingEachRound += (a) + (a/5);
|
||||
|
||||
bool addedFees = false;
|
||||
|
||||
while(nTotalOut + addingEachRound < nTotalBalance-DARKSEND_FEE){
|
||||
while(nTotalOut + addingEachRound < nTotalBalance-DARKSEND_FEE && (!justCollateral || !addedFees)){
|
||||
LogPrintf(" nTotalOut %"PRI64d"\n", nTotalOut);
|
||||
LogPrintf(" nTotalOut + ((nTotalBalance/5) + (nTotalBalance/5/5) + 0.01*COIN) %"PRI64d"\n", nTotalOut + ((a) + (a/5) + ((DARKSEND_FEE*4))));
|
||||
LogPrintf(" nTotalBalance-(DARKSEND_COLLATERAL) %"PRI64d"\n", (nTotalBalance-DARKSEND_COLLATERAL));
|
||||
@ -7231,7 +7237,8 @@ bool CDarkSendPool::SplitUpMoney(bool justCollateral)
|
||||
vecSend.push_back(make_pair(scriptChange, a/5));
|
||||
nTotalOut += (a) + (a/5);
|
||||
}
|
||||
if(!addedFees || justCollateral){
|
||||
if(!addedFees){
|
||||
vecSend.push_back(make_pair(scriptChange, DARKSEND_COLLATERAL*5));
|
||||
vecSend.push_back(make_pair(scriptChange, DARKSEND_COLLATERAL*5));
|
||||
vecSend.push_back(make_pair(scriptChange, DARKSEND_FEE));
|
||||
vecSend.push_back(make_pair(scriptChange, DARKSEND_FEE));
|
||||
@ -7239,9 +7246,8 @@ bool CDarkSendPool::SplitUpMoney(bool justCollateral)
|
||||
vecSend.push_back(make_pair(scriptChange, DARKSEND_FEE));
|
||||
vecSend.push_back(make_pair(scriptChange, DARKSEND_FEE));
|
||||
addedFees = true;
|
||||
nTotalOut += (DARKSEND_COLLATERAL*5)+(DARKSEND_FEE*nDarksendRounds);
|
||||
}
|
||||
|
||||
nTotalOut += (DARKSEND_COLLATERAL*5)+(DARKSEND_FEE*nDarksendRounds);
|
||||
}
|
||||
|
||||
if(!justCollateral){
|
||||
|
@ -2670,6 +2670,8 @@ public:
|
||||
bool sessionFoundMasternode; //If we've found a compatible masternode
|
||||
int sessionTries;
|
||||
|
||||
int lastSplitUpBlock;
|
||||
|
||||
CDarkSendPool()
|
||||
{
|
||||
//LogPrintf("CDarkSendPool::INIT()\n");
|
||||
@ -2685,6 +2687,7 @@ public:
|
||||
|
||||
isCapableMasterNode = MASTERNODE_NOT_PROCESSED;
|
||||
masternodePortOpen = 0;
|
||||
lastSplitUpBlock = 0;
|
||||
unitTest = false;
|
||||
|
||||
SetCollateralAddress(strAddress);
|
||||
|
@ -1078,10 +1078,15 @@ void CWallet::AvailableCoins(vector<COutput>& vCoins, bool fOnlyConfirmed, const
|
||||
}
|
||||
if(!found) continue;
|
||||
|
||||
//printf(" nValue %"PRI64d"\n", pcoin->vout[i].nValue);
|
||||
//printf(" --- %d %d %d %d\n", !(pcoin->IsSpent(i)), IsMine(pcoin->vout[i]), !IsLockedCoin((*it).first, i), pcoin->vout[i].nValue >= nMinimumInputValue);
|
||||
|
||||
if (!(pcoin->IsSpent(i)) && IsMine(pcoin->vout[i]) &&
|
||||
!IsLockedCoin((*it).first, i) && pcoin->vout[i].nValue >= nMinimumInputValue &&
|
||||
(!coinControl || !coinControl->HasSelected() || coinControl->IsSelected((*it).first, i)))
|
||||
(!coinControl || !coinControl->HasSelected() || coinControl->IsSelected((*it).first, i))) {
|
||||
//printf(" -- added\n");
|
||||
vCoins.push_back(COutput(pcoin, i, pcoin->GetDepthInMainChain()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1299,34 +1304,40 @@ bool CWallet::SelectCoinsDark(int64 nValueMin, int64 nValueMax, std::vector<CTxI
|
||||
{
|
||||
CCoinControl *coinControl=NULL;
|
||||
|
||||
bool allowCollateral = true;
|
||||
bool allowFees = true;
|
||||
vector<COutput> vCoins;
|
||||
AvailableCoins(vCoins, false, coinControl, ALL_COINS);
|
||||
//LogPrintf("found coins %d\n", (int)vCoins.size());
|
||||
//printf("found coins %d\n", (int)vCoins.size());
|
||||
set<pair<const CWalletTx*,unsigned int> > setCoinsRet2;
|
||||
|
||||
//order the array so fees are first, then denominated money, then the rest.
|
||||
sort(vCoins.rbegin(), vCoins.rend(), CompareByDenominated());
|
||||
|
||||
//the first thing we get is a fee input, then we'll use as many denominated as possible. then the rest
|
||||
BOOST_FOREACH(const COutput& out, vCoins)
|
||||
{
|
||||
//LogPrintf(" vin nValue %"PRI64d" \n", out.tx->vout[out.i].nValue);
|
||||
if(!allowCollateral && out.tx->vout[out.i].nValue <= DARKSEND_COLLATERAL*5) continue; //these are made for fees
|
||||
//printf(" vin nValue %"PRI64d" \n", out.tx->vout[out.i].nValue);
|
||||
if(!allowFees && out.tx->vout[out.i].nValue == DARKSEND_FEE) continue; //these are made for fees
|
||||
if(out.tx->vout[out.i].nValue == DARKSEND_COLLATERAL || out.tx->vout[out.i].nValue == DARKSEND_COLLATERAL*2 ||
|
||||
out.tx->vout[out.i].nValue == DARKSEND_COLLATERAL*3 || out.tx->vout[out.i].nValue == DARKSEND_COLLATERAL*5 ||
|
||||
out.tx->vout[out.i].nValue == DARKSEND_COLLATERAL*5
|
||||
) continue; //these are made for collateral
|
||||
if(fMasterNode && out.tx->vout[out.i].nValue == 1000*COIN) continue; //masternode input
|
||||
if(nOnlyDenominationAmount != 0 && out.tx->vout[out.i].nValue != nOnlyDenominationAmount &&
|
||||
out.tx->vout[out.i].nValue > DARKSEND_COLLATERAL*5) continue; //only get one type of denom
|
||||
out.tx->vout[out.i].nValue > DARKSEND_FEE) continue; //only get one type of denom
|
||||
|
||||
//LogPrintf(" ---- ret %"PRI64d", nValue %"PRI64d", max %"PRI64d" -- %d\n", nValueRet, out.tx->vout[out.i].nValue, nValueMax, nValueRet + out.tx->vout[out.i].nValue <= nValueMax);
|
||||
//printf(" ---- ret %"PRI64d", nValue %"PRI64d", max %"PRI64d" -- %d\n", nValueRet, out.tx->vout[out.i].nValue, nValueMax, nValueRet + out.tx->vout[out.i].nValue <= nValueMax);
|
||||
if(nValueRet + out.tx->vout[out.i].nValue <= nValueMax){
|
||||
CTxIn vin = CTxIn(out.tx->GetHash(),out.i);
|
||||
|
||||
if(out.tx->vout[out.i].nValue == DARKSEND_FEE) {
|
||||
allowCollateral = false; //these are made for fees
|
||||
allowFees = false; //these are made for fees
|
||||
} else {
|
||||
int rounds = darkSendPool.GetInputDarksendRounds(vin);
|
||||
|
||||
//LogPrintf(" -- rounds %d\n", rounds);
|
||||
//printf(" -- rounds %d\n", rounds);
|
||||
if(rounds >= nDarksendRoundsMax) continue;
|
||||
//LogPrintf(" -- rounds less than max\n");
|
||||
//printf(" -- rounds less than max\n");
|
||||
if(rounds < nDarksendRoundsMin) continue;
|
||||
}
|
||||
|
||||
@ -1335,11 +1346,11 @@ bool CWallet::SelectCoinsDark(int64 nValueMin, int64 nValueMax, std::vector<CTxI
|
||||
setCoinsRet.push_back(vin);
|
||||
setCoinsRet2.insert(make_pair(out.tx, out.i));
|
||||
|
||||
//LogPrintf(" -- nValueRet %"PRI64d"\n", nValueRet/COIN);
|
||||
if(nValueRet >= nValueMax) return true;
|
||||
//printf(" -- nValueRet %"PRI64d"\n", nValueRet/COIN);
|
||||
}
|
||||
}
|
||||
|
||||
// if it's more than min, we're good to return
|
||||
if(nValueRet >= nValueMin) return true;
|
||||
|
||||
return false;
|
||||
@ -1350,6 +1361,8 @@ bool CWallet::SelectCoinsCollateral(std::vector<CTxIn>& setCoinsRet, int64& nVal
|
||||
CCoinControl *coinControl=NULL;
|
||||
|
||||
vector<COutput> vCoins;
|
||||
|
||||
//printf(" selecting coins for collateral\n");
|
||||
AvailableCoins(vCoins, false, coinControl, ALL_COINS);
|
||||
|
||||
//printf("found coins %d\n", (int)vCoins.size());
|
||||
@ -1359,6 +1372,8 @@ bool CWallet::SelectCoinsCollateral(std::vector<CTxIn>& setCoinsRet, int64& nVal
|
||||
BOOST_FOREACH(const COutput& out, vCoins)
|
||||
{
|
||||
//printf(" vin nValue %"PRI64d"\n", out.tx->vout[out.i].nValue);
|
||||
|
||||
// collateral inputs will always be a multiple of DARSEND_COLLATERAL, up to five
|
||||
if(
|
||||
out.tx->vout[out.i].nValue == DARKSEND_COLLATERAL ||
|
||||
out.tx->vout[out.i].nValue == DARKSEND_COLLATERAL * 2 ||
|
||||
|
Loading…
Reference in New Issue
Block a user