Commit Graph

12125 Commits

Author SHA1 Message Date
UdjinM6
dfe99c9507 Decouple cs_mnauth/cs_main (#3220) 2019-12-05 19:28:53 +01:00
UdjinM6
9dad60386c
Tweak "Send" popup and refactor related code a bit (#3218)
Few key points:

- highlight when not all recipients are displayed, move this info closer to the actual list
- clarify fee rounding text for PrivateSend, wasn't accurate
- show transactions size and actual fee rate explicitly
- show number of inputs PrivateSend tx is going to consume and warn if this number is 10 or higher
2019-11-27 13:53:42 +03:00
UdjinM6
ef55e48c1e
Merge pull request #3217 from codablock/pr_backport_hidpi_fix
Backport bitcoin#16254 and remove hires theme
2019-11-22 21:14:22 +03:00
UdjinM6
bb7a32d2e2
Add Dark theme (#3216)
* Copy light(-hires).css -> dark(-hires).css (with no changes yet)

* Add dark(-hires).css to makefile/qrc and show them in theme selector

* Dark theme (css part)

* Do not style unit selector in status bar via platform styles, use css instead

* No coloring via forms (*.ui)

* Implement and use helpers to style parts of rich text differently for light and dark themes

* Remove dark-hires due to #3217

* Revert changes to light-hires.css to avoid merge conflicts with #3217
2019-11-22 21:13:47 +03:00
UdjinM6
05ac4dbb45
Dashify few strings (#3214) 2019-11-22 21:13:19 +03:00
UdjinM6
482a549a2b
Add collateral, owner and voting addresses to masternode list table (#3207)
* Add collateral, owner and voting addresses to masternode list table

* Adjust column names in masternode list table

* Slightly refactor updateDIP3List()

* Lock cs_main in updateDIP3List early to avoid GUI frezes

* Update MN list in GUI 10 times less often while blockchain is still syncing

* Move GetUTXO calls outside of main update loop

* Fill coin cache for masternode UTXOs on start
2019-11-22 21:12:57 +03:00
Alexander Block
8c17c81631 Remove light-hires theme as it's not required anymore 2019-11-22 12:28:08 +01:00
MarcoFalke
d9741fc632 Merge #16254: qt: Set AA_EnableHighDpiScaling attribute early
099e4b9ad3 Set AA_EnableHighDpiScaling attribute early (Hennadii Stepanov)

Pull request description:

  Running `bitcoin-qt` compiled against Qt 5.12.4 causes a warning:
  ```
  hebasto@bionic-qt:~/bitcoin$ src/qt/bitcoin-qt
  Attribute Qt::AA_EnableHighDpiScaling must be set before QCoreApplication is created.
  ```

  This PR fixes this issue.

  From Qt docs:
  - [Qt::AA_EnableHighDpiScaling](https://doc.qt.io/qt-5/qt.html#ApplicationAttribute-enum):
  > Enables high-DPI scaling in Qt on supported platforms (see also High DPI Displays). _Supported platforms are X11, Windows and Android._ Enabling makes Qt scale the main (device independent) coordinate system according to display scale factors provided by the operating system. This corresponds to setting the `QT_AUTO_SCREEN​_SCALE_FACTOR` environment variable to 1. This attribute must be set before `QGuiApplication` is constructed. This value was added in Qt 5.6.

  - [QCoreApplication::setAttribute()](https://doc.qt.io/qt-5/qcoreapplication.html#setAttribute)

ACKs for commit 099e4b:
  MarcoFalke:
    ACK 099e4b9ad3d9967051d5c3d45c6315d1b30fea05
  jonasschnelli:
    utACK 099e4b9ad3d9967051d5c3d45c6315d1b30fea05
  fanquake:
    ACK 099e4b9ad3d9967051d5c3d45c6315d1b30fea05. Did some testing on `Bionic` and `Windows 10` (using VirtualBox). I couldn't see any obvious visual difference, but given Marco's screens above, this change is obviously better. I also checked that there wasn't any sort of regression on macOS.

Tree-SHA512: 1965a427ee14ffb3871bac317685032406cf02d1fa2b2dc11c8b643bfe4ba09195674d149d1e41752f14c0d000446b35e142f3ce60d987ba97082fd7ee39a094
2019-11-22 12:22:21 +01:00
UdjinM6
37f96f5a3a
Bump version to 0.15 and update few const-s/chainparams (#3204)
* Bump const-s

* Bump version to 0.15

* Run gen-manpages.sh
2019-11-21 23:52:35 +03:00
strophy
9de994988b Compliance changes to terminology (#3211)
Replace inaccurate user-facing descriptions of PS as anonymous to mixed or private, since Dash is a transparent blockchain.
2019-11-21 23:49:35 +03:00
UdjinM6
d475f17bc2
Fix styles for progress dialogs, shutdown window and text selection (#3212)
* Override text selection background color for all text widgets

Otherwie it might become unusable with some system themes

* Fix progress dialogs styling

* Fix shutdown window styling
2019-11-21 18:02:43 +03:00
UdjinM6
df372ec5f9
Fix off-by-one error for coinbase txes confirmation icons (#3206) 2019-11-21 12:55:56 +03:00
UdjinM6
1e94e3333c
Fix styling for disabled buttons (#3205) 2019-11-21 12:55:41 +03:00
UdjinM6
7677b55781
Actually apply CSS styling to RPC console (#3201) 2019-11-19 01:25:59 +03:00
UdjinM6
63cc22d5ea
More Qt tweaks (#3200)
* Fix combobox popup style

* Unify margins/paddings/height for lineedits/comboboxes/spinboxes

* Drop walletframe_background

* Add transparency to unchecked.png

* Alternative solution for comboboxes (no border for popups, add paddings in QListView)
2019-11-18 19:28:41 +03:00
UdjinM6
7aa9c43f89
Few Qt tweaks (#3199)
* Fix "out of sync" label

* Fix fallback fee warning label

It's too long in some languages (e.g. ru) and this breaks ui

* Drop sub-tabs on the Masternode tab
2019-11-15 13:46:45 +03:00
UdjinM6
fd50c1c715
Hold cs_main/cs_wallet in main MakeCollateralAmounts (#3197)
* Hold cs_main/cs_wallet in main MakeCollateralAmounts

Otherwise smth else can alter wallet state and we might end up creating conflicting txes.

* AssertLockHeld
2019-11-13 23:04:12 +03:00
UdjinM6
460e0f475a
Fix locking of funds for mixing (#3194)
* Fix locking of funds for mixing

Lock funds earlier and actually lock mixing collaterals

* Streamline the locking logic in PrepareDenominate
2019-11-13 23:03:52 +03:00
UdjinM6
415b81e41e
Refactor some pow functions (#3198)
* Refactor GetNextWorkRequired

* Move special diff rule out of DGW
2019-11-13 21:17:36 +03:00
UdjinM6
b2fed3862b
A few trivial fixes for RPCs (#3196)
* Move "bip147" softfork up in getblockchaininfo to match the actual order of activation

* Fix typo

* Use CURRENCY_UNIT instead of BTC

* Add simple descriptions in `quorum` rpcs

* Unify the look of `quorum` cmd options (drop `.`)

* Clarify the order softforks are sorted in getblockchaininfo
2019-11-13 21:17:00 +03:00
UdjinM6
f8296364aa
Two trivial fixes for logs (#3195)
* Unify zmq publish notifier logs

* Add missing line break
2019-11-13 21:16:41 +03:00
UdjinM6
d5cc88f00a
Should mark tx as a PS one regardless of change calculations in CreateTransaction (#3193) 2019-11-13 21:16:02 +03:00
Nathan Marley
e9235b9bbb trivial: Rename txid paramater for gobject voteraw (#3191)
The "masternode-tx" name is kinda confusing since ProTxes exist now. This is a
small rename to clarify that it is referring to the MN collateral txid and
index.
2019-11-11 12:22:20 +03:00
Nathan Marley
70b320bab0 Detect masternode mode from masternodeblsprivkey arg (#3188)
* Detect masternode mode from privkey arg

The `masternode` argument seems redundant. This change enables masternode mode
based on the presence (and validity) of the `masternodeblsprivkey` argument.

* Deprecate -masternode option

* Remove -masternode switch from functional tests

* Move -masternode deprecate warning to better place
2019-11-11 12:21:45 +03:00
UdjinM6
1091ab3c66
Translations201909 (#3107)
* en

* ru

* fi

* ko, vi

* it, pl, sk

* fix fi

* es, fr, zh_TW

* de, nl

* Add ro

* pt, tr, zh_CN

* th

* ja
2019-11-11 11:24:45 +03:00
UdjinM6
251fb5e69c
Slightly optimize ApproximateBestSubset and its usage for PS txes (#3184)
* From 2 best sets with the same `nTotal` in ApproximateBestSubset prefer the one with less inputs

* There is no reason to run ApproximateBestSubset again if nMinChange is 0

* Apply review suggestions
2019-11-04 20:35:58 +03:00
UdjinM6
a55624b25f
Fix 3182: Append scrollbar styles (#3186) 2019-11-04 20:35:32 +03:00
UdjinM6
372389d231
Disable styling for scrollbars on macos (#3182)
* Do not add spacing to tx list header on macos

* Only style scrollbars when not on macos
2019-10-31 20:30:57 +03:00
UdjinM6
e0781095f0
A couple of fixes for additional indexes (#3181)
* It should not be possible to change settings for additional indexes without reindex

* Should write db flags for additional indexes on reindex

* Add tests to make sure index settings can't be changed without reindex
2019-10-31 20:30:42 +03:00
Nathan Marley
d3ce0964b2 Add Qt GUI refresh w/branding updates (#3000)
* Update Dash app and toolbar icons

* Update icons and images

* Remove menubar icons

* Add Dash logo to top-right of menubar

* Remove the small PrivateSend buttons

* Remove image entirely from About modal

* Update CSS for new theme changes

* Restore splash testnet image

* Make entire toolbar button clickable

* Fix address book and shrink transaction icons

* Revert "Restore splash testnet image"

This reverts commit 2df07ff7d30664e0f18ad2dfbeb85ec602ef6245.

* Restore original direction for tx in/out arrows

* Add transparency to icons

* Remove unused icons

* Resize way too small icons

* `mogrify src/qt/res/*/*.png`

* Drop `light` from `optimize-pngs.py`

* `python3 contrib/devtools/optimize-pngs.py`

"Total reduction: 42507 bytes"

* Restore old remove icon as console_remove
2019-10-31 20:30:21 +03:00
Nathan Marley
9bc699ff25 Update activemn if protx info changed (#3176)
* Update activemn if protx info changed

* Add `==` and `!=` operators to CDeterministicMNState

* Only re-init active MN if its IP changed, changes to payout, voting etc. can be done without it

* Test `masternode status` updates

* Don't track mnListEntry anymore and instead get the DMN on demand

* Revert "Add `==` and `!=` operators to CDeterministicMNState"

This reverts commit fba468758113084785c0bc0fffd6d704911be8a3.
2019-10-30 22:31:13 +03:00
UdjinM6
bbd9b10d47
Refactor nonLockedTxsByInputs (#3178) 2019-10-29 21:37:54 +03:00
UdjinM6
64a913d6f9
Allow empty strings in protx update_registrar as an option to re-use current values (#3177)
* Allow empty strings in `protx update_registrar` as an option to re-use current values

* Update src/rpc/rpcevo.cpp

Co-Authored-By: Alexander Block <ablock84@gmail.com>
2019-10-29 21:37:39 +03:00
UdjinM6
a7492c1d3a Handle coin type via CCoinControl (#3172) 2019-10-23 09:56:44 +02:00
Alexander Block
5107582f25
Merge #11252: [P2P] When clearing addrman clear mapInfo and mapAddr. (#3171)
b86a42077 when clearing addrman clear mapInfo and mapAddr (Gregory Sanders)

Pull request description:

  Power failure on my machine resulted in a corrupted addrman that would hit bad assertions when trying to serialize the "cleared" addrman to disk: 6866b4912b/src/addrman.h (L320)

Tree-SHA512: 07ca8b6cbd88407e5f3f0dccb346ae31bd1392f4210b2d5c5647c853986bfec95cf70240b92bafdc61b90e452a5d8315962738d10c10c2b53fdabff10503d05a
2019-10-23 09:56:30 +02:00
Alexander Block
0d1a049059
Don't show individual messages for each TX when too many come in at once (#3170)
This avoids locking up the whole Desktop on some systems where messages
are sent through DBUS.

Instead of showing each message, we'll now consolidate all TXs into a single
message when more then 9 arrive at once (in 100ms).
2019-10-23 09:56:15 +02:00
Alexander Block
589c892506
Fix 2 more bottlenecks causing GUI lockups (#3169)
* Remove dataChanged call for ToAddress

This call is redundant since a long time already. It comes from a time
where there was no ToAddress column, but only a Description column which
also contained status information for coinbases. This is gone for a long
time already, so the ToAddress column has nothing included which might
change when confirmations change.

For the history:
34fa178243 splitted the Description column
into Type and ToAddress
e599246803 removed last traces of status from
the ToAddress column

* Avoid call to labelForAddress in formatTxToAddress

This speeds up sorting by address
2019-10-23 09:56:00 +02:00
UdjinM6
dfd6ee472a Actually update spent index on DisconnectBlock (#3167)
Fixes #3166
2019-10-23 09:55:44 +02:00
Alexander Block
3c818e95bc
Only track last seen time instead of first and last seen time (#3165)
This avoids timeouts on parts of the network
2019-10-23 09:55:06 +02:00
Nathan Marley
8cbd63d9e8 Make HD wallet warning a bit more natural (#3164) 2019-10-22 11:39:13 +03:00
QuantumExplorer
001c4338bf Improved messaging for ip address errors (#3163) 2019-10-19 13:40:29 +03:00
UdjinM6
33d04ebf28
Disable move ctor/operator for CKeyHolder (#3162)
* Disable move ctor/operator for CKeyHolder

Also fixes these warnings:
```
In file included from dsnotificationinterface.cpp:12:
In file included from ./privatesend/privatesend-client.h:8:
./privatesend/privatesend-util.h:18:5: warning: explicitly defaulted move constructor is implicitly deleted [-Wdefaulted-function-deleted]
    CKeyHolder(CKeyHolder&&) = default;
    ^
./privatesend/privatesend-util.h:13:17: note: move constructor of 'CKeyHolder' is implicitly deleted because field 'reserveKey' has a deleted move constructor
    CReserveKey reserveKey;
                ^
./wallet/wallet.h:1282:5: note: 'CReserveKey' has been explicitly marked deleted here
    CReserveKey(const CReserveKey&) = delete;
    ^
In file included from dsnotificationinterface.cpp:12:
In file included from ./privatesend/privatesend-client.h:8:
./privatesend/privatesend-util.h:19:17: warning: explicitly defaulted move assignment operator is implicitly deleted [-Wdefaulted-function-deleted]
    CKeyHolder& operator=(CKeyHolder&&) = default;
                ^
./privatesend/privatesend-util.h:13:17: note: move assignment operator of 'CKeyHolder' is implicitly deleted because field 'reserveKey' has a deleted move assignment operator
    CReserveKey reserveKey;
                ^
./wallet/wallet.h:1283:18: note: 'operator=' has been explicitly marked deleted here
    CReserveKey& operator=(const CReserveKey&) = delete;
                 ^
2 warnings generated.
```

* Slightly refactor `CKeyHolderStorage::AddKey()` to clarify that it's ptr and not the object itself that we are moving
2019-10-19 13:40:12 +03:00
Alexander Block
da2f503a48 Fix largest part of GUI lockups with large wallets (#3155)
* [Qt] make sure transaction table entry gets updated after bump

* Remove unnecessary tracking of IS lock count

* Track lockedByChainLocks in TransactionRecord

* Only update record when the TX was not ChainLocked before

* Emit dataChanged for CT_UPDATED transactions

* Use plain seconds since epoch comparison in TransactionFilterProxy::filterAcceptsRow

The QDateTime::operator< calls inside TransactionFilterProxy::filterAcceptsRow
turned out to be the slowest part in the UI when many TXs are inside
the wallet. DateRoleInt allows us to request the plain seconds since epoch
which we then use to compare against dateFrom/dateTo, which are also both
stored as seconds since epoch now.

* Don't invoke updateConfirmations directly and let pollBalanceChanged handle it

* Implement AddressTableModel::labelForDestination

This one avoids converting from string to CBitcoinAddress and calling
.Get() on the result.

* Also store CBitcoinAddress object and CTxDestination in TransactionRecord

This avoids frequent and slow conversion

* Use labelForDestination when possible

This avoids unnecessary conversions

* Don't set fForceCheckBalanceChanged to true when IS lock is received

We already do this through updateTransaction(), which is also called when
an IS lock is received for one of our own TXs.

* Only update lockedByChainLocks and lockedByInstantSend when a change is possible

lockedByChainLocks can never get back to false, so no need to re-check it.
Same with lockedByInstantSend, except when a ChainLock overrides it.

* Hold and update label in TransactionRecord

Instead of looking it up in data()

* Review suggestions

* Use proper columns in dataChanged call in updateAddressBook
2019-10-19 13:39:02 +03:00
UdjinM6
3c6b5f98e0 Use wallet UTXOs whenever possible to avoid looping through all wallet txes (#3156)
* Use setWalletUTXO whenever possible to avoid looping through all wallet txes

* Apply review suggestion - GetSpendableTXs()
2019-10-17 12:28:34 +02:00
UdjinM6
e9ed354822
Partially revert 3061 (#3150)
Turned out that this causes SelectCoinsMinConf to (unnecessary) lean towards selecting mempool txes which can cause "too long mempool chain" error even when there are more funds to spend.
2019-10-17 12:36:35 +03:00
UdjinM6
4b6af8f2c1
Few fixes related to SelectCoinsGroupedByAddresses (#3144)
* Fix cache usage in SelectCoinsGroupedByAddresses

* Reset cache flags in SelectCoinsGroupedByAddresses when a block is (dis)connected

* MakeCollateralAmounts should call SelectCoinsGroupedByAddresses with a limited number of inputs
2019-10-17 12:36:18 +03:00
Alexander Block
be127bc2ee Replace vecAskFor with a priority queue (#3147)
This avoids sorting before looping through it to figure out what to
request. The assumption that sorting would be cheap when vecAskFor is
already mostly sorted (only unsorted at the end) turned out to be false.
In reality, ~50% of CPU time was consumed by the sort when a lot of traffic
(thousands of TXs) happen.
2019-10-16 17:10:36 +03:00
Alexander Block
efd8d2c82b Avoid propagating InstantSend related old recovered sigs (#3145)
* More/better logging for InstantSend

* Implement CRecoveredSigsDb::TruncateRecoveredSig

* Truncate recovered sigs for ISLOCKs instead of completely removing them

This makes AlreadyHave() return true even when the recovered sig is deleted
locally. This avoids re-requesting and re-processing of old recovered sigs.

* Also truncate recovered sigs for freshly received ISLOCKs

* Fix comment
2019-10-16 17:10:06 +03:00
Alexander Block
17151daa2c Fix compilation 2019-10-14 13:45:14 +02:00
Wladimir J. van der Laan
fefe07003b Merge #14670: http: Fix HTTP server shutdown
28479f926f21f2a91bec5a06671c60e5b0c55532 qa: Test bitcond shutdown (João Barbosa)
8d3f46ec3938e2ba17654fecacd1d2629f9915fd http: Remove timeout to exit event loop (João Barbosa)
e98a9eede2fb48ff33a020acc888cbcd83e24bbf http: Remove unnecessary event_base_loopexit call (João Barbosa)
6b13580f4e3842c11abd9b8bee7255fb2472b6fe http: Unlisten sockets after all workers quit (João Barbosa)
18e968581697078c36a3c3818f8906cf134ccadd http: Send "Connection: close" header if shutdown is requested (João Barbosa)
02e1e4eff6cda0bfc24b455a7c1583394cbff6eb rpc: Add wait argument to stop (João Barbosa)

Pull request description:

  Fixes #11777. Reverts #11006. Replaces #13501.

  With this change the HTTP server will exit gracefully, meaning that all requests will finish processing and sending the response, even if this means to wait more than 2 seconds (current time allowed to exit the event loop).

  Another small change is that connections are accepted even when the server is stopping, but HTTP requests are rejected. This can be improved later, especially if chunked replies are implemented.

  Briefly, before this PR, this is the order or events when a request arrives (RPC `stop`):
   1. `bufferevent_disable(..., EV_READ)`
   2. `StartShutdown()`
   3. `evhttp_del_accept_socket(...)`
   4. `ThreadHTTP` terminates (event loop exits) because there are no active or pending events thanks to 1. and 3.
   5. client doesn't get the response thanks to 4.

  This can be verified by applying
  ```diff
       // Event loop will exit after current HTTP requests have been handled, so
       // this reply will get back to the client.
       StartShutdown();
  +    MilliSleep(2000);
       return "Bitcoin server stopping";
   }
  ```
  and checking the log output:
  ```
      Received a POST request for / from 127.0.0.1:62443
      ThreadRPCServer method=stop user=__cookie__
      Interrupting HTTP server
  **  Exited http event loop
      Interrupting HTTP RPC server
      Interrupting RPC
      tor: Thread interrupt
      Shutdown: In progress...
      torcontrol thread exit
      Stopping HTTP RPC server
      addcon thread exit
      opencon thread exit
      Unregistering HTTP handler for / (exactmatch 1)
      Unregistering HTTP handler for /wallet/ (exactmatch 0)
      Stopping RPC
      RPC stopped.
      Stopping HTTP server
      Waiting for HTTP worker threads to exit
      msghand thread exit
      net thread exit

      ... sleep 2 seconds ...

      Waiting for HTTP event thread to exit
      Stopped HTTP server
  ```

  For this reason point 3. is moved right after all HTTP workers quit. In that moment HTTP replies are queued in the event loop which keeps spinning util all connections are closed. In order to trigger the server side close with keep alive connections (implicit in HTTP/1.1) the header `Connection: close` is sent if shutdown was requested. This can be tested by
  ```
  bitcoind -regtest
  nc localhost 18443
  POST / HTTP/1.1
  Authorization: Basic ...
  Content-Type: application/json
  Content-Length: 44

  {"jsonrpc": "2.0","method":"stop","id":123}
  ```

  Summing up, this PR:
   - removes explicit event loop exit — event loop exits once there are no active or pending events
   - changes the moment the listening sockets are removed — explained above
   - sends header `Connection: close` on active requests when shutdown was requested which is relevant when it's a persistent connection (default in HTTP 1.1) — libevent is aware of this header and closes the connection gracefully
   - removes event loop explicit break after 2 seconds timeout

Tree-SHA512: 4dac1e86abe388697c1e2dedbf31fb36a394cfafe5e64eadbf6ed01d829542785a8c3b91d1ab680d3f03f912d14fc87176428041141441d25dcb6c98a1e069d8
2019-10-14 13:45:09 +02:00