Releases: decred/dcrwallet
v2.0.5
dcrwallet v2.0.5
This release includes fixes to increase the mixing reliability and improves startup syncing when operating in in SPV mode.
All mixing users should upgrade to this release to maintain the maximum anonymity set.
Bug fixes
-
When secrets are revealed in a mix, blame assignment is delayed until all expected messages for the current stage of the run have been received (decred/dcrd#3454).
-
A rare crash that could occur calculating mixing message jitter was fixed (decred/dcrd#3448).
-
A started but killed
csppsolver
child process is now detected. If this occurs, wallets will fall back to depending on other peers' published root solutions and will stop advertising root solving capabilities to other peers (decred/dcrd#3451). -
A missing check that published roots in the mixing protocol are in the proper order was added (decred/dcrd#3453).
-
When mixed tickets are purchased using the
purchasetickets
JSON-RPC method, the mix change is returned to the configured change account (b22f59b3
). -
When mixing is disabled and no other voting account has been specified, voting addresses are derived from the purchasing account rather than the unset voting account (
bf73f3c2
). -
The
mixaccount
JSON-RPC method, which was unusable since the introduction of P2P mixing, was fixed (cb88e4f0
). -
The
--ticketsplitaccount
option, used when converting an unmixed ticketbuyer gradually over to a mixing buyer, was not being used since the introduction of P2P mixing (e45749aa
). -
The voting account, a required argument during mixed ticketbuying, is now always used when mixing is enabled, even when
UseVotingAccount
in a ticket purchasing request is not set true (c1b1ac0b
). -
A hang occuring at the end of initial SPV sync has been fixed (
7def7850
).
Other Improvements
-
Peers who send too few headers, which could slow down initial sync time, are disconnected (
59a40408
). -
Peers who send headers before being requested are disconnected earlier in the sync process (
58585aa5
). -
Peers who send headers that do not connect to the block locators are disconnected earlier in the sync process (
fdd9e0b2
). -
An error determining the block to rescan from is no longer a permanent ticket autobuyer failure (
8c660622
). -
Background mixing client operations are more reliably stopped when
dcrd
is disconnected in RPC sync mode (01f1e12e
). -
Compatibility with older VSP software has been improved (
3bbc7781
).
Changelog
The following lists all commits since dcrwallet v2.0.4:
563b6779
: [release-v2.0] version: Update for v2.0.55a0c93f7
: [release-v2.0] Update to latest mixing module7def7850
: [release-v2.0] spv: Accept cfilters from more peers.3bbc7781
: [release-v2.0] multi: Send empty VSP policy fields01f1e12e
: [release-v2.0] Add context wrapping for syncer disconnections45d78411
: [release-v2.0] rescan: add missing db update error checkc1b1ac0b
: [release-v2.0] Always use configured voting account when mixinge45749aa
: [release-v2.0] Use correct account for mixed ticket split txns.8c660622
: [release-v2.0] ticketbuyer: Dont terminate if RescanPoint fails.cb88e4f0
: [release-v2.0] jsonrpc: Allow mixaccount RPC to actually mix.bf73f3c2
: [release-v2.0] wallet: Use purchase acct for voting if not mixingb22f59b3
: [release-v2.0] jsonrpc: Use correct change account when mixing.fdd9e0b2
: [release-v2.0] p2p: Move check for getheaders locators earlier in the call58585aa5
: [release-v2.0] p2p: Move headers requested check earlier in the call59a40408
: [release-v2.0] p2p: Disconnect from peers that sent too few headers
Code Contributors (alphabetical order):
- David Hill (@dajohi)
- Matheus Degiovani (@matheusd)
- Jamie Holdstock (@jholdstock)
- @JoeGruffins
- Josh Rickmar (@jrick)
v2.0.4
dcrwallet v2.0.4
This release includes improvements to the mixing session agreement, along with various bug fixes and minor performance improvements.
Bug Fixes
-
An issue where SPV wallets would stall block processing the latest block and only resume requesting additional new blocks after the next block is announced was fixed (
39fd48b8
). -
A potential crash in the VSP client was removed (
2c7e4dcf
). -
A deadlock in the mixing client that could trigger after reconnecting to a restarted dcrd was fixed (dcrd/3401).
-
Automatic RPC TLS certificate generation no longer errors when the local hostname contains non-ASCII Unicode characters (dcrd#3432).
Other Improvements
-
Mix session agreement was improved by ignoring key exchange messages received too early before the calculated epoch time (dcrd/3403).
-
Mix session agreement was improved by only considering a mixing identity's most recent key exchange messages (dcrd/3404).
Changelog
The following lists all commits since dcrwallet v2.0.3:
650a7c01
: [release-v2.0] version: Update for v2.0.49074d7fd
: [release-v2.0] Update to latest dcrd modules09ec255d
: [release-v2.0] Update to latest vspd modules.ec74c62a
: [release-v2.0] wallet: Remove unused ctx from makeTicketSummary.2c7e4dcf
: [release-v2.0] vsp: Prevent nil pointer dereference.dcde8979
: [release-v2.0] Update to latest mixing module39fd48b8
: [release-v2.0] spv: Fix request of new blocks after initial sync
Code Contributors (alphabetical order):
- Matheus Degiovani (@matheusd)
- Jamie Holdstock (@jholdstock)
- Josh Rickmar (@jrick)
v2.0.3
dcrwallet v2.0.3
This release includes several important privacy and performance improvements for mixing users. All 2.0.2 users are advised to upgrade.
Bug Fixes
- Ending the initial wallet setup prompts before the birthday prompt has been completed will no longer panic the wallet (
37e81f87
).
Other Improvements
-
The mixing client was modified to space out the publishing of pair request messages throughout the entire duration up until 30s before and after the epoch, and to add a small random delay before the broadcast of all messages. Together these changes reduce the ability to deanonymize which messages belong to the same wallets depending on when they were seen or received (dcrd/3388).
-
In SPV mode, a uniform random 100-500ms of per-peer delay is added to each inventory broadcast. This also has the effect of batching recent inventory into fewer
inv
messages (fee60562
). -
In SPV mode, a minimum of 3 (out of 8 total) full node peers which implement the mix message broadcasting protocol version will be targeted. If too many connected peers do not support this protocol version, they will be disconnected for other peers which do (
7830dd64
).
Changelog
The following lists all commits since dcrwallet v2.0.2:
e176480e
: [release-v2.0] version: Update for v2.0.342318906
: [release-v2.0] Update to latest dcrd modules37e81f87
: [release-v2.0] walletsetup: Return birthday prompt error.7830dd64
: [release-v2.0] Attempt cxns to >=3 mixing-capable peersfee60562
: [release-v2.0] Add 100-500ms of per-peer inventory delay434d7f94
: [release-v2.0] Use rand.ShuffleSliceb0e19ee5
: [release-v2.0] Replace additional rand funcs477f1888
: [release-v2.0] Replace hand rolled shuffle with rand.Shufflefdcde4c3
: [release-v2.0] Use dcrd's crypto/rand module
Code Contributors (alphabetical order):
- @JoeGruffins
- Josh Rickmar (@jrick)
v2.0.2
dcrwallet v2.0.2
This release includes several important bug fixes for mixing users. All 2.0.1 users are advised to ugrade.
Bug Fixes
-
The mixing client will no longer attempt to create mixes that, when signed, exceed the standardness rules set by dcrd mempool (dcrd/3338).
-
A change was made to how reruns are handled after blame is assigned. Rather than incrementing the run, a new session is formed. This reduces unexpected behavior by requiring the stricter message acceptance checks that were only performed during run-0 (dcrd/3343).
Other improvements
-
Peers who send mix messages when disablerelaytx is enabled (this includes dcrd version 2.0.0, but not 2.0.1 or 2.0.2) will be temporarily banned (
48c59f55
). -
Debug logging of mixing activity has been improved through changes in both the mixpool and mixclient packages (dcrd/3326, dcrd/3331, dcrd/3333, dcrd/3339, dcrd/3340).
Changelog
The following lists all commits since dcrwallet v2.0.1:
660e2f60
: [release-v2.0] version: Update for v2.0.2609e1b49
: [release-v2.0] Update to latest mixing module48c59f55
: [release-v2.0] p2p: Ban peer with mix inv when disablerelaytx is active
Code Contributors (alphabetical order):
v2.0.1
dcrwallet v2.0.1
This release includes several important bug fixes for mixing users. All 2.0.0 users are advised to ugrade.
Bug Fixes
-
A panic that could be caused from a reconnecting RPC link to
dcrd
when mixing is enabled was fixed (9a954c35
). -
The initial mixing pair request sync in RPC syncing mode has been changed to operate more similarly to how it is done in SPV mode, by watching at least a full epoch for peers sending key exchange messages, and fetching their pair requests (only) when they are not known. This is a better solution than using the
getmixpairrequests
JSON-RPC method, which would return all unremoved pair requests known todcrd
, including stale ones (d5d5ef76
). -
An issue where change addresses derived for inclusion in mixing pair requests were not properly persisted to the database was fixed (
f977db4e
). -
This release includes a newer version of the mixpool and mixclient packages from dcrd's mixing module. Among other improvements, this fixes an issue where pair requests were being improperly removed from the wallet's mixpool during some sessions that did not run to completion.
Other improvements
-
An error log was added to record the failed transaction send of any mixed coinjoin transaction (
8b47dedb
). -
The VSP client package has been made available as a non-internal package (
9df1e498
).
Changelog
The following lists all commits since dcrwallet v2.0.0:
3b46b151
: [release-v2.0] version: Update for v2.0.1e0829f0e
: [release-v2.0] Update to latest dcrd modules8b47dedb
: [release-v2.0] Log any errors publishing mix transactionsf977db4e
: [release-v2.0] Record derived mixing change addressesd5d5ef76
: [release-v2.0] chain: Fetch unknown PRs of notified orphan KEsc18f2b0e
: [release-v2.0] Update mixing module for client race fixes9a954c35
: [release-v2.0] chain: Wait for errgroup before returning from sync9df1e498
: externalize vsp client
Code Contributors (alphabetical order):
- @buck54321
- Josh Rickmar (@jrick)
v2.0.0
dcrwallet v2.0.0
This release is a major release for dcrwallet
, adding many new features, improvements, and bug fixes. It is the first release to integrate peer-to-peer StakeShuffle mixing (sometimes also referred to as CoinShuffle++ or CSPP), replacing the previous mixing features that required communicating through a central server as a coordination point.
Configuration for the new mixing protocol requires no changes from previous dcrwallet
versions, except that the enabling the feature is done with a boolean --mixing
option instead of setting --csppserver
.
When mixing, it is recommend, but not required, to build csppsolver
and either install it to PATH
, or provide the path to the executable with the --csppsolver
option. The solver is a necessary component to complete a mix, but only one participant in the mix is required to provide it. The solver requires the C library libflint (including its development headers, if your distribution creates separate -dev packages), and once these dependencies are met, csppsolver
can be built and installed with:
$ go install decred.org/cspp/v2/cmd/csppsolver@latest
Beyond the mixing changes, this release includes major performance and reliability improvements for both JSON-RPC and SPV syncing modes. Rescan performance has likewise been greatly improved upon over previous releases. Several issues affecting VSP users have been identified and corrected.
Downgrade Warning
The database format in v2.0.0 is not compatible with previous versions of the software. This only affects downgrades as users upgrading from previous versions will see a one time database migration.
Bug fixes
-
The configured mixed split account and branch is now properly used when purchasing mixed tickets using the
purchasetickets
JSON-RPC method (7a31751b
). -
Unsigned transactions created by the
purchasetickets
JSON-RPC method are no longer published or recorded by the wallet (7e5c5f2f
,a021248f
). -
An invalid usage of a synchronization primitive by the SPV syncer was corrected (
d5a07ae6
). -
Additional addresses are no longer fetched from peers in SPV mode when their services are deemed insufficient. This reduces the number of TCP connections currently open, preventing resource exhaustion if the wallet is using a Tor proxy and hitting the maximum circuit limit (
ab6da249
). -
An issue stalling the SPV syncing during the fetching of compact filters for sidechain blocks was fixed by adding a watchdog timer to the fetch (
66a3e69d
). -
A logic race that could result in missing relevant transactions in block connected at initial sync was corrected in the JSON-RPC syncing mode (
9873543d
). -
An off-by-one error during address discovery was corrected (
3c1d19e1
). -
The
redeemmultisigout
JSON-RPC method now returns with thecomplete
field of the result set to false when the caller-provided transaction already contained invalid signatures (0a63be64
). -
VSP fees are now calculated properly depending on the activation of DCP0012 (
90232ed6
). -
Several error-handling issues that could cause some tickets to be skipped over by the VSP client were corrected (
35c6ac0f
,a38abe28
,a87fa843
). -
The VSP client now confirms acceptance of fee payment for tickets before removing their internal tracking in the client, instead of simply assuming the fee payment was accepted after six confirmations (
35c6ac0f
).
New features
-
The client-server StakeShuffle mixing has been replaced with a peer-to-peer variant of the same protocol (
bb04b755
). -
Wallet creation now prompts if a birthday (as either a block height or date) is known for a restored wallet (
5e8f1328
). -
Wallet creation now prompts for any extended public keys are available to create additional new xpub accounts (
25b8ae63
). -
A
--spvdisablerelaytx
option has been added to inform full nodes not to announce transactions (eb5b1b72
). -
It is now possible to configure TLS certificate authentication to authenticate the JSON-RPC connection made to
dcrd
(0c735a70
). -
A new JSON-RPC method named
spendoutputs
has been introduced, which provides an easier-to-use alternative (over the existing create/sign/sendrawtransaction calls) to create and send transactions in a single RPC call with manual UTXO selection (ad140d26
). -
The currently-configured VSP URL has been added to the
walletinfo
JSON-RPC result object (bed109b0
). -
An
--offline
option has been added for air-gapped wallets to disable syncing through a JSON-RPC or SPV network backend (3b708125
). -
The
gettickets
JSON-RPC method is now usable under SPV mode (1e6f8917
). -
Any transaction changes that are performed during non-startup rescans (e.g. those manually started by the
rescanwallet
JSON-RPC method) are now logged (0be25dbc
).
Other improvements
-
During initial sync in SPV mode, unsynced peers will now be disconnected from if they are overtaken by the wallet as it syncs from its other peers (
6f510a51
). -
Compact filters in SPV mode are now fetched from multiple peers, and will continue to be fetched after the announcing peer has disconnected
adba0d1c
. -
Compact filters in SPV mode are now fetched in batches from peers who support this protocol addition (
1920377b
). -
Headers are now requested from peers in SPV mode after initial sync has completed, improving resyncing performance after temporary network loss (
b9fd1a79
). -
Headers sync in SPV mode has been modified to request headers and compact filters in batches, improving sync performance (
ab15d980
). -
JSON-RPC sync logic has been improved by waiting for
dcrd
to finish syncing before wallet begins its own syncing logic (e4acd44b
). -
Performance of and memory usage during initial sync in both SPV and JSON-RPC modes has been improved by iterating wallet's main chain blocks by height rather than following the previous headers through the hash (
947fcaf7
). -
Rescan performance is greatly improved due to improved batching of the database updates (
14c704a1
). -
On OpenBSD,
dcrwallet
no longer links to thesyscall
symbol, which has been removed fromlibc.so
in OpenBSD 7.5 (49941c3d
).
Changelog
The following lists all commits included in dcrwallet v2.0.0 that were not backported to a prior 1.8.x release:
ade2a17b
: version: Prepare v2.0.0 release4618df87
: Improve error message for initial csppsolver check645032b4
: Bump version to 2.0.0-pre1920377b
: spv: Add batched cfilter fetchingbb04b755
: Replace client-server with peer-to-peer mixing475b13a5
: Update Decred dependencies to latest releases5e8f1328
: wallet: Add birthday.7a31751b
: assign mixedSplitAccount for rpc ticketsf314a44c
: rpc: allow syncing older tips on simneteb5b1b72
: multi: Expose disablerelaytx44c0f78d
: Introduce VSPTicket struct.d2eddb1a
: jsonrpc: Require hash for processUnmanagedTicket0c735a70
: Allow client certificate authentication to dcrd RPCad140d26
: Implement spendoutputs JSON-RPC method7e5c5f2f
: Do not record unsigned split txs from purchaseticketsd374979e
: bump jsonrpc semver minor- [
bed109b0
](https://github.com...
v1.8.1
This release contains important bug fixes for VSP users.
Bug fixes
-
A warning is logged if a VSP fee payment could not be created due to a locked wallet (
1c1bcfbd
). -
VSP fee payments started by RPC requests are no longer cancelled early after the RPC returns (
07854e37
). -
The random duration interval during which ticket fee payment operations occur was fixed using the correct calculation of when a ticket goes live (
c4c6c421
). -
Fee payment confirmations are no longer assumed to be valid after they receive 6 confirmations, and the VSP is contacted to ensure that it has also confirmed the payment (
7c551ce6
). -
Block heights for ticket liveness and expiry are recalculated properly whenever unmined tickets are processed by the VSP client (
1319da0b
).
New features
- The verbose
getblock
andgetblockheader
JSON-RPC results now include apowhash
field with the hash calculated for the Proof-of-Work algorithm.
Changelog
The following lists all commits since dcrwallet v1.8.0:
1c1bcfbd
: vsp: Dont ignore locked wallet errs07854e37
: vsp: Hardcode background ctxc4c6c421
: vsp: Fix blocksUntilLive calc7c551ce6
: vsp: Only remove confirmed payments1319da0b
: vsp: Recalculate live/expiry heightbc7f095c
: Bump patch version for upcoming 1.8.1 releasea02926a8
: Update dcrd JSON-RPC types module7cb12ad4
: Update decred dependencies
Code Contributors (alphabetical order):
- Jamie Holdstock (@jholdstock)
- Josh Rickmar (@jrick)
v1.8.0
This release enables the votes for and implements the necessary features to follow the upcoming hard forks described by DCP0011 and DCP0012. As always, other minor feature additions and bug fixes have been included.
Bug fixes
-
Manual ticket revocations are no longer performed by the VSP client (
c9fc99b2
). -
A data race on the fee transaction pointer in the VSP client was corrected (
a8f2b058
). -
VSP options in the config file are validated at startup to prevent invalid configurations that do not specify all required settings (
6cc8d053
). -
Ticket purchasing performed through the JSON-RPC server now respects the configured maximum VSP fee (
a19dcb43
). -
A data race on rescanned block hashes in SPV mode was corrected (
dfcac12f
). -
New addresses can no longer be generated and returned externally for an imported voting account. This does not affect address generation when paying to voting account addresses during ticket buying (
d9945563
).
New features
-
Blocks are now validated according to either the initial proof-of-work algorithm or the difficulty and proof-of-work hash algorithm specified by DCP0011 (
3a52f00a
). -
Votes created by the wallet will use the subsidy split described by DCP0012 if the agenda is active (
8374bd52
). -
Mixed ticket purchasing now trickles the ticket purchases with random delays to harden against profiling specific buyers by their ticket timings (
e71decbd
). -
Mixed ticket purchasing was implemented by the
WalletService.PurchaseTickets
gRPC method (5b6ab6da
,4c697648
). -
A
WalletService.Address
gRPC method was added to query the wallet for details about its addresses (80a0e716
,a333c1f5
). -
A
WalletService.DumpPrivateKey
gRPC method was added to dump private keys of wallet addresses (c609d558
,12b9c552
). -
A
VotingService.SetTSpendPolicy
gRPC method was added to set a voting policy for a specific TSpend transaction. AVotingService.TSpendPolicies
gRPC method was added to query the voting policies of these specific TSpends (7352c1cb
). -
In SPV mode, TSpends are now fetched at wallet startup (
eab54c36
). -
A
--cpuprofile
config flag was added to write a pprof CPU profile for the entire process execution. The--memprofile
flag was changed to also profile the entire process execution rather than stopping after 5 minutes (39a379eb
). -
An additional newline character is no longer required when providing the seed during seed restore when entering seeds in hexadecimal form (
f31e848f
). -
The passphrase confirmation can now be piped during the
--create
prompts (dd93c2f6
).
Changelog
The following lists all commits included in dcrwallet v1.8.0 that were not backported to a prior 1.7.x release:
e71decbd
: Trickle tickets during mixed buying82f59828
: Update version prerelease and metadata for release-v1.8 branch92529a4b
: Prepare v1.8.0 release3a52f00a
: Validate that blocks satisfy either V1 or V2 PoW85b48444
: Bump deps.96817277
: Remove features marked deprecated8374bd52
: Follow DCP0012 once activated.99be2039
: Remove jsonrpc/types module replacement1683d3ae
: multi: Fix "the the" comment typos.c9fc99b2
: vsp: Don't revoke tickets.a8f2b058
: vsp: Add missing mutex locks.b6467521
: multi: Introduce AgendaChoices type.816f16d6
: vsp: Don't export Policy.d95475b1
: vsp: Unparam Policy.bf8e7a09
: vsp: Don't export Wallet.6cc8d053
: Validate VSP configs on startup.a19dcb43
: jsonrpc: Respect configured VSPMaxFee.c6933a35
: Move logger subsystem variables to internal package7cd8248f
: linter: fixes72eefbed
: Revert unintentional context change from previous commitdc38eb65
: Unexport wallet SaveRescanned method0aeb02cd
: vsp: Use client provided by vspd package.89623dc9
: build: Test against Go 1.2069d8b47b
: multi: linter cleanupdfcac12f
: Avoid spv data race on rescanned block hashes86898358
: Bump remaining golang.org/x/* modulese89da321
: Bump golang.org/x/sys module904a6db4
: cmd: update to latest deps5b6ab6da
: multi: Modify PurchaseTickets method.4c697648
: rpc: Add parameters to PurchaseTickets.c609d558
: server: Add DumpPrivateKey.12b9c552
: rpc: Add DumpPrivateKey method type.80a0e716
: server: Add Address method.a333c1f5
: rpc: Add address method type.eab54c36
: Fetch tspends in SPV mode39a379eb
: dcrwallet: Add --cpuprofile option7352c1cb
: rpc: Add TSpendPolicies and SetTSpendPolicy requestsf31e848f
: Do not require additional newline prompting a hex seeddd93c2f6
: Allow passphrase confirmation to be read from non-tty566eff83
: multi: Remove some unused code183083d6
: multi: Update dcrd pkgs to wip major versions5e7d5e73
: multi: Bump major module version to 3b16f7ca0
: vsp: Pass the context to feepayment instead of creating a new one.fe1bb25f
: tests: Use a single context in tests.3b3e9e04
: build: Test against Go 1.193d518eab
: whack a commented842ec8
: Run go fmt from Go 1.19 over the tree7cdfb44a
: Bump development version4ed5a4c6
: Prevent panic in RPC-mode getstakeinfo4c162c4f
: Fix compatibility with latest development dcrd04d8d0f6
: Fix regen.sh return code if $UID is unset736efd2a
: Make default fee amount constant more readable185f9cd7
: Update to latest gRPC4941af16
: Updates for Go 1.1880bcd2f3
: Switch away from deprecated terminal packaged9945563
: wallet: No taking voting addresses.
Code Contributors (alphabetical order):
- Alex Yocom-Piatt (@alexlyp)
- @bgptr
- Dave Collins (@davecgh)
- David Hill (@dajohi)
- Jamie Holdstock (@jholdstock)
- @JoeGruffins
- ...
v1.6.3
release-v1.6.3 release-v1.6.3
v1.6.2
release-v1.6.2 release-v1.6.2