fixing pre-mix process of creation denominated amounts
This commit is contained in:
parent
385c532df8
commit
9a4fac6bb6
@ -1461,21 +1461,23 @@ bool CDarkSendPool::DoAutomaticDenominating(bool fDryRun, bool ready)
|
|||||||
// if balanceNeedsAnonymized is more than pool max, take the pool max
|
// if balanceNeedsAnonymized is more than pool max, take the pool max
|
||||||
if(nBalanceNeedsAnonymized > DARKSEND_POOL_MAX) nBalanceNeedsAnonymized = DARKSEND_POOL_MAX;
|
if(nBalanceNeedsAnonymized > DARKSEND_POOL_MAX) nBalanceNeedsAnonymized = DARKSEND_POOL_MAX;
|
||||||
|
|
||||||
// if balanceNeedsAnonymized is more than (non-anonymized - COIN), take (non-anonymized - COIN)
|
// if balanceNeedsAnonymized is more than non-anonymized, take non-anonymized
|
||||||
int64_t nBalanceNotYetAnonymized = pwalletMain->GetBalance() - pwalletMain->GetAnonymizedBalance() - COIN;
|
int64_t nBalanceNotYetAnonymized = pwalletMain->GetBalance() - pwalletMain->GetAnonymizedBalance();
|
||||||
if(nBalanceNeedsAnonymized > nBalanceNotYetAnonymized) nBalanceNeedsAnonymized = nBalanceNotYetAnonymized;
|
if(nBalanceNeedsAnonymized > nBalanceNotYetAnonymized) nBalanceNeedsAnonymized = nBalanceNotYetAnonymized;
|
||||||
|
|
||||||
if(nBalanceNeedsAnonymized < nLowestDenom)
|
if(nBalanceNeedsAnonymized < nLowestDenom)
|
||||||
{
|
{
|
||||||
if(nBalanceNeedsAnonymized > 0)
|
// if(nBalanceNeedsAnonymized > nValueMin)
|
||||||
nBalanceNeedsAnonymized = nLowestDenom;
|
// nBalanceNeedsAnonymized = nLowestDenom;
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
LogPrintf("DoAutomaticDenominating : No funds detected in need of denominating \n");
|
LogPrintf("DoAutomaticDenominating : No funds detected in need of denominating \n");
|
||||||
strAutoDenomResult = "No funds detected in need of denominating";
|
strAutoDenomResult = "No funds detected in need of denominating";
|
||||||
return false;
|
return false;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
if (fDebug) LogPrintf("DoAutomaticDenominating : nLowestDenom=%d, nBalanceNeedsAnonymized=%d\n", nLowestDenom, nBalanceNeedsAnonymized);
|
||||||
|
|
||||||
// select coins that should be given to the pool
|
// select coins that should be given to the pool
|
||||||
if (!pwalletMain->SelectCoinsDark(nValueMin, nBalanceNeedsAnonymized, vCoins, nValueIn, 0, nDarksendRounds))
|
if (!pwalletMain->SelectCoinsDark(nValueMin, nBalanceNeedsAnonymized, vCoins, nValueIn, 0, nDarksendRounds))
|
||||||
@ -1488,8 +1490,8 @@ bool CDarkSendPool::DoAutomaticDenominating(bool fDryRun, bool ready)
|
|||||||
if(!fDryRun) return CreateDenominated(nBalanceNeedsAnonymized);
|
if(!fDryRun) return CreateDenominated(nBalanceNeedsAnonymized);
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
LogPrintf("DoAutomaticDenominating : No funds detected in need of denominating (2)\n");
|
LogPrintf("DoAutomaticDenominating : Can't denominate - no compatible inputs left\n");
|
||||||
strAutoDenomResult = "No funds detected in need of denominating (2)";
|
strAutoDenomResult = "Can't denominate - no compatible inputs left";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1855,7 +1857,7 @@ bool CDarkSendPool::CreateDenominated(int64_t nTotalValue)
|
|||||||
|
|
||||||
CCoinControl *coinControl=NULL;
|
CCoinControl *coinControl=NULL;
|
||||||
bool success = pwalletMain->CreateTransaction(vecSend, wtx, reservekey,
|
bool success = pwalletMain->CreateTransaction(vecSend, wtx, reservekey,
|
||||||
nFeeRet, strFail, coinControl, ONLY_NONDENOMINATED);
|
nFeeRet, strFail, coinControl, ONLY_NONDENOMINATED_MN);
|
||||||
if(!success){
|
if(!success){
|
||||||
LogPrintf("CreateDenominated: Error - %s\n", strFail.c_str());
|
LogPrintf("CreateDenominated: Error - %s\n", strFail.c_str());
|
||||||
return false;
|
return false;
|
||||||
|
@ -1237,12 +1237,12 @@ void CWallet::AvailableCoins(vector<COutput>& vCoins, bool fOnlyConfirmed, const
|
|||||||
CTxIn vin = CTxIn(out.tx->GetHash(), out.i);
|
CTxIn vin = CTxIn(out.tx->GetHash(), out.i);
|
||||||
int rounds = GetInputDarksendRounds(vin);
|
int rounds = GetInputDarksendRounds(vin);
|
||||||
if(rounds >= 0) found = true;
|
if(rounds >= 0) found = true;
|
||||||
} else if(coin_type == ONLY_NONDENOMINATED) {
|
} else if(coin_type == ONLY_NONDENOMINATED || coin_type == ONLY_NONDENOMINATED_MN) {
|
||||||
found = true;
|
found = true;
|
||||||
BOOST_FOREACH(int64_t d, darkSendDenominations)
|
BOOST_FOREACH(int64_t d, darkSendDenominations)
|
||||||
if(pcoin->vout[i].nValue == d)
|
if(pcoin->vout[i].nValue == d)
|
||||||
found = false;
|
found = false;
|
||||||
|
if(coin_type == ONLY_NONDENOMINATED_MN) found = found && (pcoin->vout[i].nValue != 1000*COIN);
|
||||||
} else {
|
} else {
|
||||||
found = true;
|
found = true;
|
||||||
}
|
}
|
||||||
@ -1459,9 +1459,6 @@ bool CWallet::SelectCoins(int64_t nTargetValue, set<pair<const CWalletTx*,unsign
|
|||||||
|
|
||||||
//if we're doing only denominated, we need to round up to the nearest .1DRK
|
//if we're doing only denominated, we need to round up to the nearest .1DRK
|
||||||
if(coin_type == ONLY_DENOMINATED){
|
if(coin_type == ONLY_DENOMINATED){
|
||||||
// denominate our funds
|
|
||||||
std::vector<CTxOut> vOut;
|
|
||||||
|
|
||||||
// Make outputs by looping through denominations, from large to small
|
// Make outputs by looping through denominations, from large to small
|
||||||
BOOST_FOREACH(int64_t v, darkSendDenominations)
|
BOOST_FOREACH(int64_t v, darkSendDenominations)
|
||||||
{
|
{
|
||||||
@ -1699,7 +1696,7 @@ bool CWallet::HasDarksendFeeInputs() const
|
|||||||
vector<COutput> vCoins;
|
vector<COutput> vCoins;
|
||||||
AvailableCoins(vCoins, false, coinControl, ALL_COINS);
|
AvailableCoins(vCoins, false, coinControl, ALL_COINS);
|
||||||
|
|
||||||
bool found_collateral = false;
|
int nFound = 0;
|
||||||
BOOST_FOREACH(const COutput& out, vCoins)
|
BOOST_FOREACH(const COutput& out, vCoins)
|
||||||
{
|
{
|
||||||
if(
|
if(
|
||||||
@ -1708,11 +1705,11 @@ bool CWallet::HasDarksendFeeInputs() const
|
|||||||
out.tx->vout[out.i].nValue == (DARKSEND_COLLATERAL * 3)+DARKSEND_FEE ||
|
out.tx->vout[out.i].nValue == (DARKSEND_COLLATERAL * 3)+DARKSEND_FEE ||
|
||||||
out.tx->vout[out.i].nValue == (DARKSEND_COLLATERAL * 2)+DARKSEND_FEE ||
|
out.tx->vout[out.i].nValue == (DARKSEND_COLLATERAL * 2)+DARKSEND_FEE ||
|
||||||
out.tx->vout[out.i].nValue == (DARKSEND_COLLATERAL * 1)+DARKSEND_FEE
|
out.tx->vout[out.i].nValue == (DARKSEND_COLLATERAL * 1)+DARKSEND_FEE
|
||||||
) found_collateral = true;
|
) nFound++;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return found_collateral;
|
return nFound > 1; // should have more than one just in case
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CWallet::SelectCoinsWithoutDenomination(int64_t nTargetValue, set<pair<const CWalletTx*,unsigned int> >& setCoinsRet, int64_t& nValueRet) const
|
bool CWallet::SelectCoinsWithoutDenomination(int64_t nTargetValue, set<pair<const CWalletTx*,unsigned int> >& setCoinsRet, int64_t& nValueRet) const
|
||||||
@ -1852,6 +1849,8 @@ bool CWallet::CreateTransaction(const vector<pair<CScript, int64_t> >& vecSend,
|
|||||||
strFailReason = _("Insufficient funds");
|
strFailReason = _("Insufficient funds");
|
||||||
else if (coin_type == ONLY_NONDENOMINATED)
|
else if (coin_type == ONLY_NONDENOMINATED)
|
||||||
strFailReason = _("Unable to locate enough Darksend non-denominated funds for this transaction");
|
strFailReason = _("Unable to locate enough Darksend non-denominated funds for this transaction");
|
||||||
|
else if (coin_type == ONLY_NONDENOMINATED_MN)
|
||||||
|
strFailReason = _("Unable to locate enough Darksend non-denominated funds for this transaction that are not equal 1000 DRK");
|
||||||
else
|
else
|
||||||
strFailReason = _("Unable to locate enough Darksend denominated funds for this transaction");
|
strFailReason = _("Unable to locate enough Darksend denominated funds for this transaction");
|
||||||
|
|
||||||
@ -2017,7 +2016,7 @@ bool CWallet::CommitTransaction(CWalletTx& wtxNew, CReserveKey& reservekey, std:
|
|||||||
if (!wtxNew.AcceptToMemoryPool(false))
|
if (!wtxNew.AcceptToMemoryPool(false))
|
||||||
{
|
{
|
||||||
// This must not fail. The transaction has already been signed and recorded.
|
// This must not fail. The transaction has already been signed and recorded.
|
||||||
LogPrintf("CommitTransaction() : Error: Transaction not valid");
|
LogPrintf("CommitTransaction() : Error: Transaction not valid\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
wtxNew.RelayWalletTransaction(strCommand);
|
wtxNew.RelayWalletTransaction(strCommand);
|
||||||
|
@ -55,7 +55,8 @@ enum AvailableCoinsType
|
|||||||
{
|
{
|
||||||
ALL_COINS = 1,
|
ALL_COINS = 1,
|
||||||
ONLY_DENOMINATED = 2,
|
ONLY_DENOMINATED = 2,
|
||||||
ONLY_NONDENOMINATED = 3
|
ONLY_NONDENOMINATED = 3,
|
||||||
|
ONLY_NONDENOMINATED_MN = 4 // ONLY_NONDENOMINATED and not 1000 DRK at the same time
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user