Releases: decred/dcrwallet
v2.1.3
This is a bug fix release addressing a mixing reliability issue.
Bug fixes
- Mixing wallets now validate all SR and DC mixing vector dimensions and blame peers who submit messages with incorrect dimensions (decred/dcrd#3593).
Changelog
The following lists all commits since dcrwallet v2.1.2:
99ca1779: [release-v2.1] Bump version to 2.1.3+release.local.3f669a36: [release-v2.1] Bump mixing to v6.0.1
Code Contributors (alphabetical order):
- Josh Rickmar (@jrick)
v2.1.2
This is a bug fix release addressing regressions in mixing and VSP interaction.
Bug fixes
-
Mixing no longer ceases to function after network syncers are recreated following the lost of the network connection.
-
The VSP client no longer creates invalid requests when updating the treasury policy through the
settreasurypolicyandsettspendpolicyJSON-RPC methods.
Changelog
The following lists all commits since dcrwallet v2.1.1:
a40f3cdb: [release-v2.1] Bump version to 2.1.2+release.local.49d978d7: [release-v2.1] Bump wire to v1.7.2f5f862db: [release-v2.1] Bump vspd client to 4.0.20da1ec6f: [release-v2.1] Create new mix clients in Wallet.Run.5586c2d0: [release-v2.1] Print nice address string not raw struct.
Code Contributors (alphabetical order):
- Jamie Holdstock (@jholdstock)
- Josh Rickmar (@jrick)
v2.1.1
This is an emergency release fixing broken SPV mode in the 2.1.0 release.
Bug fixes
-
An error which broke all SPV usage caused by an incorrect update to the addrmgr/v3 module was corrected.
-
An unintended change in behavior created by a bug in a Go source code analyzer, causing "message count must be positive" errors being logged by the mixing client, was reverted.
Changelog
The following lists all commits since dcrwallet v2.1.0:
4d70680c: [release-v2.1] Bump version to 2.1.1+release.local.8ad61d35: [release-v2.1] Call the addrmgr.NetAddress ctor9e43765e: [release-v2.1] Fix loop iteration broken by modernize linter
Code Contributors (alphabetical order):
- Josh Rickmar (@jrick)
v2.1.0
This release implements the new stake version for voting on the maxtreasuryspend agenda as defined by DCP0013. As usual, it also includes a wide variety of other performance, reliability and usability improvements.
All users must upgrade due to the vote on new consensus rules.
Bug fixes
-
A long-standing bug which would cause transactions in blocks that get reorged out and back again into the best chain was identified and fixed (#2527).
-
Unmined tickets purchased at the end of a ticket price window are no longer incorrectly removed from the wallet due to pruning tickets with the wrong stake difficulty price (#2528).
-
In RPC sync mode, repeated blockconnected notifications from dcrd for the same block during multiple reorgs are no longer processed. This fixes the wallet's internal sidechain management and prevents identical blocks from being removed and reattached unnecessarily (#2526).
-
Several lock ordering bugs which would deadlock the process were corrected (#2508, #2560).
-
A check that mixing is enabled was moved earlier into the ticket purchasing codepath, preventing the mixed purchase from being attempted (#2484).
-
A check that mixing is enabled was added early to the
mixoutputJSON-RPC method, preventing the mixing attempt when disabled (#2473). -
The mixing client received the following fixes:
- Errors during address generation are properly handled by aborting out of the mix session (decred/dcrd#3484).
- A nil dereference panic caused by the logger trying to include relevant session information was fixed by always returning the current run state on unactionable errors (decred/dcrd#3505).
- Local mixing peers that have canceled their request are no longer served by the client, avoiding a slew of "context canceled" error messages being logged (decred/dcrd#3507).
- A busy loop causing 100% CPU usage when all local peer requests in a session had been canceled was avoided with improved error management (decred/dcrd#3511).
-
Interaction with VSPs has been improved:
- Unmined tickets which are pruned by the wallet no longer remain handled by the VSP client (#2525).
- Failed database updates changing the status of VSP tickets are retried later (#2524).
- Actively managed tickets are only removed from the VSP client after a successful removal from the database (#2524).
- Batched ticket processing no longer fails to process all tickets when one ticket in the batch already has a confirmed fee payment (#2519).
- Fee payments which must split an existing output no longer overestimate the required payment amount by failing to consider change amounts that would otherwise be dust (#2494).
- Hardcoded VSP fee rates have been removed, and the config option is used instead (#2439).
-
The
consolidateJSON-RPC method now respects the max transaction size limit (#2513). -
The
consolidateJSON-RPC method now refuses to continue if the output it would create is also a dust output (#2490). -
Under RPC sync mode, the
existsaddressescalls performed at startup sync are now batched to prevent exceeded the maximum request size (#2504). -
A data race starting gRPC services was corrected (#2532).
-
A data race counting the number of addresses processed at sync startup was corrected (#2517).
-
A variety of instances of incorrect error handling were corrected by returning the proper error to the caller (#2474, #2577).
Other improvements
-
The mixing client received the following improvements:
- Slot reservation and DC-net secret messages, and the addresses to mix, are now generated at peer creation rather than generating these lazily after the mixing epoch occurs and the session starts. This improves the publish time for initial KE messages, leading to improved peer agreement (decred/dcrd#3533).
- Mix session are now allowed to continue longer and concurrently with later sessions started at later epochs (decred/dcrd#3553).
- Mixing peers who repeatedly disrupt mixes, either by timeout or discovered during blame assignment, are now excluded from client session forming for a period (decred/dcrd#3554).
-
The
getstakeinfoJSON-RPC method now provides an estimate of the live ticket pool size when operating in SPV mode (#2523). -
Requesting transaction notifications for the wallet's seed-derived addresses has been sped up by fixing the code concurrency (#2516).
-
Background rescans started by the JSON-RPC server are now cleanly stopped on server shutdown (#2434).
-
Config option descriptions have removed references to the no-longer-used CoinShuffle++ server (#2548).
-
A new wallet method has been added to set the birthday block or date on existing wallets (#2385).
API changes
The module has been bumped to major version 5. Some users will need to make changes for the following API changes:
-
The
wallet.OutputSelectionPolicytype has been removed and(*Wallet).SelectInputsmethod no longer takes it as an argument. The(*Wallet).UnspentOutputsmethod and the types it returned were not observed to be used by anything, and were removed (#2535). -
The
UseVotingAccountfield of the ticket purchase request was removed. TheVotingAccountfield will always be used and callers always set this value to the intended voting account (#2483). -
All manual ticket revoking functionality has been removed. Tickets are automatically revoked by consensus rules now.
-
All legacy stakepool code has been removed (#2403).
In addition the following changes have been made to the RPC servers:
- The spend limit parameters have been removed from both the
purchaseticketsJSON-RPC andWalletService.PurchaseTicketgRPC requests (#2542).
Changelog
All commits to the v2.1.0 release since the v2.0.6 release may be viewed on GitHub
here.
All commits to the v2.1.0 release since the v2.0.0 release may be viewed on GitHub
here.
Most of these commits were previously backported to 2.0.x patch releases.
Code Contributors (alphabetical order):
- Anna Smith (@socialsister)
- @careworry
- @chengehe
- Dave Collins (@davecgh)
- @efcking
- @fengyuchuanshen
- @findnature
- @huochexizhan
- @hustrust
- Jamie Holdstock (@jholdstock)
- @JoeGruffins
- Josh Rickmar (@jrick)
- @kaifulee
- @kindknow
- @letreturn
- @quantpoet
- @riskrose
- @spuradage
- @tgolang
- @todaymoon
- @tongjicoder
- Wisdom Arerosuoghene (@itswisdomagain)
- @withtimezone
- @yajianggroup
- @yingshanghuangqiao
- @youzichuan
v2.0.6
This release includes reliability fixes for mixing users and fixes to both the RPC and SPV syncers.
All users are advised to upgrade. Additionally, users of csppsolver are advised to upgrade to the latest release (v2.4.0) of that tool.
Bug fixes
-
The websocket JSON-RPC client library has been updated to fix several data races and properly reconnect the RPC syncer if the connection is ever lost (jrick/wsrpc#9, jrick/wsrpc#11, jrick/wsrpc#12).
-
The SPV syncer will be recreated and reperform initial sync after all peers are lost (
c11c84f2). -
To prevent spinning the CPU at 100%, the SPV syncer now adds per-peer incrementing backoffs after failed connection attempts (
ba7027e8).
Other improvements
-
When forming an initial common set of mixing peers, all attempted sessions will now be considered, rather than only considering the most recent formation attempt. This can result in peer agreement occurring sooner and with a larger set of peers (decred/dcrd#3463).
-
When wallet is in the process of being shutdown, any ongoing mixes will be completed before the client and wallet process closes (decred/dcrd#3467,
b9bd675e). Forcsppsolverusers, this feature depends on deploying with the latestcsppsolverrelease as well. -
The
versionJSON-RPC method now includes thedcrwalletversion (9e3cbe03). -
The
debuglevelJSON-RPC method has been introduced, allowing the debug level of all or individual subsystems to be dynamically changed at runtime (c9d7e6a0).
Changelog
The following lists all commits since dcrwallet v2.0.5:
5d29910b: [release-v2.0] Prevent hang when dcrd connection is lost8e4b1da0: [release-v2.0] loader: Only create mix client if mixing enabled.b47c4de7: [release-v2.0] version: Crank to 2.0.608c2d3dd: [release-v2.0] Update wsrpc moduleba7027e8: [release-v2.0] spv: Implement per-peer increasing backoffsc11c84f2: [release-v2.0] spv: Teardown syncer after all peers are lostb9bd675e: [release-v2.0] Order mixclient and syncer shutdown9e3cbe03: [release-v2.0] Add dcrwallet version to version JSON-RPC result90e5291d: [release-v2.0] jsonrpc: Let client handle empty VSP policy fields61e7fbc4: [release-v2.0] Do not specify TLS curve preferencesc9d7e6a0: [release-v2.0] Implement the debuglevel JSON-RPC method
Code Contributors (alphabetical order):
- Jamie Holdstock (@jholdstock)
- Josh Rickmar (@jrick)
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
csppsolverchild 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
purchaseticketsJSON-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
mixaccountJSON-RPC method, which was unusable since the introduction of P2P mixing, was fixed (cb88e4f0). -
The
--ticketsplitaccountoption, 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
UseVotingAccountin 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
dcrdis 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
invmessages (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
dcrdwhen 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
getmixpairrequestsJSON-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)