Skip to content

Commit

Permalink
change mixin semantics to ring size
Browse files Browse the repository at this point in the history
add support for ring size 1, make 3 default
  • Loading branch information
stoffu committed May 21, 2018
1 parent 74e527b commit 494ab68
Show file tree
Hide file tree
Showing 6 changed files with 46 additions and 29 deletions.
6 changes: 5 additions & 1 deletion components/PrivacyLevel.qml
Expand Up @@ -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
}
Expand All @@ -147,5 +147,9 @@ Item {
}
}
}
Component.onCompleted: {
fillRect.width = Qt.binding(function(){ return row.positions[1].currentX + row.x })
item.fillLevel = 1
}
}
}
2 changes: 1 addition & 1 deletion components/TickDelegate.qml
Expand Up @@ -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 ""
}
Expand Down
20 changes: 12 additions & 8 deletions main.qml
Expand Up @@ -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;
Expand Down Expand Up @@ -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))
Expand All @@ -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;

Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions pages/Transfer.qml
Expand Up @@ -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 {
Expand Down Expand Up @@ -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)

}
Expand Down
30 changes: 18 additions & 12 deletions src/libwalletqt/Wallet.cpp
Expand Up @@ -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<uint32_t> 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<Monero::PendingTransaction::Priority>(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<PendingTransaction*> future = QtConcurrent::run(this, &Wallet::createTransaction,
dst_addr, payment_id,amount, mixin_count, priority);
dst_addr, payment_id,amount, ring_size, priority);
QFutureWatcher<PendingTransaction*> * watcher = new QFutureWatcher<PendingTransaction*>();

connect(watcher, &QFutureWatcher<PendingTransaction*>::finished,
this, [this, watcher,dst_addr,payment_id,mixin_count]() {
this, [this, watcher,dst_addr,payment_id,ring_size]() {
QFuture<PendingTransaction*> 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<uint32_t> subaddr_indices;
Monero::PendingTransaction * ptImpl = m_walletImpl->createTransaction(
dst_addr.toStdString(), payment_id.toStdString(), Monero::optional<uint64_t>(), mixin_count,
dst_addr.toStdString(), payment_id.toStdString(), Monero::optional<uint64_t>(), ring_size,
static_cast<Monero::PendingTransaction::Priority>(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<PendingTransaction*> future = QtConcurrent::run(this, &Wallet::createTransactionAll,
dst_addr, payment_id, mixin_count, priority);
dst_addr, payment_id, ring_size, priority);
QFutureWatcher<PendingTransaction*> * watcher = new QFutureWatcher<PendingTransaction*>();

connect(watcher, &QFutureWatcher<PendingTransaction*>::finished,
this, [this, watcher,dst_addr,payment_id,mixin_count]() {
this, [this, watcher,dst_addr,payment_id,ring_size]() {
QFuture<PendingTransaction*> 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);
}
Expand Down Expand Up @@ -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<QString> list;
Expand Down
13 changes: 8 additions & 5 deletions src/libwalletqt/Wallet.h
Expand Up @@ -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:

Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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<QString> &pubkeys, bool add);
Expand Down Expand Up @@ -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;

Expand Down

0 comments on commit 494ab68

Please sign in to comment.