diff --git a/pages/SharedRingDB.qml b/pages/SharedRingDB.qml index 4235bad2..a88bbe14 100644 --- a/pages/SharedRingDB.qml +++ b/pages/SharedRingDB.qml @@ -50,15 +50,6 @@ Rectangle { return true } - function validUnsigned(s) { - if (s.length == 0) - return false - for (var i = 0; i < s.length; ++i) - if ("0123456789".indexOf(s[i]) == -1) - return false - return true - } - function validRing(str, relative) { var outs = str.split(" "); if (outs.length == 0) @@ -109,136 +100,6 @@ Rectangle { color: MoneroComponents.Style.defaultFontColor } - MoneroComponents.LabelSubheader { - Layout.fillWidth: true - textFormat: Text.RichText - text: qsTr("Outputs marked as spent") + translationManager.emptyString - tooltip: qsTr( - "In order to obscure which inputs in a Monero transaction are being spent, a third party should not be able " + - "to tell which inputs in a ring are already known to be spent. Being able to do so would weaken the protection " + - "afforded by ring signatures. If all but one of the inputs are known to be already spent, then the input being " + - "actually spent becomes apparent, thereby nullifying the effect of ring signatures, one of the three main layers " + - "of privacy protection Monero uses.
" + - "To help transactions avoid those inputs, a list of known spent ones can be used to avoid using them in new " + - "transactions. Such a list is maintained by the Monero project and is available on the getmonero.org website, " + - "and you can import this list here.
" + - "Alternatively, you can scan the blockchain (and the blockchain of key-reusing Monero clones) yourself " + - "using the monero-blockchain-mark-spent-outputs tool to create a list of known spent outputs.
" - ) + translationManager.emptyString - } - - MoneroComponents.TextPlain { - textFormat: Text.RichText - font.family: MoneroComponents.Style.fontRegular.name - font.pixelSize: 14 - text: qsTr("This sets which outputs are known to be spent, and thus not to be used as privacy placeholders in ring signatures. ") + - qsTr("You should only have to load a file when you want to refresh the list. Manual adding/removing is possible if needed.") + translationManager.emptyString - wrapMode: Text.Wrap - Layout.fillWidth: true; - color: MoneroComponents.Style.defaultFontColor - } - - ColumnLayout { - Layout.fillWidth: true - Layout.topMargin: 12 - - FileDialog { - id: loadBlackballFileDialog - title: qsTr("Please choose a file from which to load outputs to mark as spent") + translationManager.emptyString; - folder: "file://" - nameFilters: ["*"] - - onAccepted: { - loadBlackballFileLine.text = walletManager.urlToLocalPath(loadBlackballFileDialog.fileUrl) - } - } - - MoneroComponents.LineEdit { - id: loadBlackballFileLine - Layout.fillWidth: true - fontSize: 16 - placeholderFontSize: 16 - placeholderText: qsTr("Path to file") + "..." + translationManager.emptyString - labelFontSize: 14 - labelText: qsTr("Filename with outputs to mark as spent") + ":" + translationManager.emptyString - copyButton: true - readOnly: false - } - - RowLayout { - Layout.fillWidth: true - Layout.topMargin: 18 - - MoneroComponents.StandardButton { - id: selectBlackballFileButton - text: qsTr("Browse") + translationManager.emptyString - enabled: true - small: true - onClicked: { - loadBlackballFileDialog.open() - } - } - - MoneroComponents.StandardButton { - id: loadBlackballFileButton - text: qsTr("Load") + translationManager.emptyString - small: true - enabled: !!appWindow.currentWallet && loadBlackballFileLine.text !== "" - onClicked: appWindow.currentWallet.blackballOutputs(walletManager.urlToLocalPath(loadBlackballFileDialog.fileUrl), true) - } - } - } - - GridLayout { - Layout.fillWidth: true - columnSpacing: 20 - - MoneroComponents.LineEdit { - id: blackballOutputAmountLine - Layout.fillWidth: true - fontSize: 16 - labelFontSize: 14 - labelText: qsTr("Or manually mark a single output as spent/unspent:") + translationManager.emptyString - placeholderFontSize: 16 - placeholderText: qsTr("Paste output amount") + "..." + translationManager.emptyString - readOnly: false - validator: IntValidator { bottom: 0 } - } - - MoneroComponents.LineEdit { - id: blackballOutputOffsetLine - Layout.fillWidth: true - fontSize: 16 - labelFontSize: 14 - labelText: " " - placeholderFontSize: 16 - placeholderText: qsTr("Paste output offset") + "..." + translationManager.emptyString - readOnly: false - validator: IntValidator { bottom: 0 } - } - } - - RowLayout { - Layout.fillWidth: true - Layout.topMargin: 18 - - MoneroComponents.StandardButton { - id: blackballButton - text: qsTr("Mark as spent") + translationManager.emptyString - small: true - enabled: !!appWindow.currentWallet && validUnsigned(blackballOutputAmountLine.text) && validUnsigned(blackballOutputOffsetLine.text) - onClicked: appWindow.currentWallet.blackballOutput(blackballOutputAmountLine.text, blackballOutputOffsetLine.text) - } - - MoneroComponents.StandardButton { - id: unblackballButton - text: qsTr("Mark as unspent") + translationManager.emptyString - small: true - enabled: !!appWindow.currentWallet && validUnsigned(blackballOutputAmountLine.text) && validUnsigned(blackballOutputOffsetLine.text) - onClicked: appWindow.currentWallet.unblackballOutput(blackballOutputAmountLine.text, blackballOutputOffsetLine.text) - } - } - MoneroComponents.LabelSubheader { Layout.fillWidth: true Layout.topMargin: 24 diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp index 26b5e3ec..df21bb9b 100644 --- a/src/libwalletqt/Wallet.cpp +++ b/src/libwalletqt/Wallet.cpp @@ -1013,46 +1013,6 @@ QString Wallet::getDaemonLogPath() const return QString::fromStdString(m_walletImpl->getDefaultDataDir()) + "/bitmonero.log"; } -bool Wallet::blackballOutput(const QString &amount, const QString &offset) -{ - return m_walletImpl->blackballOutput(amount.toStdString(), offset.toStdString()); -} - -bool Wallet::blackballOutputs(const QList &pubkeys, bool add) -{ - std::vector std_pubkeys; - foreach (const QString &pubkey, pubkeys) { - std_pubkeys.push_back(pubkey.toStdString()); - } - return m_walletImpl->blackballOutputs(std_pubkeys, add); -} - -bool Wallet::blackballOutputs(const QString &filename, bool add) -{ - QFile file(filename); - - try { - if (!file.open(QIODevice::ReadOnly)) - return false; - QList outputs; - QTextStream in(&file); - while (!in.atEnd()) { - outputs.push_back(in.readLine()); - } - file.close(); - return blackballOutputs(outputs, add); - } - catch (const std::exception &e) { - file.close(); - return false; - } -} - -bool Wallet::unblackballOutput(const QString &amount, const QString &offset) -{ - return m_walletImpl->unblackballOutput(amount.toStdString(), offset.toStdString()); -} - QString Wallet::getRing(const QString &key_image) { std::vector cring; diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h index 014d250f..11293b85 100644 --- a/src/libwalletqt/Wallet.h +++ b/src/libwalletqt/Wallet.h @@ -341,12 +341,6 @@ public: QString getDaemonLogPath() const; QString getWalletLogPath() const; - // Blackalled outputs - Q_INVOKABLE bool blackballOutput(const QString &amount, const QString &offset); - Q_INVOKABLE bool blackballOutputs(const QList &outputs, bool add); - Q_INVOKABLE bool blackballOutputs(const QString &filename, bool add); - Q_INVOKABLE bool unblackballOutput(const QString &amount, const QString &offset); - // Rings Q_INVOKABLE QString getRing(const QString &key_image); Q_INVOKABLE QString getRings(const QString &txid);