Skip to content

Commit 747f1fb

Browse files
committed
Refactored the DeniabilityDialog to use the new wallet::calculateDeniabilizaitonCycles API.
1 parent 7a8b230 commit 747f1fb

File tree

2 files changed

+2
-80
lines changed

2 files changed

+2
-80
lines changed

src/qt/deniabilitydialog.cpp

+2-79
Original file line numberDiff line numberDiff line change
@@ -1024,84 +1024,6 @@ void DeniabilityDialog::setModel(WalletModel* model)
10241024
}
10251025
}
10261026

1027-
DeniabilityDialog::DeniabilizationStats DeniabilityDialog::calculateDeniabilizationStats(const COutPoint& outpoint) const
1028-
{
1029-
Assert(m_model);
1030-
1031-
Wallet& wallet = m_model->wallet();
1032-
1033-
auto tx = wallet.getTx(outpoint.hash);
1034-
if (!tx) {
1035-
return DeniabilizationStats(0, false);
1036-
}
1037-
1038-
if (tx->IsCoinBase()) {
1039-
// this is a block reward tx, so we tag it as such
1040-
return DeniabilizationStats(0, true);
1041-
}
1042-
1043-
// an deniabilized coin is one we sent to ourselves
1044-
// all txIn should belong to our wallet
1045-
if (tx->vin.empty()) {
1046-
return DeniabilizationStats(0, false);
1047-
}
1048-
for (const auto& txIn : tx->vin) {
1049-
if (!wallet.txinIsMine(txIn)) {
1050-
return DeniabilizationStats(0, false);
1051-
}
1052-
}
1053-
1054-
// all txOut should belong to our wallet
1055-
Assert(outpoint.n < tx->vout.size());
1056-
uint n = 0;
1057-
for (const auto& txOut : tx->vout) {
1058-
if (!wallet.txoutIsMine(txOut)) {
1059-
Assert(n != outpoint.n);
1060-
return DeniabilizationStats(0, false);
1061-
}
1062-
n++;
1063-
}
1064-
1065-
uint uniqueTxOutCount = 0;
1066-
for (const auto& txOut : tx->vout) {
1067-
// check if it's a valid destination
1068-
CTxDestination txOutDestination;
1069-
if (!ExtractDestination(txOut.scriptPubKey, txOutDestination)) {
1070-
continue;
1071-
}
1072-
1073-
// don't count outputs that match any input addresses (eg it's change output)
1074-
bool matchesInput = false;
1075-
for (const auto& txIn : tx->vin) {
1076-
auto prevTx = wallet.getTx(txIn.prevout.hash);
1077-
if (prevTx && prevTx->vout[txIn.prevout.n].scriptPubKey == txOut.scriptPubKey) {
1078-
matchesInput = true;
1079-
break;
1080-
}
1081-
}
1082-
if (matchesInput) {
1083-
continue;
1084-
}
1085-
1086-
uniqueTxOutCount++;
1087-
}
1088-
1089-
// we consider two or more unique outputs an "deniabilization" of the coin
1090-
uint deniabilizationCycles = uniqueTxOutCount >= 2 ? 1 : 0;
1091-
1092-
// all txIn and txOut are from our wallet
1093-
// however if we have multiple txIn this was either an initial deniabilization of multiple UTXOs or the user manually merged deniabilized UTXOs
1094-
// in either case we don't need to recurse into parent transactions and we can return the calculated cycles
1095-
if (tx->vin.size() > 1) {
1096-
return DeniabilizationStats(deniabilizationCycles, false);
1097-
}
1098-
1099-
const auto& txIn = tx->vin[0];
1100-
// now recursively calculate the deniabilization cycles of the input
1101-
DeniabilizationStats inputStats = calculateDeniabilizationStats(txIn.prevout);
1102-
return DeniabilizationStats(inputStats.cycles + deniabilizationCycles, inputStats.blockReward);
1103-
};
1104-
11051027
void DeniabilityDialog::updateCoins()
11061028
{
11071029
if (!m_model) {
@@ -1179,7 +1101,8 @@ void DeniabilityDialog::updateCoins()
11791101
// skip spent outputs
11801102
if (output.walletTxOut.is_spent)
11811103
continue;
1182-
output.deniabilizationStats = calculateDeniabilizationStats(output.outpoint);
1104+
auto result = wallet.calculateDeniabilizationCycles(output.outpoint);
1105+
output.deniabilizationStats = DeniabilizationStats(result.first, result.second);
11831106
coin.utxos.push_back(std::move(output));
11841107
}
11851108
// skip any addresses with no unspent outputs

src/qt/deniabilitydialog.h

-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,6 @@ public Q_SLOTS:
164164
void updateStart();
165165
void updateStatus();
166166
void updateCoinTable();
167-
DeniabilizationStats calculateDeniabilizationStats(const COutPoint& outpoint) const;
168167

169168
bool signExternalSigner(interfaces::Wallet& wallet, CTransactionRef& tx, const QString& message);
170169
void finalizeTxBroadcast(uint256 hash, CAmount txFee);

0 commit comments

Comments
 (0)