This requirement was introduced in the initial implementation when we were signing protx payload with the owner key (#2246). This was changed later when we implemented external collateral references (#2366). The owner key is not used for anything in ProTxReg but to get CKeyID since then which we can do by simply decoding an address instead. This simplifies masternode registration process by letting an Operator to issue `protx register_prepare` on its own instead of asking an Owner. An Owner still have to sign the message provided by an Operator with his collateral address to prove collateral ownership (and authorize masternode registration).
Note: `protx register_*` rpc will no longer accept privkeys for ownerAddress. Some 3-rd party software like DMT might need to be patched to work correctly with nodes running with this fix.
* Refactor and fix `GUIUtil::updateFonts`
Use QPointer-s to process deleted widgets properly, streamline the flow (less loops and map scans).
* Add some debug output
* qt: Rename mapNormalFontUpdates -> mapFontUpdates
The "Normal" was added when we also had other maps containing font updates
* qt: Count removed items, adjust debug logs
* qt: Use the emplace result for the default font size
* qt: Perform all widget font updates later in a seperate step
* qt: Drop pointSize checks
* qt: Refactor app class font scaling
Co-authored-by: xdustinface <xdustinfacex@gmail.com>
* Fix --disable-wallet build and --disablewallet mode
Console is not showing up in --disable-wallet build and it's crashing in --disablewallet mode before this commit.
* Use nullptr
* Load a stylesheet for the RPCConsole when it's not going to be set as a central widget
This partially reverts the initial commit.
* Fix QMainWindow dark/light styles
* Avoid implicit pointer to bool conversions
* qt: Set RPCConsole's window flags based on wallet availability
* multi-line early returns
* Bring back ifdef to fix a recently introduced crash
Introduced in 2856f46424 (diff-f63c3d5094d55f88dbd1967774f85838b3aee5a40540b8c82b924574bca772a0R203)
Co-authored-by: xdustinface <xdustinfacex@gmail.com>
30fb598737f6efb7802d707a1fa989872e7f8b7b Fix segfault in allocator_tests/arena_tests (Jeffrey Czyz)
15c84f53f47bf6e6a9c4c9dfe50c78d98f7ec07f Define ARENA_DEBUG in Travis test runs (Jeffrey Czyz)
ad715488222f2f2ce2e2cff632eae94fd49ea9c5 Fix compilation errors in support/lockedpool.cpp (Jeffrey Czyz)
Pull request description:
Changes in #12048 cause a compilation error in Arena::walk() when
ARENA_DEBUG is defined. Specifically, Arena's chunks_free map was
changed to have a different value type.
Additionally, missing includes cause other compilation errors when
ARENA_DEBUG is defined.
Reproduced with:
make CPPFLAGS=-DARENA_DEBUG
ACKs for top commit:
laanwj:
ACK 30fb598737f6efb7802d707a1fa989872e7f8b7b
fanquake:
ACK 30fb598737f6efb7802d707a1fa989872e7f8b7b - thanks for following up jkczyz.
Tree-SHA512: 4eec368a4e9c67e4e2a27bc05608a807c2892d50c60d06ed21490cd274c0369f9671bc05b3006acc2a193316caf4896454c9c299603bfed29bd488f1987ec446
f381299 Move CKeyStore::cs_KeyStore to CBasicKeyStore (João Barbosa)
25eb9f5 Inline CKeyStore::AddKey(const CKey &) in CBasicKeyStore (João Barbosa)
Pull request description:
Made these simplifications while reviewing #12714. This aims to make `CKeyStore` a *pure* interface:
- no variable members - the mutex is moved to `CBasicKeyStore` which is where it is used;
- no method implementations - `AddKey(const CKey &)` is moved to `CBasicKeyStore` which is where it is needed.
Tree-SHA512: 84e44f4390c59600e5cefa599b5464e1771c31dd4abc678ef50db8e06ffac778d692860a352918444f8bcd66430634637b6277a818a658721ffc4f381c1c6a90
1ec1602a45 Make FastRandomContext support standard C++11 RNG interface (Pieter Wuille)
Pull request description:
This makes it possible to plug it into the various standard C++11 random distribution algorithms and other functions like `std::shuffle`.
Tree-SHA512: 935eae9c4fae31e1964c16d9cf9d0fcfa899e04567f010d8b3e1ff824e55e2392aa838ba743d03c1b2a5010c5b8da04343f453983dfeed83747d85828a564713
8674e74 Provide relevant error message if datadir is not writable. (murrayn)
Pull request description:
If the --datadir exists, but is not writable, the current error message on startup is 'Cannot obtain a lock on data directory foo. Bitcoin Core is probably already running.' This is misleading.
I believe this PR addresses #11668, although the issue is not Windows-specific.
Tree-SHA512: 10cbbaea433072aee4fb3e8938a72073c7a5c841f7a7685c9e12549c322b2925c7d34bac254ac33021b23132bfc352c058712bc9542298cf86f8fd9757f528b2
5fbf7c4 fix nits: variable naming, typos (Martin Ankerl)
1e0ee90 Use best-fit strategy in Arena, now O(log(n)) instead O(n) (Martin Ankerl)
Pull request description:
This replaces the first-fit algorithm used in the Arena with a best-fit. According to "Dynamic Storage Allocation: A Survey and Critical Review", Wilson et. al. 1995, http://www.scs.stanford.edu/14wi-cs140/sched/readings/wilson.pdf, both startegies work well in practice.
The advantage of using best-fit is that we can switch the O(n) allocation to O(log(n)). Additionally, some previously O(log(n)) operations are now O(1) operations by using hash maps. The end effect is that the benchmark runs about 2.5 times faster on my machine:
# Benchmark, evals, iterations, total, min, max, median
old: BenchLockedPool, 5, 530, 5.25749, 0.00196938, 0.00199755, 0.00198172
new: BenchLockedPool, 5, 1300, 5.11313, 0.000781493, 0.000793314, 0.00078606
I've run all unit tests and benchmarks, and increased the number of iterations so that BenchLockedPool takes about 5 seconds again.
Tree-SHA512: 6551e384671f93f10c60df530a29a1954bd265cc305411f665a8756525e5afe2873a8032c797d00b6e8c07e16d9827465d0b662875433147381474a44119ccce
a7c45bc Add native support for serializing char arrays without FLATDATA (Pieter Wuille)
Pull request description:
Support is added to serialize arrays of type `char` or `unsigned char` directly, without any wrappers. All invocations of the `FLATDATA` wrappers that are obsoleted by this are removed.
This includes a patch by @ryanofsky to make `char` casting type safe.
The serialization of `CSubNet` is changed to serialize a `bool` directly rather than though `FLATDATA`. This makes the serialization independent of the size of the bool type (and will use 1 byte everywhere).
This is a small change taken from #10785.
Tree-SHA512: a41f61ca5fdc2fadb2d0e1702351a58a23841d551f505292a9542602cdb19f90d8944b8df14b872810a56bd201648fa4c0e958f3e9427fe829886284e85b9bfd
Signed-off-by: pasta <pasta@dashboost.org>
# Conflicts:
# src/test/serialize_tests.cpp
cb1e319 Bugfix: RPC: savemempool: Don't save until LoadMempool() is finished (Jorge Timón)
Pull request description:
Fixes https://github.com/bitcoin/bitcoin/issues/12142
The tests are a little bit slow, mempool_persist.py goes from about 20 s to about 120 s in my hardware.
Perhaps there's a better way to test this.
Tree-SHA512: 9e6c24b32a9cf3774e8f0bd81c035b0deb53fba5ac3eb2532d85900579d21cef8a1135b75a4fa0a9d883e3822eb35e7d4b47a0838abf99789039205041962629
6feb46c Add --with-sanitizers option to configure (Evan Klitzke)
Pull request description:
This adds configure options for `-fsanitize=address`, `-fsanitize=thread`, and `-fsanitize=undefined` which are all disabled by default. These flags are useful for developers who wish to do additional safety checking. Note that some of these are mutually incompatible, and these may have a large performance overhead.
There's some kind of strange logic required to properly check for the availability of these flags in a way that works on both GCC and Clang, hopefully the comments make it clear what's going on.
Tree-SHA512: 2d6fe402799110e59ee452dddf37f7ca2d26a7fecec50be25c8a134e4a20beb31f1e8f438dffd443641562418075896d1eeb450623425b272d80e05e3027a587
ccedbaf Increase LevelDB max_open_files unless on 32-bit Unix. (Evan Klitzke)
Pull request description:
Currently we set `max_open_files = 64` on all architectures due to concerns about file descriptor exhaustion. This is extremely expensive due to how LevelDB is designed.
When a LevelDB file handle is opened, a bloom filter and block index are decoded, and some CRCs are checked. Bloom filters and block indexes in open table handles can be checked purely in memory. This means that when doing a key lookup, if a given table file may contain a given key, all of the lookup operations can happen completely in RAM until the block itself is fetched. In the common case fetching the block is one disk seek, because the block index stores its physical offset. This is the ideal case, and what we want to happen as often as possible.
If a table file handle is not open in the table cache, then in addition to the regular system calls to open the file, the block index and bloom filter need to be decoded before they can be checked. This is expensive and is something we want to avoid.
The current setting of 64 file handles means that on a synced node, only about 4% of key lookups can be satisifed by table file handles that are actually open and in memory.
The original concerns about file descriptor exhaustion are unwarranted on most systems because:
* On 64-bit POSIX hosts LevelDB will open up to 1000 file descriptors using `mmap()`, and it does not retain an open file descriptor for such files.
* On Windows non-socket files do not interfere with the main network `select()` loop, so the same fd exhaustion issues do not apply there.
This change keeps the default `max_open_files` value (which is 1000) on all systems except 32-bit POSIX hosts (which do not use `mmap()`). Open file handles use about 20 KB of memory (for the block index), so the extra file handles do not cause much memory overhead. At most 1000 will be open, and a fully synced node right now has about 1500 such files.
Profile of `loadblk` thread before changes: https://monad.io/maxopenfiles-master.svg
Profile of `loadblk` thread after changes: https://monad.io/maxopenfiles-increase.svg
Tree-SHA512: de54f77d57e9f8999eaf8d12592aab5b02f5877be8fa727a1f42cf02da2693ce25846445eb19eb138ce4e5045d1c65e14054df72faf3ff32c7655c9cfadd27a9
d40f06a Introduce interface for signing providers (Pieter Wuille)
Pull request description:
`CKeyStore` is a rich interface that provides many features, including knowledge of scripts and pubkeys for solving, private keys for signing, in addition to watch-only keys and scripts, and distinguishing lack of keys from them just being encrypted.
The signing logic in script/sign does not actually need most of these features. Here we introduce a simpler interface (`SigningProvider`) which *only* provides keys and scripts. This is actually sufficient for signing.
In addtion, we swap the dependency between keystore and script/sign (keystore now depends on script/script with `CKeyStore` deriving from `SigningProvider`, rather than `CKeyStore` being the interface that signing relies on).
This is a very early step towards the design in https://gist.github.com/sipa/125cfa1615946d0c3f3eec2ad7f250a2, separating the concern between deciding what outputs are ours and signing.
Tree-SHA512: d511b7b03eec0e513530db1d9ae5aacf6d0bfa1d3e1c03d06c5bde396bafb5824c4491b227d32bcda9288530caf49835da18e846ccf66538d6c0cc6ae27291c9
Signed-off-by: pasta <pasta@dashboost.org>
# Conflicts:
# src/script/sign.cpp
# src/script/sign.h
620361fce8 Fix accidental use of the addition assignment operator ("+="). Remove newlines from error message. (practicalswift)
Pull request description:
Fix accidental use of the addition assignment operator (`+=`).
_Note to reviewers:_ Perhaps the `\n`:s should be removed too?
Tree-SHA512: 4e8c2dfd6025d78ef9d60522297994829dacc447e6b6782e15c0bdd5dd2daa17ca9a8948bfa9a15be57d9286092356381d7e6747980303852d273eb0df0dd76b
a192636 -blocksdir: keep blockindex leveldb database in datadir (Jonas Schnelli)
f38e4fd QA: Add -blocksdir test (Jonas Schnelli)
386a6b6 Allow to optional specify the directory for the blocks storage (Jonas Schnelli)
Pull request description:
Since the actual block files taking up more and more space, it may be desirable to have them stored in a different location then the data directory (use case: SSD for chainstate, etc., HD for blocks).
This PR adds a `-blocksdir` option that allows one to keep the blockfiles and the blockindex external from the data directory (instead of creating symlinks).
I fist had an option to keep the blockindex within the datadir, but seems to make no sense since accessing the index will (always) lead to access (r/w) the block files.
Tree-SHA512: f8b9e1a681679eac25076dc30e45e6e12d4b2d9ac4be907cbea928a75af081dbcb0f1dd3e97169ab975f73d0bd15824c00c2a34638f3b284b39017171fce2409
- Call `statusUpdateNeeded` before `tryGetTxStatus`. This allows to run
the latter only if really required i.e. if `statusUpdateNeeded` returns true.
- Reuse `cachedNumBlocks` from `WalletModel` in `TransactionTablePriv::index()` to _actually_ avoid redundant tx status updates
- Initialize `cachedNumBlocks` and `cachedChainLockHeight` with `-1` to avoid extra `pollBalanceChanged` call
bf36a3ccc212ad4d7c5cb8f26d7a22e279fe3cec gui: Fix race in WalletModel::pollBalanceChanged (Russell Yanofsky)
Pull request description:
Poll function was wrongly setting cached height to the current chain height instead of the chain height at the time of polling.
This bug could cause balances to appear out of date, and was first introduced a0704a8996 (diff-2e3836af182cfb375329c3463ffd91f8L117). Before that commit, there wasn't a problem because cs_main was held during the poll update.
Currently, the problem should be rare. But if 8937d99ce81a27ae5e1012a28323c0e26d89c50b from #17954 were merged, the problem would get worse, because the wrong cachedNumBlocks value would be set if the wallet was polled in the interval between a block being connected and it processing the BlockConnected notification.
MarcoFalke also points out that a0704a8996 could lead to GUI hangs as well, because previously the pollBalanceChanged method, which runs on the GUI thread, would only make a nonblocking TRY_LOCK(cs_main) call, but after could make blocking LOCK(cs_main) calls, potentially locking up the GUI.
Thanks to John Newbery for finding this bug this while reviewing https://github.com/bitcoin/bitcoin/pull/17954.
ACKs for top commit:
Empact:
utACK bf36a3ccc2
jonasschnelli:
utACK bf36a3c
Tree-SHA512: 1f4f229fa70a6d1fcf7be3806dca3252e86bc1755168fb421258389eb95aae67f863cb1216e6dc086b596c33560d1136215a4c87b5ff890abc8baaa3333b47f4
This requirement was introduced in the initial implementation when we were signing protx payload with the owner key (#2246). This was changed later when we implemented external collateral references (#2366). The owner key is not used for anything in ProTxReg but to get CKeyID since then which we can do by simply decoding an address instead. This simplifies masternode registration process by letting an Operator to issue `protx register_prepare` on its own instead of asking an Owner. An Owner still have to sign the message provided by an Operator with his collateral address to prove collateral ownership (and authorize masternode registration).
Note: `protx register_*` rpc will no longer accept privkeys for ownerAddress. Some 3-rd party software like DMT might need to be patched to work correctly with nodes running with this fix.
Made node sense to squash it into the related OptionsDialog commit of
the initial PR because this diff uses the wallet interface which gets
introduced one commit after the related commit.
* Drop icon sources (svg) we no longer use
* Rename some icons to better match their content
* Drop chevron/console prompt icon
We do not show it in Dash specific themes and Traditional is just fine with a simple ">" label
* bitcoin -> dash for icons
* Adjust `contrib/debian/copyright`
Dashify it + we no longer use icons mentioned there
* `mogrify src/qt/res/*/*.png`
* `python3 contrib/devtools/optimize-pngs.py`
Total reduction: 68072 bytes
* qt: Update the application font if the font family gets changed
* qt: Make sure recent transactions have the correct font family
Introduced because QListView is ignored in GUIUtil::updateFonts, so its base font family doesn't change, hence the recent transactions don't adjust because the painter's font doesn't change.
* Store initial font size
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* qt: Bring back setMinimumHeight for recent tx list
This partially reverts a3604f5c7c
Turns out that we still need this at least on Windows (not sure why but tx list looks clipped there atm)
* Reduce number of items in recent tx list by 1 (for PS enabled cases only)
Most users will never see immature funds and the list is going to be too long for them most of the time
* qt: Make sure font size in MasternodeList gets scaled as expected
* qt: Make sure font size in ShutdownWindow gets scaled as expected
* qt: Drop obsolete application font updates
* qt: Scale QMenu and QMessageBox globally
To make sure non-custom context menus + QMessageBox instances createy by
static calls like QMessageBox::critical are scaled also.
* qt: Avoid redundant scaling for tooltips and menus
* qt: Only update widget's font if required
* qt: Merge GUIUtil::mapFontSizeUpdates into GUIUtil::mapNormalFontUpdates
* qt: Remove obsolete setFixedPitchFont call
* qt: Use setFixedPitchFont in SendCoinsEntry
* qt: Scale font size in increments of 0.25
* qt: Properly scale network traffic stats depending on font metrics
* qt: Update min/max width of OptionsDialog depending on buttons width
* qt: Emit a signal whenever any attribute of AppearanceWidget changed
* qt: Update OptionsDialog width if the appearance changed
* qt: Calculate the initial wide right after the window showed up
Make sure the visibility state of the widgets is correct before width calculations.
* qt: Call parent class showEvent + override it explicit
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* qt: Let OptionsDialog emit a signal if appearance gets changed
* qt: Resize main toolbar depending on visible buttons / font attributes
* qt: Reset max width after it has been set to still allow window resizing
* qt: Properly update the weight of widgets with default font attributes
* qt: Handle updates to the font attributes
* qt: Use resize() instead of setMaximumWidth()
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* qt: Call GUIUtil::updateFonts in ModalOverlay constructor
* qt: Make sure default fonts are stored properly for the related widget
* qt: Ignore some low level classes in GUIUtil::updateFont
* rpc: Remove obsolete `.arg()` call
* qt: Drop fixedPitchFont
* qt: Avoid redundant font updates. Let GUIUtil::updateFont handle them
* qt: Scale recent transactions on OverviewPage
They were scaled by font inheritance before
* qt: Ignore QListView in GUIUtil::updateFonts
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* Update nMinimumChainWork and defaultAssumeValid
* Update chainTxData
* Bump BLOCK_CHAIN_SIZE
It's 21Gb on my local machine atm, bumping to 25Gb to give it some space
* `gen-manpages.sh`
* bupm BLOCK_CHAIN_SIZE 25->30
* qt: Add PrivateSend tab in OptionsDialog, allow to show/hide PS UI
* qt: Decrease height of OptionsDialog
* Apply suggestions from code review
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* qt: Remove obsolete visibility adjustments
Not longer needed since the page is just not reachable if the button is
hidden.
* qt: Make sure PrivateSend related parts are always initialized properly
Not only if its enabled on startup..
* qt: Make updatePrivateSendVisibility a slot to fix the signal connection
* qt: Fix UI updates on OverviewPage if PrivateSend enabled gets toggled
Other way of connecting the slot with true as parameter didn't work..
* qt: Only update and emit the signal for advanced PS UI if required
* qt: Update fPrivateSendEnabled in OptionsModel instead of OptionsDialog
* qt: Recover the PrivateSend enabled state if OptionsDialog gets rejected
* qt: Enable PrivateSend UI by default
* qt: Add some brackets
* qt: Add a comment
* qt: Add a linebreak to the "Enable PrivateSend features" tooltip
* qt: Remove obsolete comment
Co-authored-by: PastaPastaPasta <6443210+PastaPastaPasta@users.noreply.github.com>
* qt: Move comment
* qt: Properly reset the previous PS state if OptionsDialog gets rejected
Handle all reject reasons not only the cancle button.
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
Co-authored-by: PastaPastaPasta <6443210+PastaPastaPasta@users.noreply.github.com>
* Handle situations when we have evodb records but no blocks anymore
* Use IsEmpty
* Apply suggestions from code review
Co-authored-by: dustinface <35775977+xdustinface@users.noreply.github.com>
Co-authored-by: dustinface <35775977+xdustinface@users.noreply.github.com>
* qt: Adjust "Recent Transactions" in Overview tab
Make sure they follow the same format as the transactions in
TransactionsView.
- Removed the transaction type representing arrows
- Apply the same coloring like like in the transaction tab for
the different transaction types (orange = internal, red = outgoing,
green = incoming)
* qt: Cleanup layout of OverviewPage in css
* qt: Add three spacer (left, middle, right) and adjust layout stretch.
This allows to have the elements on the screen aligned symetrically
around the center independent from the window size/resizing.
* qt: Inrease date/amount size for "Recent Transactions" in Overview tab
* qt: Inrease number of "Recent Transactions" displayed in Overview tab
Just to fill the empty space
* qt: Make sure PS elements show as expected and adjust number of recent transactions based on PS
* qt: Adjust transaction entry generation
Co-Authored-By: UdjinM6 <UdjinM6@users.noreply.github.com>
* qt: Adjust warning message box
Co-Authored-By: UdjinM6 <UdjinM6@users.noreply.github.com>
* Move tx list style to css
* Fix tx list style for the traditional theme
* Drop (no longer needed?) min height offset in SetupTransactionList
Can't reproduce the tx list scrolling issue anymore
* Avoid recreating transaction filter from scratch every time SetupTransactionList is called
We call SetupTransactionList every second now (from privateSendStatus()) and this makes GUI unresponsive for huge wallets (I have ~400k txes in my testnet wallet) because of filter recreation/sorting. There is no need to go through all setup steps really, simply updating the limit works just fine and fixes the issue.
* qt: Fix an `if` statement
* qt: Just some refactoring
* fix code style
* bail out if `filter->rowCount() == nNumItems`
* qt: Make sure number of transactions is always correct
* Drop spacer to let recent tx list occupy max height available
* TransactionFilterProxy::setLimit should emit signals to let coresponding layouts update themselves
https://doc.qt.io/qt-5/qabstractitemmodel.html#layoutAboutToBeChangedhttps://doc.qt.io/qt-5/qabstractitemmodel.html#layoutChanged
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* masternode: Fix mempool sync
Make sure the mempool sync requests only happen after the blockchain
sync is done.
* Refactor
Loop only if `-syncmempool`=true, make `if` a bit more readable
Co-authored-by: xdustinface <xdustinfacex@gmail.com>
* qt: Add min-height for CoinControlTreeWidget#treeWidget::item
The rows resize without it if they get locked and the lock icon appears
besides the checkbox. Looks weird.. and especially if you press the lock
all button its just not nice.
* qt: Set background transparency for CoinControl item::hover
* Merge #14828: qt: Remove hidden columns in coin control dialog
1c28feb7d qt: Remove hidden columns in coin control dialog (João Barbosa)
Pull request description:
Instead of having hidden columns, store the data in specific roles.
Overlaps with #14817, fixes#11811.
Tree-SHA512: e86e9ca426b9146ac28997ca1920dbae6cc4e2e494ff94fe131d605cd6c013183fc5de10036c886a4d6dcae497ac4067de3791be0ef9c88f7ce9f57f7bd97422
* qt: Add border-bottom for tree items in CoinControl
* qt: Stretch address column in CoinControlDialog
* Adjust column width for a couple of columns
* qt: Hide PrivateSend rounds column for normal Send tab's CoinControl
* qt: Hide unrelated coins in CoinControl based on active mode. Still allow to show them.
* qt: Hide empty top level items in CoinControlDialog's tree mode
* qt: Hide tree/list radio buttons and default to list for PrivateSend
* qt: Hide address/label column in CoinControl for PrivateSend
* qt: Remove obsolete empty columns
* qt: Rename column "PS Rounds" to "Mixing Rounds"
* qt: Move border-bottom in already existing css selector
* Reveal all PS related coins in coincontrol while in PS mode, not only ones with rounds>=1
Also tweak button text
* qt: Only moving a statement a bit
* qt: Hide the "hideButton" in CoinControlDialog if PrivatSend is disabled
And make it default to show all coins in that case..
Co-authored-by: Jonas Schnelli <dev@jonasschnelli.ch>
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
There is a bug in gdk-pixbuf which prevents ico files from being displayed correctly.
https://gitlab.gnome.org/GNOME/gdk-pixbuf/-/issues/86
Fixed by `convert bitcoin_testnet.ico[4] -define icon:auto-resize=256,128,64,48,32,16 bitcoin_testnet.ico`
* qt: Add missing changeEvent call in TransactionView
* qt: Use state related colors in TransactionModel
* qt: Don't colorize the text for abandoned transactions
The red icon should be obvious enough.
* qt: Drop InstantSend column from transaction view/model
* qt: Update verify.png
* qt: Extend the result string of TransactionTableModel::formatTxStatus
* qt: Drop "LLMQ based" in some status strings
* qt: Drop not longer needed ThemedColor entries
* Introduce amountColors(), add a case for `TransactionRecord::PrivateSendDenominate`
Avoid applying orange color to 0-fee mixing txes (PS denominate), use default (grey) color for them
* Tweak IS/CL status string additions a bit more
* Do not apply additional conditions, just use rec statuses
* qt: Adjust amount colors for types Generated and PrivateSendDenominate
Make them green/orange instead.
* Assign all colors explictly, drop default case
Let compiler complain about missing ones if any
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* qt: Remove icons from debug console
Imo it's clear enough with the colors what commands/output and what user
inout is.
* qt: Draw network stats on the graph + Remove the QGroupBox next to it
The QGroupBox thing just added too much empty space imo.
* qt: Align ThemedStyle colors with css
* [wallet] Construct CWalletTx objects in CommitTransaction
Construct CWalletTx objects in CWallet::CommitTransaction, instead of having
callers do it. This ensures CWalletTx objects are constructed in a uniform way
and all fields are set.
This also makes it possible to avoid confusing and wasteful CWalletTx copies in
https://github.com/bitcoin/bitcoin/pull/9381
There is no change in behavior.
* [wallet] Get rid of CWalletTx default constructor
No change in behavior in the normal case. But buggy mapWallet lookups with
invalid txids will now throw exceptions instead of inserting dummy entries into
the map, and potentially causing segfaults and other failures.
This also makes it a compiler error to use the mapWallet[hash] syntax which
could create dummy entries.
* Apply suggestions from code review
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
Co-authored-by: Russell Yanofsky <russ@yanofsky.org>
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* qt: Rename two PrivateSend related labels in OptionsDialog
* qt: Hide main PrivateSend UI elements if its not enabled
- Tab button
- Menu actions
* qt: Hide PrivateSend in OptionsDialog options if its not enabled.
* qt: Hide PrivateSend filter in TransactionView if its not enabled
* Update toolbar shortcuts to match toolbar buttons visibility
* Update src/qt/transactionview.cpp
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* Fix proxy port ui elements
* Fix fake net checkboxes
* Fix active options label by enabling text wrapping
* Fix options dialog resizing when font size is changed
* Move "Window" tab options into "Main" tab, drop "Window" tab
* Shrink min sizes a bit
* qt: Drop the surrounding QGroupBox in Options -> Wallet
Co-authored-by: xdustinface <xdustinfacex@gmail.com>
* wallet: Allow CoinControl in GetAnonymizedCredit + GetAnonymizedBalance
* qt: Allow CoinControl in WalletModel::getAnonymizedBalance
* qt: Use CoinControl in SendCoinsDialog::useAvailableBalance for PS
* wallet: Fix caching in GetAnonymizedCredit
* Merge #13622: Remove mapRequest tracking that just effects Qt display.
beef7ec4be725beea870a2da510d2817487601ec Remove useless mapRequest tracking that just effects Qt display. (Matt Corallo)
Pull request description:
I thought we had removed this a long time ago, TBH, its really
confusing feedback to users that we display whether a tx was
broadcast to immediate neighbor nodes, given that has little
indication of whether the tx propagated very far.
Tree-SHA512: c9d0808fb60146919bb78d0860ec2193601966c944887eaae7837408422f7e85dfdb306407a613200cdd4726aec66da18df618ebc6a8cfe8650bf08d4a8dc155
Signed-off-by: pasta <pasta@dashboost.org>
# Conflicts:
# src/interfaces/wallet.cpp
# src/interfaces/wallet.h
# src/net_processing.cpp
# src/qt/guiconstants.h
# src/qt/transactiondesc.cpp
# src/qt/transactionrecord.cpp
# src/qt/transactionrecord.h
# src/qt/transactiontablemodel.cpp
# src/validationinterface.cpp
# src/validationinterface.h
# src/wallet/wallet.cpp
* drop TX_STATUS_OFFLINE
Signed-off-by: pasta <pasta@dashboost.org>
Co-authored-by: Wladimir J. van der Laan <laanwj@gmail.com>
* Implement dynamic activation thresholds
* fix
* Revert unrelated changes
* Clarify switching to/staying in LOCKED_IN state
* Fix signal function to work correctly with num_blocks=0
* Add simplified threshold calculation and use it in tests
* Check that thresholds are decreasing, reach the min level and stay there
* Drop `;`
* masternode: Replace sync states INITIAL and WAITING with BLOCKCHAIN
* masternode: Peer dependent "assume tip" timeout
I would say its enough to only wait 1 tick if we have more than 3
peers before we move over to governance sync.
* masternode: Notify the UI instantly if switched to governance sync
Without this it takes one iteration more for the UI to receive the
update.
* masternode: Notify the UI about CMasternodeSync::Reset calls
* masternode: Don't instantly reset the sync process
Give it MASTERNODE_SYNC_RESET_SECONDS (600) seconds time after the last
UpdateBlockTip call.
* rpc: Don't switch to next asset in "mnsync reset"
* rpc: Force the reset in "mnsync reset"
* net: Make sure the sync gets a reset if required after network changes
This will reset the sync process if its outdated in the following cases:
- If the connections dropped to zero
- If the connections went from zero to one
- If the network has been enabled or disabled
* Apply suggestions from code review
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* net: Only open masternode connections if the blockchain is synced
In general it doesn't make sense to connect to masternodes before due to
MNAUTH requires blockchain sync. This could lead to failing quorum
connections/failing masternode
probing.. if a just restarted node/a out of sync node
would hit a dkg block.. Then they would not try to open those
llmq/probing connections for the next 60s (nLLMQConnectionRetryTimeout).
Thats basically what happens in tests right now and they fail without
this commit.
* test: Make sure nodes are synced when they get restored after isolation
Their sync might be out of date otherwise due to bigger mocktime bumps
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* qt: Adjust green color
* qt: Don't disable the HD icon
Disabling it leads to incorrect colors due to opacity.
* qt: Move the HD icon to the left
Reason: Its the only one not turning green by default if all is set
properly. So this lets is look better imo.
* qt: Increase statusbar icon size
* qt: Show lock icon in status bar also if wallet is not encrypted
Just as signal to the user!
* qt: Refine connection icon usage
* qt: Use state related colors in statusbar
* qt: Hide the HD icon for non-HD wallets
* qt: Update HD icon
* qt: Replaced checkbox images with new ones
* qt: Replaced radiobutton images with new ones
* qt: Redefine arrow usage
- Removed "hover" arrows
- Rename normal -> light
- Rename pressed -> dark
- Use light as hover in dark theme and vice versa
* qt: Update icon set
* qt: Update sync spinner
* qt: Add new ThemedColor's
- ThemedColor::ORANGE
- ThemedColor::ICON_ALTERNATIVE_COLOR
* qt: Add GUIUtil::getIcon and GUIUtil::setIcon
* qt: Use themed icons where required
* qt: Make sure icons in SendCoinsEntry are updated on style changes
* qt: Make sure status bar icons are updated on style changes
* qt: Make sure icons in RPCConsole are updated on style changes
* qt: Remove icon/iconsSize in modaloverlaydialog.ui
* qt: Remove obsolete qproperty-iconSize entries from general.css
* qt: Use QToolButton's in SendVerifyMessageDialog and RPCConsole
Instead of QPushButton. This is to have the same alignment of the
iconized buttons by default like in SendCoinsEntry
* qt: Revert arrow icons
* qt: Revert HD icons
* Implement Block Reward Reallocation
* Add integr. test
* drop unused variable
* Sep -> Oct
* Update test/functional/feature_block_reward_reallocation.py
Co-authored-by: PastaPastaPasta <6443210+PastaPastaPasta@users.noreply.github.com>
* Revert to Sep for testnet and devnet
* validation: Refactor reallocation calculations
Makes it much more readable imo and avoids calculating the percentage
each time.
* test: Align reallocation calculation with c++ (GetMasternodePayment)
* test: Make feature_block_reward_allocation.py executable
* Make linter happy
Co-authored-by: PastaPastaPasta <6443210+PastaPastaPasta@users.noreply.github.com>
Co-authored-by: xdustinface <xdustinfacex@gmail.com>
* Always check for previous quorum set in llmq IS
* Refactor SelectQuorumForSigning and related code
Should have no changes in behaviour
* Do not use SIGN_HEIGHT_OFFSET when checking pending IS locks, use actual chain tip
This commit actually changes the behaviour
* makefile.test.include: Let privatesend_tests.cpp depend on ENABLE_WALLET
* test: Implement unit tests for CTransactionBuilder
* Check that we can decrease the amount and GetAmountLeft() is updated accordingly
* Check if resulting tx has a change output when expected
* Avoid pushing nullptr into vecOutputs
* Add few notes about size calculations
* nit: better readability (imo)
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* test: Implement unit tests for CWallet::CreateTransaction
* test: Reset minRelayTxFee in CreateTransactionTest
At this point its modified from an other test when running all unit
tests which lets this test fail unexpectedly.
* test: Lock cs_main/cs_wallet when required in CreateTransactionTest
* test: Add new test in CreateTransactionTest
Test if the wallet creation fails properly with the correct error
messages.
* test: Fixed expected test results for some CreateTransactionTest cases
* test: Fail if CreateTransaction runs into "Exceed max tries" case
* test: Adjust last return in CreateTransaction
* test: Drop dust tests
* wallet: Remove unused vecTxDSInTmp in CWallet::CreateTransaction
* wallet: Calculate fees earlier and respect them in change determination
* wallet: Cleanup obsolete code in CreateTransaction
This parts were needed before when the fee was calculated after the
change was assigned. But now with the previous commit the fee is
calculated upfront and respected properly from the begining. So there is
no longer a need of increasing or decreasing the change depending on the
fee as it has the correct value directly after its added.
* wallet: Try to pick other inputs if the selected ones are too small
If nChange is negative in this cases it means that the selected inputs
can't cover the amount to send and the required transaction fee. So we
just add the missing amount to nFeeRet. This leads to the algo
trying to pick larger inputs in the next loop (with nFeeRet more duffs
than in the previous loop). This process gets repeated until the selected
amount is enough to cover all the costs or until the requested amount
can't be selected anymore (not enough utxos to cover it).
* wallet: Break the loop if the transaction is ready
* wallet: Respect additional amount from previous cycles
* wallet: Respect available in coin selection, try all coins in last round
* wallet: Avoid potential infinite loop, just in case..
* wallet: Fix signing in CreateTransaction
Prior it was messed because of 60d96a1a28b55f071c6144f248e136679c44337e.
Set coins isn't sorted the same way as txNew.vin is so it sometimes may
pick wrong coins for signing the input.
* wallet: Fix change calculation if "subtract fee from amount" is enabled
* wallet: Return after fee calc if no or not enough amount available
Return the proper fail reason. Prior to this commit it run into
"Exceeded max tried".
Note: Only return if not enough amount is available if we can't subtract
fee from amount.
* wallet: Fix break logic if available amount is not enough
* Revert "wallet: Fix signing in CreateTransaction"
This reverts commit 5fcdc0f00e7b961ebb62c94d17d585537e911309.
* Use a vector of coins instead of a set in CreateTransaction and sort it in a BIP69 compliant way when needed
* wallet: Adjust comment
* Cleaner usage of nChangePosRequest/InOut
* Simplify some fail/try-again conditions (fixed)
* Loop through outputs to update change output position only when outputs are sorted for BIP69
No need to do this for non-bip69 cases (i.e. when a specific change output position was requested and assigned)
* Avoid implicit conversions of int-s into bool-s
* Move `nAmountLeft == nFeeRet` check higher, tweak comments
* wallet: Fix some formatting
* wallet: Improve CTxIn creation in CreateTransaction
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* wallet: Add m_dust_feerate to CCoinControl / Use it in CreateTransaction
* privatesend: Introduce CTransactionBuilder/CTransactionBuilderOutput
Builder classes for transactions from type
Inputs: Defined by CompactTallyItem
Outputs: Simple outputs with lose reserve keys
This takes fully takes care of fee calculations and makes sure calculations are the same like those happening when actually create the transaction with CreateTransaction.
* privatesend: Improve amount/fee calculation in CreateDenominated
* privatesend: Improve amount/fee calculation in MakeCollateralAmounts
* qt: Fix decomposeTransaction's MakeCollateralAmounts detection
Align it with the three cases in CPrivateSendClientSession::MakeCollateralAmounts
* Refactor GetFee
The fee rate is always coinControl.m_feerate, also it's not used outside so should be a private method
* Simplify nBytesOutput calculations
* Drop unused GetBytesOutput()
* Make Clear(), GetBytesTotal() and GetAmountUsed() private
* Drop unused GetCoinControl()
* Make ToString() const
* Refactor `CTransactionBuilder::Commit()`
* Reorder cases in decomposeTransaction
* Fix "finished" conditions in CreateDenominated
* Fix typo
* wallet|privatesend: Refactor CCoinControl's m_dust_feerate -> m_discard_feerate
* privatesend: Drop unused member CTransactionBuilder::dustFeeRate
* privatesend: Improve CTransactionBuilder's readability
* privatesend: Make the static CTransactionBuilder::GetAmountLeft private
* wallet: Recover previous code style
* Update src/privatesend/privatesend-util.cpp
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* Tweak CTransactionBuilder to respect potential compact size diffs
* Tweak GetFee param type
* Trivial log/comments tweaks
* privatesend: Fix countPossibleOutputs
- Fix off by one issue
- Respect max outputs threshold
* privatesend: Use GetSizeOfCompactSizeDiff in CTransactionBuilder
* Apply suggestions from code review
Co-authored-by: PastaPastaPasta <6443210+PastaPastaPasta@users.noreply.github.com>
* privatesend: Rename TryAdd to CouldAdd in CTransactionBuilder
* wallet: Reset m_discard_feerate in CCoinControl::SetNull
* Respect `-paytxfee` and `settxfee`
* privatesend: Check for denominated amount only where really required
* qt: Remove obsolete IsCollateralAmount() checks
* privatesend: Don't accept negative amounts in CTransactionBuilder
* privatesend: Remove unused CConnman parameter
* use emplace_back instead of push_back
Signed-off-by: pasta <pasta@dashboost.org>
* fix typos
Signed-off-by: pasta <pasta@dashboost.org>
* make GetAmount const
Signed-off-by: pasta <pasta@dashboost.org>
* privatesend: Explicit capture __func__ in needMoreOutputs lambda
* privatesend: Update CTransactionBuilder::UpdateAmount
* remove const on parameter in declaration
Signed-off-by: pasta <pasta@dashboost.org>
* handle unsigned int -> int conversions a bit better
Signed-off-by: pasta <pasta@dashboost.org>
* explicitly cast to int from unsigned int.
estimateSmartFee handles it if negative
Signed-off-by: pasta <pasta@dashboost.org>
* Make CTransactionBuilderOutput::GetScript const
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* privatesend: Update comments to follow doxygen
* privatesend: Add class descriptions
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
Co-authored-by: PastaPastaPasta <6443210+PastaPastaPasta@users.noreply.github.com>
Co-authored-by: pasta <pasta@dashboost.org>
* [QT] Add last block hash to debug ui
Trivial addition to display last block hash next to last block time
* [QT] Make last block hash selectable
... and linter happy
Switch QMetaObject to get last hash from pIndex instead of clientmodel
* [Trivial] Fix trailing whitespaces
* Harden Spork6
Spork6 was previously activated on testnet, but we then developed an alternative fix for the issue and never activated spork6 on mainnet. At this point, Spork6 will not be activated on mainnet.
As such, it makes sense to harden Spork6 and ensure that spork6 will never be activated on mainnet. So, we just change from checking Spork6 to checking if we are on testnet. If we are on testnet, use spork6 logic, else don't.
Signed-off-by: pasta <pasta@dashboost.org>
* remove now unused SPORK_6_NEW_SIGS
Signed-off-by: pasta <pasta@dashboost.org>
* force fSporkSixActive to be correct, otherwise return
Signed-off-by: pasta <pasta@dashboost.org>
* Harden spork6 even more
* Add TODO in chainparams as a reminder to drop all spork6 related code on next testnet reset
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* Use GetRealOut... instead of Capped
Signed-off-by: pasta <pasta@dashboost.org>
* Add "ps_salt" value to walletdb
This value is used to deterministically pick a random number of rounds to mix, between N and N + GetRandomRounds. A salt is needed in addition to the inputs hash to ensure that an attacker learns nothing from looking at the blockchain.
Signed-off-by: pasta <pasta@dashboost.org>
* Implement Random Round Mixing
This implements "Random Round Mixing." Previously, attempted attacks on PrivateSend assumed that all inputs had been mixed for the same number of rounds. Noramlly assuming 2,4,8 or 16.
While none of these attacks have been successful, they still teach what we can do to make our system more robust, and one of those ways is to implement "Random Round Mixing".
Under the previous system, inputs were mixed up until N rounds (configured by user). At this point, the input was considered mixed, and could be private-sent. Under this new system, an input will be mixed to N rounds like prior. However, at this point, Sha256d(input, salt) will be calculated (note: this likely could be a more efficient hash function than double sha256, but that can be done in another PR / version if needed). If (hash % 2 == 0), then the input will be mixed again.
This results in an exponential decay where if you mix a set of inputs, half of those inputs will be mixed for N rounds, 1/4 will be mixed N+1, 1/8 will be mixed N+2, etc. This current implementation caps it at N+2. This results in mixing an average of N+0.875 rounds. If you removed the cap, you would mix on average N+1 rounds.
Signed-off-by: pasta <pasta@dashboost.org>
* Make PS salt a private member of CWallet, tweak the way it's initialized
* Introduce `CWallet::IsFullyMixed` and use it everywhere instead of comparing rounds directly to ensure consistency between coin selection logic, balance calculations and gui
* Tweak `GetRealOutpointPrivateSendRounds` to respect random rounds
* Tweak IsFullyMixed to make decision on a per-outpoint basis instead of a per-tx one
* make a comment doxygen
Signed-off-by: pasta <pasta@dashboost.org>
* Rename GetPrivateSendSalt InitPrivateSendSalt, since it is not a getter
Signed-off-by: pasta <pasta@dashboost.org>
* move the comment below GetRounds call
Signed-off-by: pasta <pasta@dashboost.org>
* don't use GetCappedOutpointPrivateSendRounds when printing to RPC
Signed-off-by: pasta <pasta@dashboost.org>
* Simplify hashing in IsFullyMixed
Uses just 1 sha256 instead of 3 (1 in SerializeHash + 2 in Hash)
* undo comment change
Signed-off-by: pasta <pasta@dashboost.org>
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* test: Fix importwallet_rescan test
The wallet should be removed after the dumpwallet() call otherwise it
may lead to unepexted behaviour in other wallet tests since the wallet
stays in vpwallets then.
* tests: Change where RemoveWallet call is to be more in line with upstream
Signed-off-by: pasta <pasta@dashboost.org>
Co-authored-by: pasta <pasta@dashboost.org>
* Print exception origin in crash messages
We use `PrintExceptionContinue` in many places and we pass crash origin to it as a param but we never use it. Also, change the param name to better match its meaning.
* Update src/util.cpp
Co-authored-by: dustinface <35775977+xdustinface@users.noreply.github.com>
Co-authored-by: dustinface <35775977+xdustinface@users.noreply.github.com>
It seems like the idea here was to avoid announcing already available sigshares for a signhash to everyone if concentrated recovery is enabled. But by returning there if `IsAllMembersConnectedEnabled` equals to `false` we disable the re-announcements prior to the spork activation, where we want to still have them and re-enable if the spork is enabled where we don't want to have them.
* Mostly trivial clang-tidy changes in masternode
Signed-off-by: pasta <pasta@dashboost.org>
* uint -> size_t
Signed-off-by: pasta <pasta@dashboost.org>
* Make GetSyncStatus const not static and ProcessMessage const
Signed-off-by: pasta <pasta@dashboost.org>
* Adjust CDeterministicMNState, add helper methods
Changes all setting of `nPoSeBanHeight` into a call to `BanIfNotBanned`
Adds a helper method `IsBanned` that just is `return nPoSeBanHeight != -1`
In my opinion this makes the code generally more readable and easy to understand
Adds `Revive` helper method
I don't feel too strongly about this, because from what I have seen, this revive code is only done in one place,
but I generally think it makes sense to be a helper method of it's own
Signed-off-by: pasta <pasta@dashboost.org>
* Add `!` that was accidentally not added
Signed-off-by: pasta <pasta@dashboost.org>
* Make nPoSeBanHeight private
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
Prior to this commit there are (imo) flaws in the behaviour of the PrivateSend tab.
- If you enter an address, label, add a recipient, do whatever in the normal Send tab its also reflected in
the PrivateSend tab
- If you select fully mixed coins in the Send tab's CoinControl they are also selected
in the PrivateSend tab if you switch over.
- If you select non-fully mixed coins in the Send tab's CoinControl you
get a warning when switching over to PrivateSend tab due to non-fully
mixed coins selected in CoinControl.
With giving the private send tab separate instances of `SendCoinsDialog` and `CCoinControl` they are independent
from each other which just makes more sense imo and by doing this the points above are solved.
I would say this just better reflects the actual behaviour of a tab.
4b75dcf devtools: Make linter check LogPrint calls (MarcoFalke)
ff2ad2d Add missing newlines to LogPrint debug logging (Wladimir J. van der Laan)
Pull request description:
~~Don't we have a linter that should catch these?~~
Tree-SHA512: 1a58eca01ded9c1719e943c09447deeb59bb06dba00528cf460eefe857fdf95b42671fbdebc87cdd2f51e931e86942d06587ffd097cbb0d8dd9eb7a0ba17a8f0
47776a958b08382d76d69b5df7beed807af168b3 Add linter: Make sure all shell scripts opt out of locale dependence using "export LC_ALL=C" (practicalswift)
3352da8da1243c03fc83ba678d2f5d193bd5a0c2 Add "export LC_ALL=C" to all shell scripts (practicalswift)
Pull request description:
~~Make sure `LC_ALL=C` is set when using `grep` range expressions.~~
Make sure `LC_ALL=C` is set in all shell scripts.
From the `grep(1)` documentation:
> Within a bracket expression, a range expression consists of two characters separated by a hyphen. It matches any single character that sorts between the two characters, inclusive, using the locale's collating sequence and character set. For example, in the default C locale, `[a-d]` is equivalent to `[abcd]`. Many locales sort characters in dictionary order, and in these locales `[a-d]` is typically not equivalent to `[abcd]`; it might be equivalent to `[aBbCcDd]`, for example. To obtain the traditional interpretation of bracket expressions, you can use the C locale by setting the `LC_ALL` environment variable to the value C.
Context: [Locale issue found when reviewing #13450](https://github.com/bitcoin/bitcoin/pull/13450/files#r194877736)
Tree-SHA512: fd74d2612998f9b49ef9be24410e505d8c842716f84d085157fc7f9799d40e8a7b4969de783afcf99b7fae4f91bbb4559651f7dd6578a6a081a50bdea29f0909
7bf22bf0c21d13557ec46a67413819ebcabc3df0 gui: Reject options dialog when key escape is pressed (João Barbosa)
4a43306a4f643cf0d356d5d5e16913541f1bc893 gui: Reject edit address dialog when key escape is pressed (João Barbosa)
f7a553177d4b969956bc04a0140fce34958971f5 gui: Add GUIUtil::ItemDelegate with keyEscapePressed signal (João Barbosa)
Pull request description:
Currently `EditAddressDialog` and `OptionsDialog` don't close when the escape key is pressed. The `QDataWidgetMapper` instances prevents closing the dialogs because the escape key is used to reset the widgets values. More details and workarounds in https://stackoverflow.com/a/51487847 and http://qtramblings.blogspot.com/2010/10/qdatawidgetmapper-annoyances.html.
The adopted solution is different from the above references. It turns out that `QDataWidgetMapper::setItemDelegate` sets the event filter for all mapped widgets. So in this PR the mapper's delegate are changed to a custom `GUIUtil::ItemDelegate` that offers the signal `keyEscapePressed`, which is connected to the `QDialog::reject` slot.
Note that the installed event filter lets all events pass, so the current behaviour isn't changed, meaning that widgets values are reset in addition to closing the dialog.
Tree-SHA512: 9c961d488480b4ccc3880a11a8f1824b65f77570ee8918c7302c62775a1a73e52ae988a31a55ffff87b4170ddbecf833c2f09b66095c00eb6854a4d43f030f1f
46340b3337 [bench] Add benchmark for unserialize prevector (Akio Nakamura)
Pull request description:
This PR adds benchmarks for the unserialization of the prevector.
Note: Separated from #12324.
Tree-SHA512: c055a283328cc2634c01eb60f26604a8665939bbf77d367b6ba6b4e01e77d4511fab69cc3ddb1e62969adb3c48752ed870f45ceba153eee192302601341e18a7
0454b56d8a trivial: remove unneeded include (Nikolay Mitev)
Pull request description:
Remove dead include
Tree-SHA512: 66380fe25259d37a19f955142ad53da24d4927064a84249989f54bebc21d9d688236fb60979acc79f219b05692c4c73b3ebab0872b8d03ab2447b0b44a06c8ed
01a06d6686 Avoid locking mutexes that are already held by the same thread (practicalswift)
Pull request description:
Avoid locking mutexes that are already held by the same thread. These are reentrant mutexes, but still no need to lock them more than once per thread :-)
Tree-SHA512: e2fb85882e8800892fd8e8170f3c13128d6acfeb14d7b69fb9555f2b7ad0884fb201cf945b8144ffaf6fb1253c28af7c8c6c435319a7ae30ca003f28aa645a98
6755569840 trivial: Replace CPubKey::operator[] with CPubKey::vch where possible (Nikolay Mitev)
Pull request description:
Use variable name instead of calling operator[] through &(*this)[0]
Tree-SHA512: 7054ffda0fa33fb45d4d9f3b29698643f02fd1421d78d5197a0881f2c368dc410647fd2e1a6feb8048e30f8ab8bc2fa8749bf42b9ccbe42c30de8ff80ac45274
* Update rpcevo.cpp
I would like to mirror docs.dash.org/en/stable/masternodes/maintenance.html#proupservtx by adding the specific term "BLS" to the rpc help menu to differentiate this is not a dash address key like the other ownerkey votingkey. We had this changed on the docs site to help clarify for people who were missing the point this was the operator BLS key.
* Update rpcevo.cpp
* qt: Splashscreen redesign
- Make it theme related dark or light
- Fixes bluriness issues
- Fixes issues with overlapping init messages at the bottom of the
splashscreen
- Give it a cleaner look -> Removed copyrights and prefix `Version v` of the version string
* Do not rotate colors of the splash image
* Adjust logo color based on the current theme for all networks
* Draw network-specific text as a "badge" with a network-specific color
* Introduce `NetworkStyle::rotateColor()` helper
* Introduce badge color in NetworkStyle and use it in SplashScreen's ctor
Replaces the getTrayAndWindowIcon hack
* refactor loops
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* init: Fix `-litemode` crash due to not connected CClientUIInterface signal
Prior to this commit the signal
`CClientUIInterface::ThreadSafeMessageBox` is not connected to a slot in
Qt at the time its emitted when `-litemode` is used. The signal gets
emitted from `InitWarning`, in `InitParameterInteraction`. This happens
currently before `BitcoinGUI` gets created by
`app.createWindow(networkStyle.data())` in `dash.cpp` where the
signal becomes connected to the slot. After this commit the litemode
`InitWarning` will be called in `AppInitParameterInteraction` which runs
after `BitcoinGUI` has been created, means the signal will be connected
then at that point and the crash is fixed.
* init: Improve -litemode deprecation warning
- Always show a basic warning if `-litemode` gets used no matter if its
activated or not.
- Let the user know when -disablegovernance gets forced by -litemode.
This reverses force logic of `GUIUtil::loadTheme` to not force by default and instead forces it explicit in appearance widgets call.
Due to `fForce` beeing default the ui debug timer wasn't started properly because there was no call of `GUIUtil::loadStylesheet` without `fForce=true` which is a requirement to start the debug timer.
* qt: Add more placeholder in ReceiveCoinsDialog
* qt: Add placeholder for filter line edit in MasternodeList
* qt: Add more placerholder in SignVerifyMessageDialog
* qt: Removes a dot
* qt: Adjust placeholder phrasing in ReceiveCoinsDialog
* Apply suggestions from code review
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* qt: Align wording of placeholders with the corresponding tooltip
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
5f019d5354 Removes the boost/algorithm/string/join dependency (251)
Pull request description:
This commit removes the `boost/algorithm/string/join` dependency from the project by replacing `boost::algorithm::join` with the helper function proposed by @MarcoFalke in https://github.com/bitcoin/bitcoin/pull/13726#discussion_r204159967
Tree-SHA512: d4ba3e7621b76bd5210aec9b8d6c320f7ee963d7f902e6d2d3fc0eadbee1cd77799e5c09be9c11452d2825f25740fc436cdec3a6b6c66ced674d771e4ed306ae
Signed-off-by: pasta <pasta@dashboost.org>
# Conflicts:
# contrib/devtools/lint-includes.sh
# src/validation.cpp
2c71edc2fc [wallet] [rpc] Fix importaddress help text (John Newbery)
Pull request description:
Help text for `importaddress` referred to the first parameter as `script`, when in fact it's `address`. Calling with a script argument fails:
```
→ bcli -named importaddress script=2N3qhMpHK8WNo7wv87W9eHMgvGyJU1593Ei
error code: -8
error message:
Unknown named parameter script
→ bcli -named importaddress address=2N3qhMpHK8WNo7wv87W9eHMgvGyJU1593Ei
# success!
```
Tree-SHA512: 24dcb2cbd0a43e25896b1c67fa0386df2453ec04d49a339e10992417b3921ce3df8a6aa5abba7d2237d6188b018948b2a21ea2f04d37120ad36c31c7b7fc9f1c
cd3f4aa80810fc077c7f9528a4ef53c1438c86e1 Decouple wallet version from client version (Andrew Chow)
Pull request description:
Instead of comparing version numbers in the wallet to the client version number, compare them to the latest supported wallet version in the client. This allows for wallet version numbers to be unrelated to the client version number.
Tree-SHA512: 69c3e1f45a40bde01d622d504a803fea32fc14e2e27b14b0729725349d8592d56ebca26fd06f117fd6f5164fb4ce980122751b6370f6e25f1a947dbdf4143ddd
33539cb34b Extract MakeUnique into utilmemory.h (Ben Woosley)
Pull request description:
And use it to reduce chainparamsbase.cpp's and remove interfaces/handler.cpp's reliance on util.h
This is a step toward fixing the chainparamsbase -> util circular dependency.
Confirmed no need for the util.h include via iwyu and visual inspection.
Extracted from #13639 for easier review.
Tree-SHA512: 61cbf9eafb68c3e3706d21c70aeb0586a85364dad32cc49c2d40e963ac3b2c44424ad1522788a0a6b2a689fd9294ebce4482a392ceb88a94eabe09a84f070ce4
Commit 3fdb297 renamed share/rpcuser to share/rpcauth but left references to the old path in code; this commit fixes the old references.
Performed update using https://github.com/facebook/codemod with command: `codemod --extensions cpp,py,md 'share/rpcuser' 'share/rpcauth'`
-BEGIN VERIFY SCRIPT-
git grep --files-with-matches 'share/rpcuser' src/*.cpp | xargs sed -i -E 's:share/rpcuser:share/rpcauth:g'
git grep --files-with-matches 'share/rpcuser' test/functional/*.py | xargs sed -i -E 's:share/rpcuser:share/rpcauth:g'
-END VERIFY SCRIPT-
Signed-off-by: pasta <pasta@dashboost.org>
ac51a26bdc During IBD, when doing pruning, prune 10% extra to avoid pruning again soon after (Luke Dashjr)
Pull request description:
Pruning forces a chainstate flush, which can defeat the dbcache and harm performance significantly.
Alternative to #11359
Tree-SHA512: 631e4e8f94f5699e98a2eff07204aa2b3b2325b2d92e8236b8c8d6a6730737a346e0ad86024e705f5a665b25e873ab0970ce7396740328a437c060f99e9ba4d9
f8c249ab91 Assert CPubKey::ValidLength to the pubkey's header-relevent size (Ben Woosley)
Pull request description:
A pubkey's length is specific to its type which is indicated by its header value. GetLen returns the header-indicated length, so this change ensures that a key matches its header-indicated length.
And replace some magic values with their constant equivalents.
Tree-SHA512: b727b39a631babe0932326396fc4d796ade8ec1e37454ff0c709ae9b78ecbd0cfdf59d84089ba8415e6efa7bc180e3cd39a14ddaf0871cbac54b96851e1b7b44
* qt: Add PlatformStyle::Icon + only show icons on menu if enabled
Now icons are disabled everywhere if imagesOnButtons is disabled. There were still buttons on each menu item.
* qt: Disable all PlatformStyle related changes
* qt: Drop PlatformStyle
* qt: Add platform specific css style for scrollbars
This disabled scrollbars.css loading and adds a "windows,other" section in general.css, dark.css and light.css where it adds customizations for scrollbars in each theme.
* qt: Remove scrollbar.css and all its remaining mentions
* qt: Run update-css-files.py
* qt: Add "Appearance Tab" to OptionsDialog and move "Theme" into it
* qt: Add "Font scale" settings to Appearance Tab of OptionsDialog
Allows to scale the font in the same way like with -font-scale.
* qt: Add font weight settings to Appearance tab of OptionsDialog
Allows to set the weight for normal and bold text
* qt: Add font family setting to Appearance tab of OptionsDialog
Allows to choose between system default font or montserrat
* qt: GUIUtil - Maintain a map with supported weights for all fonts.
* qt: Introduce AppearanceWidget
A widget which just wraps all appearance related settings.
Also replaces Appearance settings in OptionsDialog with the introduced widget.
* qt: Introduce initial appearance setup dialog
This will pop up the first time the user starts the DashCore version with the new UI changes.
* qt: Load font related settings in GUIUtil::loadFonts
* qt: Make osDefaultFont global in GUIUtil to fix getFont()
Before getFont(FontFamily, ...) wasn't always able to return the correct font without the requested font family beeing set as application font upfront.
* qt: Improve supported weight helpers
Add conversion helpers. and let all of them depend on the currently selected font.
* qt: Default weights based on supported if not all weights are supported
For SystemDefault only because Montserrat has all supported weights.
* qt/test: Fix GUI tests
* Store normal/bold font GUI settings as "pure" (not "supported") values
* Rename supportedWeighti(To/From)Arg to supportedWeight(To/From)Index to better match the logic and avoid confusion with weight(To/From)Arg functions
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
12ad33a [doc] qt: fixes broken link on readme (marcoagner)
Pull request description:
I was reading qt files and just fixed a trivial mistake on its readme file.
"#use-qt-Creator-as IDE" should be "#using-qt-creator-as-ide"
Tree-SHA512: b2610821370dd7cac86725750ce7fd7a9e414c175e525f2e53e87302363c2a4a86206e0f9ce1d02657c751c395a33f0505953a94fd8124ea1943e39bb0711777
18326ae [doc] Add comments for chainparams.h, validation.cpp (James O'Beirne)
Pull request description:
Added a few comments during a leisurely read through some of the validation code. If this kind of thing seems useful, I can add similar documentation for most of the `CChainState` interface.
Tree-SHA512: a4d9db60383a8ff02e74ac326ed88902eec1ee441e8cd4e1845bcf257072673c15974225288cebf0a633e76a3410f99e2206616b4694725a2a5b0d19c78327d6
0ef7b40 [doc] Fix comment in FindForkInGlobalIndex (James O'Beirne)
Pull request description:
The comment erroneously implies that we're searching `chainActive` for the
first block common to `locator`, but we're using the parameter `chain`.
Tree-SHA512: 42ba0fb378597820bdf1eaff1e3e284097baa312e7dd8448421c8c71aa91c353ea6c840860afcb7725f392431f3134d4feb271b96ab7058a62f84f48e468e714
c198dc00e1 [Doc] Clarify the meaning of fee delta not being a fee rate in prioritisetransaction RPC (Jan Čapek)
Pull request description:
Hi,
I have faced some confusion among our developers considering this being a fee rate. Would you consider including this tiny doc update?
Best regards,
Jan Capek
Tree-SHA512: cd0560540418e53c5c19ceab2d5aca229f4ef6b788b9543695742522e1c63a7f2cce2574b47fead098a106da2f77e297f0c728474565f6259b50d62369bbe7da
4e05687153 [wallet] [rpc] [doc] importprivkey: hint about importmulti (Karl-Johan Alm)
Pull request description:
From #12701, a hint about `importmulti` inside the help for `importprivkey` seems useful.
Tree-SHA512: 09ddfd384062b4365f678167076cb9f5af1eb8f083714a20c2a9bb14fef1c886d1666196272bf09862537166d15ae89c3330cdc6836eee76cb54d137e53301df
Showing it instantly may lead to the selector showing up in an unexpected place because it only gets added to a proper layout when a second wallet gets added.
- Makes it singleton to make sure we always only have one instance of it
- Protects its members by making them private and adding set/getters
- Makes it thread safe
With the introduction of better mutliwallet support, privatesend only worked for your first wallet. This commit implements multiwallet for privatesend such that the wallet you start the mixing from is the wallet mixing will occur in.
Signed-off-by: pasta <pasta@dashboost.org>
779c5f984 Qt: hide RPCConsole wallet selector when no wallets are present (Jonas Schnelli)
dc6f150f3 Qt: show wallet name in request dlg in case of multiwallet (Jonas Schnelli)
4826ca4b8 Qt: show wallet name in send confirmation dlg in case of multiwallet (Jonas Schnelli)
cfa4133ce GUI: RPCConsole: Log wallet changes (Luke Dashjr)
b6d04fc7c Qt: Get wallet name from WalletModel rather than passing it around (Luke Dashjr)
12d8d2681 Qt: When multiple wallets are used, include in notifications the name (Jonas Schnelli)
d1ec34a76 Qt: QComboBox::setVisible doesn't work in toolbars, so defer adding it at all until needed (Luke Dashjr)
d49cc70e6 Qt: Add wallet selector to debug console (Jonas Schnelli)
d558f44c5 Bugfix: RPC: Add missing UnregisterHTTPHandler for /wallet/ (Luke Dashjr)
85d531971 Qt: Ensure UI updates only come from the currently selected walletView (Luke Dashjr)
e449f9a9e Qt: Add a combobox to toolbar to select from multiple wallets (Luke Dashjr)
3dba3c3ac Qt: Load all wallets into WalletModels (Luke Dashjr)
Pull request description:
This is an overhaul of #11383 (plus some additions).
It avoids unnecessary coupling of httpserver/jsonrpc and the wallet as well as it avoids pointer pure passing (and pointer deletion) of `CWallet` (plus other minor design changes).
Additionally it adds the wallet name to the sendconfirmation and request dialog (in case multiwallet is active)
Tree-SHA512: 3d06e18badbc5d1821e488bf1dae463bb0be544cf11b2b618e025812bfdd13c5f39604bb93b4c705313930e7dc4e66f4848b9469ba14871bade58e7a027246a1
* Merge #11517: Tests: Improve benchmark precision
760af84 Removed CCheckQueueSpeed benchmark (Martin Ankerl)
00721e6 Improved microbenchmarking with multiple features. (Martin Ankerl)
Pull request description:
The benchmark's KeepRunning() used to make a function call for each call, inflating measurement times for short running code. This change inlines the critical code that is executed each run and moves the slow timer updates into a new function.
This change increases the average runtime for Trig from 0.000000082339208 sec to 0.000000080948591.
Tree-SHA512: 36b3bc55fc9b1d4cbf526b7103af6af18e9783e6b8f3ad3adbd09fac0bf9401cfefad58fd1e6fa2615d3c4e677998f912f3323d61d7b00b1c660d581c257d577
Signed-off-by: pasta <pasta@dashboost.org>
# Conflicts:
# src/bench/bench.cpp
# src/bench/bench_dash.cpp
# src/bench/crypto_hash.cpp
# src/bench/prevector_destructor.cpp
# src/bench/verify_script.cpp
* More of 11517
Co-authored-by: Wladimir J. van der Laan <laanwj@gmail.com>
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* qt: Draw a border around net traffic graph
* qt: ReceiveRequestDialog - Improve QR code image
- Fix issue with bluriness
- Refine sizing/layout of QR code and address
- Adjust coloring to match the themes
* qt: Give the TransactionView's instantsendWidget a name
Required to access it in css
* qt: Rename conflicting label in SendCoinsDialog
- Was named the same as the the label in EditAddressDialog so it couldn't be accessed properly in css
* qt: Give the TransactionView's search field the first focus on startup
* qt: Some updates to the PrivateSend widget on the OverviewPage
- Hide denom labels if inactive
- Enable wordwrap for denom label
- Add some spacer
- Make sure it gets its basic initialization on startup
* qt: Fix some layout issues in SendCoinsDialog's UI file.
- Added some margins for fee selection radio buttons to align them centered to their options
- Removed a weird placed spacer
* qt: Fix vertical alignment of the two balance labels in SendCoinsDialog
* qt: Add newline in textedit of receiverequest
* qt: OptionsDialog - Hide override hint if there is nothing overridden
* qt: Allow stylesheet modifications for auto completition popup
- Inheritance doesn't work here obviously because of QCompleter is parent of the popup
- QStyledItemDelegate delegate is required. Without its not possible to access `::item` selectors from css.
* qt: Make the progress label in the status bar accessible in css
* qt: Update weekend colors of QCalendarWidget on style changes
Its obviously not possible to do this in stylesheets thats why i added
this as workaround.
* qt: Load stylesheets for Intro
This is the datadir selection dialog.
* Drop labelPrivateSendLastMessage
* Add a space
Co-authored-by: PastaPastaPasta <6443210+PastaPastaPasta@users.noreply.github.com>
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
Co-authored-by: PastaPastaPasta <6443210+PastaPastaPasta@users.noreply.github.com>
* qt: Add platform specific css loading to GUIUtil::loadStyleSheet
This commit leads to GUIUtil::loadStyleSheet treating css code between
<os="<os_list>"> and </os> different. It will only become added for
operating systems provided in the list of the sections start tag.
There may be multiple entries per section. Possible entries:
- macosx
- windows
- other
<os_list> must be a combination of the three options above separated by
comma like in "windows,macosx".
Its ok to have multiple <os="...">...</os> sections in a file with
arbitrary OS combinations. They will all become added to the end of the
file though. Means even putting an <os> section in the top of the file
would become appended to the end of the file during loading which should
be kept in mind when adding sections to avoid unexpected overwriting.
Example
------------------------------------------------------------------------
<os="macosx, windows, other">
/* Example section to add styles for all operating systems
Remove any to exclude it.
*/
</os>
* Respect `-uiplatform` when matching for os-specific styles
* Format osStyleExp to make it a bit easier to see groups
Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
* qt: Remove min-width of BitcoinAmountField in ReceiveCoinsDialog
* qt: Add BitcoinUnits::data(const int &row, int role)
Make its data also accessible int, not only by QModelIndex.
* qt: Adjust BitcoinAmountField
- AmountSpinBox (QAbstractBox) is now called AmountLineEdit (QLineEdit)
- Replaced the AmountSpinBox and the QValueComboBox with just an AmountLineEdit
- Adjusted min-size hint calculation
- Increased maximum width
- Right-Align text
- Removed obsolete code
* qt: Removed leftover from legacy BitcoinAmountField
* qt: Move amount field into a Hlayout with a spacer (ReveiveCoinsDialog)
Make sure it does not get stretched above the in AmountLineEdit::minimumSizeHint() calculated size.
* qt: Removed obsolete workaround related to BitcoinAmountField
Its fixed now with the change to a normal line edit.
* qt: Set the default theme properly
* qt: Keep track of disabled rects for macOS
This allows enabling them again on theme changes
* qt: Introduce runtime theme changes
Runtime theme changes means no more client restart required if the
theme gets changed in the options dialog.
In the RPCConsole's StyleChange event make sure following things are still correct after a runtime theme change:
- Hide prompt icon for dash themes in rpc console if dash theme gets
activated.
- Clear rpc console on theme changes to make sure fonts/sizes/colors are correct.