From eb92933d522381edc21c0770eb0f6bd4df16fcaf Mon Sep 17 00:00:00 2001 From: crowning- Date: Sat, 5 Nov 2016 17:13:16 +0100 Subject: [PATCH] [UI] In-wallet PrivateSend help (#1129) --- src/qt/forms/overviewpage.ui | 436 ++++++++++++++++++----------------- src/qt/overviewpage.cpp | 40 ++++ src/qt/overviewpage.h | 1 + src/qt/res/css/crownium.css | 18 ++ src/qt/res/css/drkblue.css | 18 ++ src/qt/res/css/light.css | 18 ++ 6 files changed, 318 insertions(+), 213 deletions(-) diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui index 4618bfa06..07a765190 100644 --- a/src/qt/forms/overviewpage.ui +++ b/src/qt/forms/overviewpage.ui @@ -405,223 +405,233 @@ - - - - - - - 75 - true - - - - PrivateSend - - - - - - - The displayed information may be out of date. Your wallet automatically synchronizes with the Dash network after a connection is established, but this process has not completed yet. - - - QLabel { color: red; } - - - (out of sync) - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - + + + + + + 75 + true + + + + PrivateSend + + + + + + + The displayed information may be out of date. Your wallet automatically synchronizes with the Dash network after a connection is established, but this process has not completed yet. + + + QLabel { color: red; } + + + (out of sync) + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + - - - - QFormLayout::AllNonFixedFieldsGrow - - - 11 - - - 12 - - - - - Status: - - - - - - - Enabled/Disabled - - - - - - - Completion: - - - - - - - - 154 - 16777215 - - - - 0 - - - - - - - PrivateSend Balance: - - - - - - - - 75 - true - - - - 0 DASH - - - - - - - Amount and Rounds: - - - - - - - 0 DASH / 0 Rounds - - - - - - - Submitted Denom: - - - - - - - The denominations you submitted to the Masternode.<br>To mix, other users must submit the exact same denominations. - - - n/a - - - - - + + + QFormLayout::AllNonFixedFieldsGrow + + + 11 + + + 12 + + + + + Status: + + + + + + + Enabled/Disabled + + + + + + + Completion: + + + + + + + + 154 + 16777215 + + + + 0 + + + + + + + PrivateSend Balance: + + + + + + + + 75 + true + + + + 0 DASH + + + + + + + Amount and Rounds: + + + + + + + 0 DASH / 0 Rounds + + + + + + + Submitted Denom: + + + + + + + The denominations you submitted to the Masternode.<br>To mix, other users must submit the exact same denominations. + + + n/a + + + + - - - - - - (Last Message) - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - true - - - - - - - - 0 - 0 - - - - Start/Stop Mixing - - - - - - - - - - 0 - 0 - - - - Try to manually submit a PrivateSend request. - - - Try Mix - - - - - - - - 0 - 0 - - - - Reset the current status of PrivateSend (can interrupt PrivateSend if it's in the process of Mixing, which can cost you money!) - - - false - - - Reset - - - - - - - + + + + + (Last Message) + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + + + 0 + 0 + + + + Start/Stop Mixing + + + + + + + + + + 0 + 0 + + + + Try to manually submit a PrivateSend request. + + + Try Mix + + + + + + + + 0 + 0 + + + + Reset the current status of PrivateSend (can interrupt PrivateSend if it's in the process of Mixing, which can cost you money!) + + + false + + + Reset + + + + + + + + 0 + 0 + + + + Information about PrivateSend and Mixing + + + Info + + + + + + diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp index cd6d6b28a..28f29d7b9 100644 --- a/src/qt/overviewpage.cpp +++ b/src/qt/overviewpage.cpp @@ -282,6 +282,7 @@ void OverviewPage::setWalletModel(WalletModel *model) connect(ui->privateSendAuto, SIGNAL(clicked()), this, SLOT(privateSendAuto())); connect(ui->privateSendReset, SIGNAL(clicked()), this, SLOT(privateSendReset())); + connect(ui->privateSendInfo, SIGNAL(clicked()), this, SLOT(privateSendInfo())); connect(ui->togglePrivateSend, SIGNAL(clicked()), this, SLOT(togglePrivateSend())); updateWatchOnlyLabels(model->haveWatchOnly()); connect(model, SIGNAL(notifyWatchonlyChanged(bool)), this, SLOT(updateWatchOnlyLabels(bool))); @@ -441,6 +442,7 @@ void OverviewPage::updateAdvancedPSUI(bool fShowAdvancedPSUI) { ui->labelSubmittedDenom->setVisible(fShowAdvancedPSUI); ui->privateSendAuto->setVisible(fShowAdvancedPSUI); ui->privateSendReset->setVisible(fShowAdvancedPSUI); + ui->privateSendInfo->setVisible(true); ui->labelPrivateSendLastMessage->setVisible(fShowAdvancedPSUI); } @@ -576,6 +578,44 @@ void OverviewPage::privateSendReset(){ QMessageBox::Ok, QMessageBox::Ok); } +void OverviewPage::privateSendInfo(){ + + // Artificial long boxtitle to ensure minimum width without overwriting the global CSS styles + QString placeHolder = " "; + QString infoBoxTitle = tr("PrivateSend") + placeHolder; + + QMessageBox::information(this, infoBoxTitle, + tr("\ +

PrivateSend Basics

\ +PrivateSend gives you true financial privacy by obscuring the origins of your funds. \ +All the Dash in your wallet is comprised of different \"inputs\" which you can think of as separate, discrete coins.
\ +PrivateSend uses an innovative process to mix your inputs with the inputs of two other people, without having your coins ever leave your wallet. \ +You retain control of your money at all times..
\ +The PrivateSend process works like this:\ +
    \ +
  1. PrivateSend begins by breaking your transaction inputs down into standard denominations. \ +These denominations are 0.1 DASH, 1 DASH, 10 DASH, and 100 DASH--sort of like the paper money you use every day.
  2. \ +
  3. Your wallet then sends requests to specially configured software nodes on the network, called \"masternodes.\" \ +These masternodes are informed then that you are interested in mixing a certain denomination. \ +No identifiable information is sent to the masternodes, so they never know \"who\" you are.
  4. \ +
  5. When two other people send similar messages, indicating that they wish to mix the same denomination, a mixing session begins. \ +The masternode mixes up the inputs and instructs all three users' wallets to pay the now-transformed input back to themselves. \ +Your wallet pays that denomination directly to itself, but in a different address (called a change address).
  6. \ +
  7. In order to fully obscure your funds, your wallet must repeat this process a number of times with each denomination. \ +Each time the process is completed, it's called a \"round.\" Each round of PrivateSend makes it exponentially more difficult to determine where your funds originated.
  8. \ +
  9. This mixing process happens in the background without any intervention on your part. When you wish to make a transaction, \ +your funds will already be anonymized. No additional waiting is required.
  10. \ +

\ +IMPORTANT: Your wallet only contains 1000 of these \"change addresses.\" Every time a mixing event happens, up to 9 of your addresses are used up. \ +This means those 1000 addresses last for about 100 mixing events. When 900 of them are used, your wallet must create more addresses. \ +It can only do this, however, if you have automatic backups enabled.
\ +Consequently, users who have backups disabled will also have PrivateSend disabled.
\ +For more info see https://dashpay.atlassian.net/wiki/display/DOC/PrivateSend \ + "), + QMessageBox::Ok, QMessageBox::Ok); + +} + void OverviewPage::togglePrivateSend(){ QSettings settings; // Popup some information on first mixing diff --git a/src/qt/overviewpage.h b/src/qt/overviewpage.h index 1a43da34e..19a45b68b 100644 --- a/src/qt/overviewpage.h +++ b/src/qt/overviewpage.h @@ -69,6 +69,7 @@ private Q_SLOTS: void togglePrivateSend(); void privateSendAuto(); void privateSendReset(); + void privateSendInfo(); void updateDisplayUnit(); void updatePrivateSendProgress(); void updateAdvancedPSUI(bool fShowAdvancedPSUI); diff --git a/src/qt/res/css/crownium.css b/src/qt/res/css/crownium.css index 70d3d1f21..b8f580ddd 100644 --- a/src/qt/res/css/crownium.css +++ b/src/qt/res/css/crownium.css @@ -1101,6 +1101,24 @@ QWidget .QFrame#framePrivateSend .QPushButton#privateSendReset:pressed { border:1px solid #9e9e9e; } +QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo { /* Info Button */ +background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .05 #222222, stop: .3 #FFFFFF, stop: .7 #FFFFFF, stop: 1 #222222); +border:1px solid #d2d2d2; +color:#616161; +min-height:25px; +font-size:9px; +padding:0px; +} + +QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:hover { +background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .05 #222222, stop: .2 #FFFFFF, stop: .6 #FFFFFF, stop: 1 #222222); +color:#000000; +} + +QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:pressed { +border:1px solid #9e9e9e; +} + /* RECENT TRANSACTIONS */ QWidget .QFrame#frame_2 { /* Transactions Widget */ diff --git a/src/qt/res/css/drkblue.css b/src/qt/res/css/drkblue.css index f182605f4..5d61092e0 100644 --- a/src/qt/res/css/drkblue.css +++ b/src/qt/res/css/drkblue.css @@ -1078,6 +1078,24 @@ QWidget .QFrame#framePrivateSend .QPushButton#privateSendReset:pressed { border:1px solid #9e9e9e; } +QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo { /* Info Button */ +background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb); +border:1px solid #d2d2d2; +color:#616161; +min-height:25px; +font-size:9px; +padding:0px; +} + +QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:hover { +background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb); +color:#333; +} + +QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:pressed { +border:1px solid #9e9e9e; +} + /* RECENT TRANSACTIONS */ QWidget .QFrame#frame_2 { /* Transactions Widget */ diff --git a/src/qt/res/css/light.css b/src/qt/res/css/light.css index c2bd605b6..341988584 100644 --- a/src/qt/res/css/light.css +++ b/src/qt/res/css/light.css @@ -1085,6 +1085,24 @@ QWidget .QFrame#framePrivateSend .QPushButton#privateSendReset:pressed { border:1px solid #9e9e9e; } +QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo { /* Info Button */ +background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(250, 250, 250, 128), stop: .95 rgba(250, 250, 250, 255), stop: 1 #ebebeb); +border:1px solid #d2d2d2; +color:#616161; +min-height:25px; +font-size:9px; +padding:0px; +} + +QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:hover { +background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: .01 #f6f6f6, stop: .1 rgba(240, 240, 240, 255), stop: .95 rgba(240, 240, 240, 255), stop: 1 #ebebeb); +color:#333; +} + +QWidget .QFrame#framePrivateSend .QPushButton#privateSendInfo:pressed { +border:1px solid #9e9e9e; +} + /* RECENT TRANSACTIONS */ QWidget .QFrame#frame_2 { /* Transactions Widget */