From fb663037a044caa2ad2730f6164040a76d845745 Mon Sep 17 00:00:00 2001 From: crowning- Date: Mon, 31 Oct 2016 16:50:08 +0100 Subject: [PATCH 1/5] [UI] In-wallet PrivateSend help --- src/qt/forms/overviewpage.ui | 436 ++++++++++++++++++----------------- src/qt/overviewpage.cpp | 37 +++ 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, 315 insertions(+), 213 deletions(-) diff --git a/src/qt/forms/overviewpage.ui b/src/qt/forms/overviewpage.ui index 4618bfa065db..07a7651908e8 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 cd6d6b28a38c..47fbdaa497ef 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,41 @@ 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("\ +In order to utilize PrivateSend coins needs to be 'mixed' before they can be used.
\ +Mixing in a nutshell:\ +
    \ +
  1. PrivateSend uses the fact that a transaction can be formed by multiple parties and made out to multiple parties to merge funds together ('Mixing') in a way where they can’t be uncoupled thereafter.
  2. \ +
  3. All PrivateSend transactions are setup for users to pay themselves, so the system is highly secure against theft and users coins always remain safe.
  4. \ +
  5. PrivateSend requires at least 3 participants to mix funds.
  6. \ +
  7. To improve privacy, the funds to be mixed will be denominated into 0.1DASH, 1DASH, 10DASH AND 100DASH payments. \ +Therefore in each mixing session, all users submit the same denominations as inputs and outputs.
  8. \ +
  9. PrivateSend is limited to 1000 DASH per user per session and requires multiple sessions to thoroughly anonymize significant amounts of money.
  10. \ +
  11. At set intervals, a user’s client will request to join with other clients via a Masternode.
    \ +Upon entry into the Masternode, a queue object is propagated throughout the network detailing the denominations the user is looking to anonymize, but no information that can be used to identify the user.
  12. \ +
  13. Each PrivateSend session ('Round') can be thought of as an independent event increasing the anonymity of user’s funds. Each round of mixing utilizes multiple randomly chosen Masternodes, one after another.
  14. \ +
  15. At the end of the anonymization phase, the user’s coins are returned to their client at randomly generated change addresses.
  16. \ +
  17. When the user wishes to make a private transaction, the client forwards the intended amount from these anonymous change addresses directly to the intended receiver’s address.
    \ +There is no direct involvement of of Masternodes in the final person-to-person transaction.
  18. \ +
\ +Step 8 above needs some extra attention: the Dash-wallet starts with with a pool (called keypool) of 1000 randomly generated change addresses.

\ +With every round of mixing, some of those addresses are used, reducing the number of unused keypool addresses.
\ +When the keypool is down to 100 addresses, the wallet tries to replenish the keypool. When replenishment has finished, the wallet MUST create a new backup of your newly generated Dash addresses.
\ +That's why mixing is disabled when you disable automatic wallet backups in the settings.

\ +Without this (automatic) backup you wouldn't be able to access this newly created addresses from old wallet backups, and thus losing coins!
\ +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 1a43da34e543..19a45b68b6b3 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 70d3d1f21090..b8f580ddd040 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 f182605f4f6b..5d61092e0879 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 c2bd605b6ba8..34198858449f 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 */ From b7f1837e0d3a673099c6b8b66e444c2c23bded0a Mon Sep 17 00:00:00 2001 From: crowning- Date: Mon, 31 Oct 2016 18:49:13 +0100 Subject: [PATCH 2/5] [UI] In-wallet PrivateSend help (typo fixes) --- src/qt/overviewpage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp index 47fbdaa497ef..f05b3f223aa2 100644 --- a/src/qt/overviewpage.cpp +++ b/src/qt/overviewpage.cpp @@ -602,7 +602,7 @@ Upon entry into the Masternode, a queue object is propagated throughout the netw
  • When the user wishes to make a private transaction, the client forwards the intended amount from these anonymous change addresses directly to the intended receiver’s address.
    \ There is no direct involvement of of Masternodes in the final person-to-person transaction.
  • \ \ -Step 8 above needs some extra attention: the Dash-wallet starts with with a pool (called keypool) of 1000 randomly generated change addresses.

    \ +Step 8 above needs some extra attention: the Dash-wallet starts with a pool (called keypool) of 1000 randomly generated change addresses.

    \ With every round of mixing, some of those addresses are used, reducing the number of unused keypool addresses.
    \ When the keypool is down to 100 addresses, the wallet tries to replenish the keypool. When replenishment has finished, the wallet MUST create a new backup of your newly generated Dash addresses.
    \ That's why mixing is disabled when you disable automatic wallet backups in the settings.

    \ From e44b63209af2ff313efd288ace3837d885ff72ec Mon Sep 17 00:00:00 2001 From: crowning- Date: Thu, 3 Nov 2016 10:11:45 +0100 Subject: [PATCH 3/5] [UI] In-wallet PrivateSend help (help-text finalized) --- src/qt/overviewpage.cpp | 42 +++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp index f05b3f223aa2..8336c933f015 100644 --- a/src/qt/overviewpage.cpp +++ b/src/qt/overviewpage.cpp @@ -586,27 +586,29 @@ void OverviewPage::privateSendInfo(){ QMessageBox::information(this, infoBoxTitle, tr("\ -In order to utilize PrivateSend coins needs to be 'mixed' before they can be used.
    \ -Mixing in a nutshell:\ +

    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 uses the fact that a transaction can be formed by multiple parties and made out to multiple parties to merge funds together ('Mixing') in a way where they can’t be uncoupled thereafter.
    2. \ -
    3. All PrivateSend transactions are setup for users to pay themselves, so the system is highly secure against theft and users coins always remain safe.
    4. \ -
    5. PrivateSend requires at least 3 participants to mix funds.
    6. \ -
    7. To improve privacy, the funds to be mixed will be denominated into 0.1DASH, 1DASH, 10DASH AND 100DASH payments. \ -Therefore in each mixing session, all users submit the same denominations as inputs and outputs.
    8. \ -
    9. PrivateSend is limited to 1000 DASH per user per session and requires multiple sessions to thoroughly anonymize significant amounts of money.
    10. \ -
    11. At set intervals, a user’s client will request to join with other clients via a Masternode.
      \ -Upon entry into the Masternode, a queue object is propagated throughout the network detailing the denominations the user is looking to anonymize, but no information that can be used to identify the user.
    12. \ -
    13. Each PrivateSend session ('Round') can be thought of as an independent event increasing the anonymity of user’s funds. Each round of mixing utilizes multiple randomly chosen Masternodes, one after another.
    14. \ -
    15. At the end of the anonymization phase, the user’s coins are returned to their client at randomly generated change addresses.
    16. \ -
    17. When the user wishes to make a private transaction, the client forwards the intended amount from these anonymous change addresses directly to the intended receiver’s address.
      \ -There is no direct involvement of of Masternodes in the final person-to-person transaction.
    18. \ -
    \ -Step 8 above needs some extra attention: the Dash-wallet starts with a pool (called keypool) of 1000 randomly generated change addresses.

    \ -With every round of mixing, some of those addresses are used, reducing the number of unused keypool addresses.
    \ -When the keypool is down to 100 addresses, the wallet tries to replenish the keypool. When replenishment has finished, the wallet MUST create a new backup of your newly generated Dash addresses.
    \ -That's why mixing is disabled when you disable automatic wallet backups in the settings.

    \ -Without this (automatic) backup you wouldn't be able to access this newly created addresses from old wallet backups, and thus losing coins!
    \ +
  • 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.
  • \ +
  • 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.
  • \ +
  • 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).
  • \ +
  • 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.
  • \ +
  • 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.
  • \ +
    \ +IMPORTANT: Your wallet only contains 1000 of these \"change addresses.\" Every time a mixing event happens, one of your addresses is used up. \ +Once enough 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); From 5faf92c635144974207f9280b85a8f6fafdee383 Mon Sep 17 00:00:00 2001 From: crowning- Date: Thu, 3 Nov 2016 21:13:49 +0100 Subject: [PATCH 4/5] [UI] In-wallet PrivateSend help (spelling fixed) --- src/qt/overviewpage.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp index 8336c933f015..254591f941a0 100644 --- a/src/qt/overviewpage.cpp +++ b/src/qt/overviewpage.cpp @@ -595,11 +595,11 @@ You retain control of your money at all times..
    \
      \
    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. \ +
    4. 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.
    5. \
    6. 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. \ +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).
    7. \
    8. 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.
    9. \ From f378acdbe765fb00088517643788c519977a1bb6 Mon Sep 17 00:00:00 2001 From: crowning- Date: Fri, 4 Nov 2016 22:14:14 +0100 Subject: [PATCH 5/5] [UI] In-wallet PrivateSend help (help text modified) --- src/qt/overviewpage.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/qt/overviewpage.cpp b/src/qt/overviewpage.cpp index 254591f941a0..28f29d7b98f2 100644 --- a/src/qt/overviewpage.cpp +++ b/src/qt/overviewpage.cpp @@ -606,8 +606,9 @@ Each time the process is completed, it's called a \"round.\" Each round of Priva
    10. 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.
    11. \

    \ -IMPORTANT: Your wallet only contains 1000 of these \"change addresses.\" Every time a mixing event happens, one of your addresses is used up. \ -Once enough of them are used, your wallet must create more addresses. It can only do this, however, if you have automatic backups enabled.
    \ +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 \ "),