v2.0.0
Install
To install Decrediton desktop wallet, download, uncompress, and run Decrediton Linux AppImage or Decrediton Linux tar or Decrediton macOS amd64 or Decrediton macOS arm64 or Decrediton Windows.
To install the command-line tools, please see dcrinstall.
See decred-v2.0.0-manifest.txt and the other manifest files for SHA-256 hashes and the associated .asc signature files to confirm those hashes.
See README.md for more info on verifying the files.
Contents
dcrd v2.0.0
This is a new major release of dcrd. Some of the key highlights are:
- Decentralized StakeShuffle mixing
- Higher network throughput
- Lightweight client sync time reduced by around 50%
- Improved initial peer discovery
- Reject protocol message removal
- Various updates to the RPC server:
- Dynamic TLS certificate reload
- Proof-of-Work hash in block information
- New JSON-RPC API additions related to decentralized StakeShuffle mixing
- Quality assurance changes
Upgrade Required To Continue Participating in StakeShuffle Mixing
Although upgrading to this latest release is not absolutely required for continued operation of the core network, it is required for anyone who wishes to continue participating in StakeShuffle mixing.
Notable Changes
Decentralized StakeShuffle Mixing
The StakeShuffle mixing process is now fully decentralized via the peer-to-peer network as of this release. All core software has been upgraded to make use of the new decentralized coordination facilities.
This release introduces several new peer-to-peer protocol messages to provide the decentralized coordination. The following is a brief summary of the new messages:
Message | Overall Purpose |
---|---|
mixpairreq |
Request to participate in a mix with relevant data and proofs. |
mixkeyxchg |
Publishes public keys and commitments for blame assignment. |
mixcphrtxt |
Enables quantum resistant (PQ) blinded key exchange. |
mixslotres |
Establishes slot reservations used in the blinding process. |
mixfactpoly |
Encodes solution to the factored slot reservation polynomial. |
mixdcnet |
Untraceable multi-party broadcast (dining cryptographers). |
mixconfirm |
Provides partial signatures to create the mix transaction. |
mixsecrets |
Reveals secrets of an unsuccessful mix for blame assignment. |
Higher Network Throughput
This release now supports concurrent data requests (getdata
) which allows for higher network throughput, particularly when the communications channel is experiencing high latency.
A couple of notable benefits are:
- Reduced vote times since it allows blocks and transactions to propagate more quickly throughout the network
- More responsive during traffic bursts and general network congestion
Lightweight client sync time reduced by around 50%
Lightweight clients may now request version 2 compact filters in batches as opposed to one at a time. This has the effect of drastically reducing the initial sync time for lightweight clients such as Simplified Payment Verification (SPV) wallets.
This release introduces a new pair of peer-to-peer protocol messages named getcfsv2
and cfiltersv2
which provide the aforementioned capability.
Improved Initial Peer Discovery
Peers will now continue to query unreachable seeders in the background with an increasing backoff timeout when they have not already discovered a sufficient number of peers on the network to achieve the target connectivity.
This primarily improves the experience for peers joining the network for the first time and those that have not been online for a long time since they do not have a known list of good peers to use.
Reject Protocol Message Removal (reject
)
The previously deprecated reject
peer-to-peer protocol message is no longer available.
Consequently, the minimum required network protocol version to participate on the network is now version 9.
Note that all nodes on older protocol versions are already not able to participate in the network due to consensus changes that have passed.
Recall from previous release notes that this message is being removed because it is a holdover from the original codebase where it was required, but it really is not a useful message and has several downsides:
- Nodes on the network must be trustless, which means anything relying on such a message is setting itself up for failure because nodes are not obligated to send it at all nor be truthful as to the reason
- It can be harmful to privacy as it allows additional node fingerprinting
- It can lead to security issues for implementations that don't handle it with proper sanitization practices
- It can easily give software implementations the fully incorrect impression that it can be relied on for determining if transactions and blocks are valid
- The only way it is actually used currently is to show a debug log message, however, all of that information is already available via the peer and/or wire logging anyway
- It carries a non-trivial amount of development overhead to continue to support it when nothing actually uses it
RPC Server Changes
The RPC server version as of this release is 8.2.0.
Dynamic TLS Certificate Reload
The RPC server now checks for updates to the TLS certificate key pair (rpc.cert
and rpc.key
by default) on new connections and dynamically reloads them if needed. Similarly, the authorized client certificates (clients.pem
by default) when running with the client certificate authorization type mode (--authtype=clientcert
).
Some key highlights of this change:
- Certificates can now be updated without needing to shutdown and restart the process which enables things such as:
- Updating the certificates to change the allowed domain name and/or IP addresses
- Dynamically adding or removing authorized clients
- Changing the cryptographic primitives used to newer supported variants
- All existing connections will continue to use the certificates that were loaded at the time the connection was made
- The existing working certs are retained if any errors are encountered when loading the new ones in order to avoid breaking a working config
New Proof-of-Work Hash Field in Block Info RPCs (getblock
and getblockheader
)
The verbose results of the getblock
and getblockheader
RPCs now include a powhash
field in the JSON object that contains the Proof-of-Work hash for the block. The new field will be exactly the same as the hash
(block hash) field for all blocks prior to the activation of the stakeholder vote to change the PoW hashing algorithm(DCP0011).
See the following for API details:
New StakeShuffle Mixing Pool (mixpool) Message Send RPC (sendrawmixmessage
)
A new RPC named sendrawmixmessage
is now available. This RPC can be used to manually submit all mixing messages to the mixpool and broadcast them to the network.
See the following for API details:
New StakeShuffle Mixing Pool (mixpool) Message WebSocket Notification RPCs (notifymixmessages
)
WebSocket notifications for mixing messages accepted to the mixpool are now available.
Use notifymixmessages
to request mixmessage
notifications and stopnotifymixmessages
to stop receiving notifications.
See the following for API details:
- notifymixmessages JSON-RPC API Documentation
- stopnotifymixmessages JSON-RPC API Documentation
- mixmessage JSON-RPC API Notification Documentation
Changelog
This release consists of 168 commits from 11 contributors which total to 265 files changed, 18292 additional lines of code, and 2978 deleted lines of code.
All commits since the last release may be viewed on GitHub here.
See dcrd's own release notes for a categorized breakdown of all commits since the last release.
Code Contributors (alphabetical order):
- Billy Zelani Malik
- Dave Collins
- David Hill
- Matheus Degiovani
- Nicola Larosa
- peicuiping
- Peter Zen
- Jamie Holdstock
- Jonathan Chappelow
- Josh Rickmark
- SeedHammer
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
See dcrwallet's own release notes for a list of all commits included in dcrwallet v2.0.0 that were not backported to a prior 1.8.x release.
Code Contributors (alphabetical order):
- @buck54321
- Dave Collins (@davecgh)
- David Hill (@dajohi)
- Jamie Holdstock (@jholdstock)
- @JoeGruffins
- Josh Rickmar (@jrick)
- Matheus Degiovani (@matheusd)
- Philip Obiora (@Philip-21)
Decrediton v2.0.0
This is a minor Decrediton release that updates to use the new dcrwallet p2p mixing service and other various dependencies due to security issues and bugs. There were also large updates to the French and Chinese translations.
Changelog
All commits since the last release may be viewed on GitHub here.