From 494ab68ae4631b7e0d5e6302cbb399fb4cec40b9 Mon Sep 17 00:00:00 2001 From: stoffu Date: Wed, 28 Mar 2018 01:26:59 +0900 Subject: [PATCH] change mixin semantics to ring size add support for ring size 1, make 3 default --- components/PrivacyLevel.qml | 6 +++++- components/TickDelegate.qml | 2 +- main.qml | 20 ++++++++++++-------- pages/Transfer.qml | 4 ++-- src/libwalletqt/Wallet.cpp | 30 ++++++++++++++++++------------ src/libwalletqt/Wallet.h | 13 ++++++++----- 6 files changed, 46 insertions(+), 29 deletions(-) diff --git a/components/PrivacyLevel.qml b/components/PrivacyLevel.qml index 9cfe09d1f7..89ac61d35a 100644 --- a/components/PrivacyLevel.qml +++ b/components/PrivacyLevel.qml @@ -121,7 +121,7 @@ Item { id: delegateItem2 currentX: x + row2.x currentIndex: index - mainTick: currentIndex === 0 + mainTick: currentIndex === 1 Component.onCompleted: { row.positions[currentIndex] = delegateItem2 } @@ -147,5 +147,9 @@ Item { } } } + Component.onCompleted: { + fillRect.width = Qt.binding(function(){ return row.positions[1].currentX + row.x }) + item.fillLevel = 1 + } } } diff --git a/components/TickDelegate.qml b/components/TickDelegate.qml index b09b0ceb0a..3e3d0c7077 100644 --- a/components/TickDelegate.qml +++ b/components/TickDelegate.qml @@ -54,7 +54,7 @@ Item { font.pixelSize: 12 * scaleRatio color: MoneroComponents.Style.defaultFontColor text: { - if(currentIndex === 0) return qsTr("Default") + translationManager.emptyString + if(currentIndex === 1) return qsTr("Default") + translationManager.emptyString if(currentIndex === 13) return qsTr("High") + translationManager.emptyString return "" } diff --git a/main.qml b/main.qml index c7251a9d62..977942aa62 100644 --- a/main.qml +++ b/main.qml @@ -586,7 +586,7 @@ ApplicationWindow { return false; } - function onTransactionCreated(pendingTransaction,address,paymentId,mixinCount){ + function onTransactionCreated(pendingTransaction,address,paymentId,ringSize){ console.log("Transaction created"); hideProcessingSplash(); transaction = pendingTransaction; @@ -623,9 +623,9 @@ ApplicationWindow { transactionConfirmationPopup.text += (paymentId === "" ? "" : (qsTr("\nPayment ID: ") + paymentId)); transactionConfirmationPopup.text += qsTr("\n\nAmount: ") + walletManager.displayAmount(transaction.amount); transactionConfirmationPopup.text += qsTr("\nFee: ") + walletManager.displayAmount(transaction.fee); - transactionConfirmationPopup.text += qsTr("\nRingsize: ") + (mixinCount + 1); - if(mixinCount !== 6){ - transactionConfirmationPopup.text += qsTr("\n\nWARNING: non default ring size, which may harm your privacy. Default of 7 is recommended."); + transactionConfirmationPopup.text += qsTr("\nRingsize: ") + ringSize; + if(ringSize !== 3){ + transactionConfirmationPopup.text += qsTr("\n\nWARNING: non default ring size, which may harm your privacy. Default of 3 is recommended."); } transactionConfirmationPopup.text += qsTr("\n\nNumber of transactions: ") + transaction.txCount transactionConfirmationPopup.text += (transactionDescription === "" ? "" : (qsTr("\nDescription: ") + transactionDescription)) @@ -641,16 +641,20 @@ ApplicationWindow { // called on "transfer" - function handlePayment(address, paymentId, amount, mixinCount, priority, description, createFile) { + function handlePayment(address, paymentId, amount, ringSize, priority, description, createFile) { console.log("Creating transaction: ") console.log("\taddress: ", address, ", payment_id: ", paymentId, ", amount: ", amount, - ", mixins: ", mixinCount, + ", ring_size: ", ringSize, ", priority: ", priority, ", description: ", description); showProcessingSplash("Creating transaction"); + if (ringSize == 0) + ringSize = currentWallet.defaultRingSize; + if (ringSize == 0) + ringSize = 3; transactionDescription = description; @@ -686,9 +690,9 @@ ApplicationWindow { } if (amount === "(all)") - currentWallet.createTransactionAllAsync(address, paymentId, mixinCount, priority); + currentWallet.createTransactionAllAsync(address, paymentId, ringSize, priority); else - currentWallet.createTransactionAsync(address, paymentId, amountxmr, mixinCount, priority); + currentWallet.createTransactionAsync(address, paymentId, amountxmr, ringSize, priority); } //Choose where to save transaction diff --git a/pages/Transfer.qml b/pages/Transfer.qml index d5a654d350..ac5dbd0182 100644 --- a/pages/Transfer.qml +++ b/pages/Transfer.qml @@ -49,7 +49,7 @@ Rectangle { Clipboard { id: clipboard } function scaleValueToMixinCount(scaleValue) { - var scaleToMixinCount = [6,7,8,9,10,11,12,13,14,16,18,20,22,25]; + var scaleToMixinCount = [0,2,3,4,5,6,7,8,9,11,13,15,17,19]; if (scaleValue < scaleToMixinCount.length) { return scaleToMixinCount[scaleValue]; } else { @@ -379,7 +379,7 @@ Rectangle { console.log("amount: " + amountLine.text) addressLine.text = addressLine.text.trim() paymentIdLine.text = paymentIdLine.text.trim() - root.paymentClicked(addressLine.text, paymentIdLine.text, amountLine.text, scaleValueToMixinCount(privacyLevelItem.fillLevel), + root.paymentClicked(addressLine.text, paymentIdLine.text, amountLine.text, persistentSettings.transferShowAdvanced ? (scaleValueToMixinCount(privacyLevelItem.fillLevel) + 1) : 0, priority, descriptionLine.text) } diff --git a/src/libwalletqt/Wallet.cpp b/src/libwalletqt/Wallet.cpp index dea09af571..0a08d928d1 100644 --- a/src/libwalletqt/Wallet.cpp +++ b/src/libwalletqt/Wallet.cpp @@ -373,58 +373,58 @@ void Wallet::pauseRefresh() const } PendingTransaction *Wallet::createTransaction(const QString &dst_addr, const QString &payment_id, - quint64 amount, quint32 mixin_count, + quint64 amount, quint32 ring_size, PendingTransaction::Priority priority) { std::set subaddr_indices; Monero::PendingTransaction * ptImpl = m_walletImpl->createTransaction( - dst_addr.toStdString(), payment_id.toStdString(), amount, mixin_count, + dst_addr.toStdString(), payment_id.toStdString(), amount, ring_size, static_cast(priority), currentSubaddressAccount(), subaddr_indices); PendingTransaction * result = new PendingTransaction(ptImpl,0); return result; } void Wallet::createTransactionAsync(const QString &dst_addr, const QString &payment_id, - quint64 amount, quint32 mixin_count, + quint64 amount, quint32 ring_size, PendingTransaction::Priority priority) { QFuture future = QtConcurrent::run(this, &Wallet::createTransaction, - dst_addr, payment_id,amount, mixin_count, priority); + dst_addr, payment_id,amount, ring_size, priority); QFutureWatcher * watcher = new QFutureWatcher(); connect(watcher, &QFutureWatcher::finished, - this, [this, watcher,dst_addr,payment_id,mixin_count]() { + this, [this, watcher,dst_addr,payment_id,ring_size]() { QFuture future = watcher->future(); watcher->deleteLater(); - emit transactionCreated(future.result(),dst_addr,payment_id,mixin_count); + emit transactionCreated(future.result(),dst_addr,payment_id,ring_size); }); watcher->setFuture(future); } PendingTransaction *Wallet::createTransactionAll(const QString &dst_addr, const QString &payment_id, - quint32 mixin_count, PendingTransaction::Priority priority) + quint32 ring_size, PendingTransaction::Priority priority) { std::set subaddr_indices; Monero::PendingTransaction * ptImpl = m_walletImpl->createTransaction( - dst_addr.toStdString(), payment_id.toStdString(), Monero::optional(), mixin_count, + dst_addr.toStdString(), payment_id.toStdString(), Monero::optional(), ring_size, static_cast(priority), currentSubaddressAccount(), subaddr_indices); PendingTransaction * result = new PendingTransaction(ptImpl, this); return result; } void Wallet::createTransactionAllAsync(const QString &dst_addr, const QString &payment_id, - quint32 mixin_count, + quint32 ring_size, PendingTransaction::Priority priority) { QFuture future = QtConcurrent::run(this, &Wallet::createTransactionAll, - dst_addr, payment_id, mixin_count, priority); + dst_addr, payment_id, ring_size, priority); QFutureWatcher * watcher = new QFutureWatcher(); connect(watcher, &QFutureWatcher::finished, - this, [this, watcher,dst_addr,payment_id,mixin_count]() { + this, [this, watcher,dst_addr,payment_id,ring_size]() { QFuture future = watcher->future(); watcher->deleteLater(); - emit transactionCreated(future.result(),dst_addr,payment_id,mixin_count); + emit transactionCreated(future.result(),dst_addr,payment_id,ring_size); }); watcher->setFuture(future); } @@ -722,6 +722,12 @@ QString Wallet::getDaemonLogPath() const return QString::fromStdString(m_walletImpl->getDefaultDataDir()) + "/aeon.log"; } +quint32 Wallet::getDefaultRingSize() const +{ + const quint32 r = m_walletImpl->defaultRingSize(); + return r == 0 ? 3 : r; +} + bool Wallet::blackballOutput(const QString &pubkey) { QList list; diff --git a/src/libwalletqt/Wallet.h b/src/libwalletqt/Wallet.h index f37d556dfd..7f33aae259 100644 --- a/src/libwalletqt/Wallet.h +++ b/src/libwalletqt/Wallet.h @@ -51,6 +51,7 @@ class Wallet : public QObject Q_PROPERTY(QString publicSpendKey READ getPublicSpendKey) Q_PROPERTY(QString daemonLogPath READ getDaemonLogPath CONSTANT) Q_PROPERTY(quint64 walletCreationHeight READ getWalletCreationHeight WRITE setWalletCreationHeight NOTIFY walletCreationHeightChanged) + Q_PROPERTY(quint32 defaultRingSize READ getDefaultRingSize) public: @@ -177,21 +178,21 @@ class Wallet : public QObject //! creates transaction Q_INVOKABLE PendingTransaction * createTransaction(const QString &dst_addr, const QString &payment_id, - quint64 amount, quint32 mixin_count, + quint64 amount, quint32 ring_size, PendingTransaction::Priority priority); //! creates async transaction Q_INVOKABLE void createTransactionAsync(const QString &dst_addr, const QString &payment_id, - quint64 amount, quint32 mixin_count, + quint64 amount, quint32 ring_size, PendingTransaction::Priority priority); //! creates transaction with all outputs Q_INVOKABLE PendingTransaction * createTransactionAll(const QString &dst_addr, const QString &payment_id, - quint32 mixin_count, PendingTransaction::Priority priority); + quint32 ring_size, PendingTransaction::Priority priority); //! creates async transaction with all outputs Q_INVOKABLE void createTransactionAllAsync(const QString &dst_addr, const QString &payment_id, - quint32 mixin_count, PendingTransaction::Priority priority); + quint32 ring_size, PendingTransaction::Priority priority); //! creates sweep unmixable transaction Q_INVOKABLE PendingTransaction * createSweepUnmixableTransaction(); @@ -276,6 +277,8 @@ class Wallet : public QObject QString getDaemonLogPath() const; QString getWalletLogPath() const; + quint32 getDefaultRingSize() const; + // Blackalled outputs Q_INVOKABLE bool blackballOutput(const QString &pubkey); Q_INVOKABLE bool blackballOutputs(const QList &pubkeys, bool add); @@ -310,7 +313,7 @@ class Wallet : public QObject void walletCreationHeightChanged(); // emitted when transaction is created async - void transactionCreated(PendingTransaction * transaction, QString address, QString paymentId, quint32 mixinCount); + void transactionCreated(PendingTransaction * transaction, QString address, QString paymentId, quint32 ringSize); void connectionStatusChanged(ConnectionStatus status) const;