Skip to content

v1.5.0-rc1

Pre-release
Pre-release
Compare
Choose a tag to compare
@dajohi dajohi released this 07 Nov 20:18
· 36 commits to master since this release

2019-11-07

Install

To install the command line tools, please see dcrinstaller.
To install decrediton download, uncompress, and run decrediton Linux or decrediton macOS or decrediton Windows.

See manifest-v1.5.0.txt, and the package specific manifest files for sha256 sums and the associated .asc files to confirm those shas.

See README.md for more info on verifying the files.

Contents

dcrd v1.5.0-rc1

This release of dcrd introduces a large number of updates. Some of the key highlights are:

  • A new consensus vote agenda which allows the stakeholders to decide whether or not to activate support for block header commitments
  • More efficient block filters
  • Significant improvements to the mining infrastructure including asynchronous work notifications
  • Major performance enhancements for transaction script validation
  • Automatic external IP address discovery
  • Support for IPv6 over Tor
  • Various updates to the RPC server such as:
    • A new method to query information about the network
    • A method to retrieve the new version 2 block filters
    • More calls available to limited access users
  • Infrastructure improvements
  • Quality assurance changes

For those unfamiliar with the voting process in Decred, all code in order to support block header commitments is already included in this release, however its enforcement will remain dormant until the stakeholders vote to activate it.

For reference, block header commitments were originally proposed and approved for initial implementation via the following Politeia proposal:

The following Decred Change Proposal (DCP) describes the proposed changes in detail and provides a full technical specification:

It is important for everyone to upgrade their software to this latest release even if you don't intend to vote in favor of the agenda.

Downgrade Warning

The database format in v1.5.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.

Once this migration has been completed, it will no longer be possible to downgrade to a previous version of the software without having to delete the database and redownload the chain.

Notable Changes

Block Header Commitments Vote

A new vote with the id headercommitments is now available as of this release. After upgrading, stakeholders may set their preferences through their wallet or Voting Service Provider's (VSP) website.

The primary goal of this change is to increase the security and efficiency of lightweight clients, such as Decrediton in its lightweight mode and the dcrandroid/dcrios mobile wallets, as well as add infrastructure that paves the way for several future scalability enhancements.

A high level overview aimed at a general audience including a cost benefit analysis can be found in the Politeia proposal.

In addition, a much more in-depth treatment can be found in the motivation section of DCP0005.

Version 2 Block Filters

The block filters used by lightweight clients, such as SPV (Simplified Payment Verification) wallets, have been updated to improve their efficiency,
ergonomics, and include additional information such as the full ticket commitment script. The new block filters are version 2. The older version 1 filters are now deprecated and scheduled to be removed in the next release, so consumers should update to the new filters as soon as possible.

An overview of block filters can be found in the block filters section of DCP0005.

Also, the specific contents and technical specification of the new version 2 block filters is available in the version 2 block filters section of DCP0005.

Finally, there is a one time database update to build and store the new filters for all existing historical blocks which will likely take a while to complete (typically around 8 to 10 minutes on HDDs and 4 to 5 minutes on SSDs).

Mining Infrastructure Overhaul

The mining infrastructure for building block templates and delivering the work to miners has been significantly overhauled to improve several aspects as follows:

  • Support asynchronous background template generation with intelligent vote propagation handling
  • Improved handling of chain reorganizations necessary when the current tip is unable to obtain enough votes
  • Current state synchronization
  • Near elimination of stale templates when new blocks and votes are received
  • Subscriptions for streaming template updates

The standard getwork RPC that PoW miners currently use to perform the mining process has been updated to make use of this new infrastructure, so existing PoW miners will seamlessly get the vast majority of benefits without requiring any updates.

However, in addition, a new notifywork RPC is now available that allows miners to register for work to be delivered asynchronously as it becomes available via a WebSockets work notification. These notifications include the same information that getwork provides along with an additional reason parameter which allows the miners to make better decisions about when they should instruct workers to discard the current template immediately or should be allowed to finish their current round before being provided with the new template.

Miners are highly encouraged to update their software to make use of the new asynchronous notification infrastructure since it is more robust, efficient, and faster than polling getwork to manually determine the aforementioned conditions.

The following is a non-exhaustive overview that highlights the major benefits of the changes for both cases:

  • Requests for updated templates during the normal mining process in between tip changes will now be nearly instant instead of potentially taking several seconds to build the new template on the spot
  • When the chain tip changes, requesting a template will now attempt to wait until either all votes have been received or a timeout occurs prior to handing out a template which is beneficial for PoW miners, PoS miners, and the network as a whole
  • PoW miners are much less likely to end up with template with less than the max number of votes which means they are less likely to receive a reduced subsidy
  • PoW miners will be much less likely to receive stale templates during chain tip changes due to vote propagation
  • PoS voters whose votes end up arriving to the miner slightly slower than the minimum number required are much less likely to have their votes excluded despite having voted simply due to propagation delay

PoW miners who choose to update their software, pool or otherwise, to make use of the asynchronous work notifications will receive additional benefits such as:

  • Ability to start mining a new block sooner due to receiving updated work as soon as it becomes available
  • Immediate notification with new work that includes any votes that arrive late
  • Periodic notifications with new work that include new transactions only when there have actually been new transaction
  • Simplified interface code due to removal of the need for polling and manually checking the work bytes for special cases such as the number of votes

NOTE: Miners that are not rolling the timestamp field as they mine should ensure their software is upgraded to roll the timestamp to the latest timestamp each time they hand work out to a miner. This helps ensure the block timestamps are as accurate as possible.

Transaction Script Validation Optimizations

Transaction script validation has been almost completely rewritten to significantly improve its speed and reduce the number of memory allocations. While this has many more benefits than enumerated here, probably the most important ones for most stakeholders are:

  • Votes can be cast more quickly which helps reduce the number of missed votes
  • Blocks are able to propagate more quickly throughout the network, which in turn further improves votes times
  • The initial sync process is around 20-25% faster

Automatic External IP Address Discovery

In order for nodes to fully participate in the peer-to-peer network, they must be publicly accessible and made discoverable by advertising their external IP address. This is typically made slightly more complicated since most users run their nodes on networks behind Network Address Translation (NAT).

Previously, in addition to configuring the network firewall and/or router to allow inbound connections to port 9108 and forwarding the port to the internal IP address running dcrd, it was also required to manually set the public external IP address via the --externalip CLI option.

This release will now make use of other nodes on the network in a decentralized fashion to automatically discover the external IP address, so it is no longer necessary to manually set CLI option for the vast majority of users.

Tor IPv6 Support

It is now possible to resolve and connect to IPv6 peers over Tor in addition to the existing IPv4 support.

RPC Server Changes

New Version 2 Block Filter Query RPC (getcfilterv2)

A new RPC named getcfilterv2 is now available which can be used to retrieve the version 2 block filter for a given block along with its associated inclusion proof. See the getcfilterv2 JSON-RPC API Documentation for API details.

New Network Information Query RPC (getnetworkinfo)

A new RPC named getnetworkinfo is now available which can be used to query information related to the peer-to-peer network such as the protocol version, the local time offset, the number of current connections, the supported network protocols, the current transaction relay fee, and the external IP addresses for the local interfaces. See the getnetworkinfo JSON-RPC API Documentation for API details.

Updates to Chain State Query RPC (getblockchaininfo)

The difficulty field of the getblockchaininfo RPC is now deprecated in favor of a new field named difficultyratio which matches the result returned by the getdifficulty RPC.

See the getblockchaininfo JSON-RPC API Documentation for API details.

New Optional Version Parameter on Script Decode RPC (decodescript)

The decodescript RPC now accepts an additional optional parameter to specify the script version. The only currently supported script version in Decred is version 0 which means decoding scripts with versions other than 0 will be seen as non standard.

Removal of Deprecated Block Template RPC (getblocktemplate)

The previously deprecated getblocktemplate RPC is no longer available. All known miners are already using the preferred getwork RPC since Decred's block header supports more than enough nonce space to keep mining hardware busy without needing to resort to building custom templates with less efficient extra nonce coinbase workarounds.

Additional RPCs Available To Limited Access Users

The following RPCs that were previously unavailable to the limited access RPC user are now available to it:

  • estimatefee
  • estimatesmartfee
  • estimatestakediff
  • existsaddress
  • existsaddresses
  • existsexpiredtickets
  • existsliveticket
  • existslivetickets
  • existsmempoltxs
  • existsmissedtickets
  • getblocksubsidy
  • getcfilter
  • getcoinsupply
  • getheaders
  • getstakedifficulty
  • getstakeversioninfo
  • getstakeversions
  • getvoteinfo
  • livetickets
  • missedtickets
  • rebroadcastmissed
  • rebroadcastwinners
  • ticketfeeinfo
  • ticketsforaddress
  • ticketvwap
  • txfeeinfo

Single Mining State Request

The peer-to-peer protocol message to request the current mining state (getminings) is used when peers first connect to retrieve all known votes for the current tip block. This is only useful when the peer first connects because all future votes will be relayed once the connection has been established. Consequently, nodes will now only respond to a single mining state request. Subsequent requests are ignored.

Developer Go Modules

A full suite of versioned Go modules (essentially code libraries) are now available for use by applications written in Go that wish to create robust
software with reproducible, verifiable, and verified builds.

These modules are used to build dcrd itself and are therefore well maintained, tested, documented, and relatively efficient.

Changelog

This release consists of 600 commits from 17 contributors which total to 537 files changed, 41494 additional lines of code, and 29215 deleted lines of code.

All commits since the last release may be viewed on GitHub here.

Protocol and network:

Transaction relay (memory pool):

Mining:

RPC:

dcrd command-line flags and configuration:

certgen utility changes:

dcrctl utility changes:

promptsecret utility changes:

Documentation:

Developer-related package and module changes:

Developer-related module management:

Testing and Quality Assurance:

Misc:

Code Contributors (alphabetical order):

  • Aaron Campbell
  • Conner Fromknecht
  • Dave Collins
  • David Hill
  • Donald Adu-Poku
  • Hamid
  • J Fixby
  • Jamie Holdstock
  • JoeGruffins
  • Jonathan Chappelow
  • Josh Rickmar
  • Matheus Degiovani
  • Nicola Larosa
  • Olaoluwa Osuntokun
  • Roei Erez
  • Sarlor
  • Victor Oliveira

dcrwallet v1.5.0-rc1

This release introduces the privacy features based on CoinShuffle++. A new voting agenda is also added to vote on the activation of the changes described in DCP0005. A comprehensive list of improvements and bug fixes follows.

New features

  • CoinShuffle++ cooperative mixing features are added. Through this process, tickets may be bought from outputs in a CoinJoin transaction. CoinJoin change is not anonymized, and must be isolated to a different account and mixed down at standard amount values.

    This implementation of CoinShuffle++ currently requires a central server as a coordination point between all peers in a mix. The Decred project operates a server at https://cspp.decred.org/, and more details about correct usage can be found there. Anyone is able to host their own server and configure their wallets to use it, but for the largest anonymity set it is best that most people remain using the same server.

  • Arbitrary extended pubkeys can now be imported as a watching-only account, even on wallets which do store private keys for other accounts. Extended pubkeys are imported using the new importxpub JSON-RPC method.

  • A --disablecointypeupgrades flag and config setting is added to prevent the wallet from ever upgrading the coin type on a seed restored wallet, even when there is no observed transactions for the seed.

  • A cointype field has been added to the walletinfo JSON-RPC response, and a CoinType method has been added to the gRPC WalletService.

  • A getblockhash method has been added to the JSON-RPC server. This allows users to query for the best block hash even in SPV mode, where no dcrd RPC passthrough is available.

  • The abandontransaction method has been implemented by the JSON-RPC server. This method allows the wallet to forget about any unmined transaction, and allows any previous outputs spend by the abandoned transaction to become spendable again.

  • A GetAccountExtendedPrivKey method has been added to the gRPC WalletService to export the extended private key of an account.

Other improvements

  • Double spending vote/revocation transaction errors now include the hashes the conflicting transactions.

  • Concurrency was improved throughout with better in-memory data structures and reducing how long operations are performed while inside of database views and updates. This should result in overall better performance.

  • Self-signed TLS certificates are now created with ed25519 keys, instead of the increasingly unsupported P-521 elliptic curve.

  • The --ticketfee config flag is now deprecated. Tickets are created with the same fee rate as all other transactions.

  • Deprecated config flags from the v1.4.0 release have been removed.

  • Several deprecated methods and fields in the JSON-RPC API have been undeprecated. These were deprecated in upstream code, but are
    still used and necessary for dcrwallet due to differences in account handling.

Bug fixes

  • A "missing credit value" error seen during reorgs of 2+ transaction spend chains was corrected.

  • The Wallet.TransactionSummary method was fixed so that it correctly returns the block hash of mined transactions, instead of filling the block hash field with the transaction hash.

  • Outbounded SPV peers are removed from an internal "connecting" state after any error is hit. This allows the SPV syncer to try other peers instead of losing the ability to outbound any new peers.

  • Duplicate ticket hashes are filtered out of the livetickets JSON-RPC if they are recorded internally in both the transaction and stake stores.

  • Data races in the wallet's notification emitter were identified and corrected.

  • Duplicate transaction errors when the wallet publishes a transaction to dcrd with the sendrawtransaction JSON-RPC are now handled as successful transaction publishes, instead of returning the errors back to the caller.

  • An unlikely bug in Salsa20 (used by the wallet for storing encrypted messages in the database), which broke the security guarantees if more than 256GiB of the keystream was used, was corrected by upgrading the x/crypto module to a newer version with a fix.

  • A data race accessing whether a transaction output is locked or not was fixed.

  • A potential address reuse bug was corrected with improvements to the in-memory address index tracking.

  • The stakepooluserinfo JSON-RPC method now correctly sets the status of immature tickets to "immature" instead of "live".

  • Ticket commitments, which do not follow the UTXO model as they can not be spent, are now handled specially by the wallet. This corrects balance reporting issues whenever tickets have been bought or observed with relevant commitment addresses.

  • A panic caused by out-of-bounds array access in the SPV syncer was identified and corrected.

Changelog

All commits since the last release may be viewed on GitHub here.

decrediton v1.5.0-rc1

This release was primarily focused on overall look and feel refinement and bug fixes. It also includes a preliminary Lightning Network implementation by matheusd. Most of the other work was completed by vctt and a new member of the team, bgptr. Many thanks to them for their hard work on this release.

New Features

  • Initial LN Support has been added. This includes the following functionality:
    dcrlnd startup/teardown, open/close channels, create invoices, send payments, enabled autopilot and show dcrlnd logs. This initial support should give users a chance to experience the capabilities of LN while we can also collect user feedback about how to best improve their experience with documentation or help. To enable LN support, please set the new option "ln_enabled" to "true" in your config.json.

  • Window size responsiveness has been added to most of the pages to allow for graceful change from small, medium and large screen sizes. When in "small" mode, the sidebar is moved to the bottom of the screen much like a mobile app. When in "medium" mode, the sidebar is collapsed shows only icons. When in "large" mode, the sidebar is fully expanded and all the fields are fully shown.

Other updates

  • Dark mode (tonality) has been updated to have a more thoughtfully compiled pallette of color combinations. We can now start to develop other color modes if users show an interest in such a feature.

  • The launcher now has a daemon connection timeout detection. Previously, the wallet would endlessly attempt to connect to the daemon, even if the daemon had some fatal error that it would never recover from. This allows the user to recover from such a situation more gracefully.

  • Update Politeia proposal fetching to reduce amount of data that is consistantly requested. Previously, every load of decrediton would cause an unnecessary amount of data to be requested.

Bug fixes

  • Fix pasting the hex version of the seed while restoring a wallet.

  • Fix incorrect balance reporting for data exports.

  • Fix advanced mode staring with an empty app data directory.

  • Fix revoked ticket and recent transactions icon.

  • Update lockedByTickets balance to accomodate dcrwallet balance updates staking.

Changelog

All commits since the last release may be viewed on GitHub here.

dcrlnd v0.2.0-rc1

This update has brought dcrlnd synced to the v0.8.0-beta of upstream lnd.

Most upstream work that was done since our original branching point in January 2019 was merged and Decred-specific work has been done to enable more seamless integration of dcrlnd to Decrediton.

Decred's LN network is still only in its begining stages, therefore please use caution when comitting funds to it.

Network Reset & Backwards Incompatible Change

Those running v0.1.0 or other versions built from code, please note that v0.2.0 has a network-wide breaking change. PR46 changed the algorithm used to encode payment requests from the Decred-default of Blake256 to the Bicoin-compatible SHA-256.

This means v0.1.0 nodes cannot use channels with v0.2.0 nodes. and will fail and force-close on the first attempt of payment.

Given the v0.1.0 network was still very small we decided to not implement signalling and backwards compatible changes to simplify implementation. Anyone still running the old version MUST UPGRADE their node.

Notable Changes

Notable Upstream Changes

PR36 and PR42 are the ones that port the upstream work. Some notable upstream changes brought include the following.

  • Safu Commitments, which was an LN-wide protocol change enabling wallets to retrieve their local channel balance stored in unilaterally-closed channels without requiring coordination with the counterparty.

  • Watchtower support, which allows a wallet to remain closed for a longer period of time by offloading the reposability to watch for channel breaches to a third party called a watchtower.

  • Static Channel Backups which are a race-condition-free way of backing up the channel data required to safely execute the Data Loss Protection protocol if the main database of lnd is lost.

  • Hodl invoices which is a way of creating and settling invoices by providing the payment hash/preimage via gRPC and allows bridging the lnd service to more advanced LN-based services such as atomic swaps.

Changelog

All commits since the last release may be viewed on GitHub here.