Skip to content

Releases: decred/dcrwallet

v1.8.1

27 Sep 18:48
release-v1.8.1
Compare
Choose a tag to compare

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 and getblockheader JSON-RPC results now include a powhash 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 errs
  • 07854e37: vsp: Hardcode background ctx
  • c4c6c421: vsp: Fix blocksUntilLive calc
  • 7c551ce6: vsp: Only remove confirmed payments
  • 1319da0b: vsp: Recalculate live/expiry height
  • bc7f095c: Bump patch version for upcoming 1.8.1 release
  • a02926a8: Update dcrd JSON-RPC types module
  • 7cb12ad4: Update decred dependencies

Code Contributors (alphabetical order):

v1.8.0

13 Jun 20:46
release-v1.8.0
Compare
Choose a tag to compare

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. A VotingService.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 buying
  • 82f59828: Update version prerelease and metadata for release-v1.8 branch
  • 92529a4b: Prepare v1.8.0 release
  • 3a52f00a: Validate that blocks satisfy either V1 or V2 PoW
  • 85b48444: Bump deps.
  • 96817277: Remove features marked deprecated
  • 8374bd52: Follow DCP0012 once activated.
  • 99be2039: Remove jsonrpc/types module replacement
  • 1683d3ae: 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 package
  • 7cd8248f: linter: fixes
  • 72eefbed: Revert unintentional context change from previous commit
  • dc38eb65: Unexport wallet SaveRescanned method
  • 0aeb02cd: vsp: Use client provided by vspd package.
  • 89623dc9: build: Test against Go 1.20
  • 69d8b47b: multi: linter cleanup
  • dfcac12f: Avoid spv data race on rescanned block hashes
  • 86898358: Bump remaining golang.org/x/* modules
  • e89da321: Bump golang.org/x/sys module
  • 904a6db4: cmd: update to latest deps
  • 5b6ab6da: 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 mode
  • 39a379eb: dcrwallet: Add --cpuprofile option
  • 7352c1cb: rpc: Add TSpendPolicies and SetTSpendPolicy requests
  • f31e848f: Do not require additional newline prompting a hex seed
  • dd93c2f6: Allow passphrase confirmation to be read from non-tty
  • 566eff83: multi: Remove some unused code
  • 183083d6: multi: Update dcrd pkgs to wip major versions
  • 5e7d5e73: multi: Bump major module version to 3
  • b16f7ca0: 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.19
  • 3d518eab: whack a comment
  • ed842ec8: Run go fmt from Go 1.19 over the tree
  • 7cdfb44a: Bump development version
  • 4ed5a4c6: Prevent panic in RPC-mode getstakeinfo
  • 4c162c4f: Fix compatibility with latest development dcrd
  • 04d8d0f6: Fix regen.sh return code if $UID is unset
  • 736efd2a: Make default fee amount constant more readable
  • 185f9cd7: Update to latest gRPC
  • 4941af16: Updates for Go 1.18
  • 80bcd2f3: Switch away from deprecated terminal package
  • d9945563: wallet: No taking voting addresses.

Code Contributors (alphabetical order):

Read more

v1.6.3

17 May 14:07
Compare
Choose a tag to compare
release-v1.6.3

release-v1.6.3

v1.6.2

17 May 14:07
Compare
Choose a tag to compare
release-v1.6.2

release-v1.6.2

v1.6.1

17 May 14:07
Compare
Choose a tag to compare
release-v1.6.1

release-v1.6.1

v1.6.0

21 Jan 19:49
Compare
Choose a tag to compare

dcrwallet v1.6.0

This release focuses on adding support for the decentralized Decred treasury, improved SPV syncing with version 2 committed filters, and client support for the new privacy-conscious VSP implementation to make mixed VSP ticketbuying viable.

A comprehensive list of improvements and bug fixes follows.

New features

  • The WalletService.PurchaseTickets gRPC method gained a dont_sign_tx parameter to support unsigned ticket purchasing and eventual hardware wallet signing.

  • An AccountMixerService was added to the gRPC server to perform CoinShuffle++ mixing on all funds received by an account.

  • A createsignature JSON-RPC method was introduced, analogous to the gRPC WalletService.CreateSignature method.

  • A discoverusage JSON-RPC method was introduced, which triggers the same address and account discovery as performed on startup when there are new blocks available. However, this method is more general purpose and is useful when correcting issues with prior discoveries, at it allows specifying the exact starting blocks and a BIP0044 gap limit to use.

  • A WalletService.SignHashes gRPC method was added to sign an arbitrary number of 32-byte hashes. This method was used by the now-defunct TumbleBit implementation.

  • A WalletService.Spender gRPC method was added to query the transaction and input index which spends a wallet output.

  • Version 2 committed filters are now used, rather than the previous version 1 filters. These filters are consensus validated by proof-of-work miners as part of the commitments in the block header. Version 2 filters are smaller and also do not require knowledge of the exact outputs spent, but rather only the previous output script (or address).

  • The WalletService.TransactionNotifications gRPC method now provides more details about the block headers which were detached during a reorganize, rather than only their hashes.

  • The fundrawtransaction JSON-RPC method is now directly implemented by dcrwallet, rather than delegating this method to dcrd through RPC passthrough. This allows the method to be usable under SPV mode.

  • An addtransaction JSON-RPC method was added, allowing transactions to be manually added to the wallet, mined in a specified block, without discovering the transaction through the network.

  • The stakepooluserinfo JSON-RPC method has been reintroduced, after being removed from prior releases. This is used by the new vspd server.

  • Vote preferences may now be specified on a per-ticket basis with added optional parameters to the setvotechoice JSON-RPC method. This feature is used by the new vspd server.

  • A WalletService.GetRawCFilters gRPC method was added to query the wallet-stored version 2 committed filter for specified blocks.

  • A NetworkService.GetRawBlock gRPC method was added to fetch raw blocks using the wallet's peer-to-peer implementation.

  • An optional account parameter was added to the listunspent and listlockunspent JSON-RPC methods to filter results for a particular account.

  • A ticketinfo JSON-RPC method was added to provide detailed status information regarding all tickets from the wallet.

  • The WalletService.PurchaseTickets method gained support for specifying CoinShuffle++ options for mixed ticket buying.

  • Both a getpeerinfo JSON-RPC method and WalletService.GetPeerInfo gRPC method were implemented to provide peer info in SPV mode. The JSON-RPC method continues to return results from a connected dcrd when syncing in RPC mode.

  • A walletpassphrasechange JSON-RPC method was added to modify the wallet's public data encryption passphrase. Changing to the default insecure value "public" effectively removes any prompts for the public passphrase at startup.

  • A client for the new vspd server was added, and dcrwallet supports this client functionality from both the ticket autobuyer and through various gRPC methods.

  • The getcoinjoinsbyacct JSON-RPC method and WalletService.GetCoinjoinOutputspByAcct gRPC methods were added to discover probable CoinJoin transactions and report them by account.

  • Unpublished transactions are now supported. When an unpublished transaction is saved to the database, the outputs it spends are tallied in balance results and are not spendable by other transactions. Unpublishd transactions will not be automatically rebroadast to the network when the wallet starts up and begins syncing. Unpublished transactions are used to record transactions paying vspd fees prior to the vspd instance accepting the client's ticket request.

  • A --manualtickets flag was added to the application config. This setting disables discovering any tickets from the network syncing, instead requiring any tickets to be manually added to the wallet using addtransaction. This feature is used by the new vspd server to avoid voting on unprocessed tickets which used a vspd voting address. The current state of this setting is reported in the walletinfo JSON-RPC result.

  • The LOGFLAGS environment variable may now include a UTC flag to cause the wallet to always log with UTC timestamps, regardless of the current system timezone.

  • The listunspent JSON-RPC method now includes the hex encoding of a redeem script when the output is P2SH and the redeem script is known.

  • Support for the decentralized treasury hard fork is added. Two new JSON-RPC methods sendtotreasury and spendfromtreasury are added, to send to and spend from value in the treasury, respectively. The vote version and current agendas have been updated to allow stakeholders to vote on the activation of the decentralized treasury.

  • A sendrawtransaction implementation has been added to the JSON-RPC server. This allows arbitrary transactions to be published under SPV mode.

  • Accounts are now able to be encrypted using separate, per-account passphrases. Unlocking an account only provides access to that account's private keys, and no others. Account passphrases may be set using the setaccountpassphrase JSON-RPC method, and locked and unlocked by the unlockaccount and lockaccount methods.

  • JSON-RPC clients may now be authenticated using TLS client certificates, and this authentication is now required for the gRPC server. The feature may be enabled for JSON-RPC by using the --jsonrpcauthtype=clientcert config flag. Client certificates read from a clients.pem file in the application directory are trusted by default, and this file may be modified by the --clientcafile config flag. Additionally, an --issueclientcert flag is provided which causes the wallet to issue and send an ephemeral client certificate and key over the TX pipe to the parent process which forked dcrwallet. Client certificates may be generated by the gencerts tool, which is now part of the Decred CLI distribution.

  • gRPC methods to lock and unlock the wallet's global keys and individually-encrypted accounts are now added, and the passphrase in all requests which required an unlocked wallet are now optional. As the gRPC server now requires client authentication, there is no a risk of an unauthenticated client from quickly hitting an already-unlocked wallet or account and using private keys it should not otherwise have access to.

Other improvements

  • Peer-to-peer seeding is now performed over an HTTPS API rather than DNS. This improves reliability (HTTPS is authenticated), as well as greater control of filtering results by various URL parameters.

  • Many log messages were added, removed, or rewritten to better reflect the operational state of the application.

  • The scrypt KDF used for wallet encryption keys now defaults to weaker parameters on simnet. This is primarily done for quicker unit tests, but will also affect real dcrwallet simnet instances by requiring less time and memory to derive keys.

  • Imported scripts are now recorded in plain text and the wallet does not need to be unlocked to retrieve the full script for the P2SH address. This change is made under the assumption that imported redeem scripts should not be secrets themselves, but still require a signature check at the very least.

  • Importing an already-existing redeem script from the importscript JSON-RPC method no longer starts a rescan.

  • Outputs which are being mixed are now locked to prevent accidental spending before the mix completes.

  • Mix denominations above the ticket price are now avoided when mixing large value outputs. This improves pairing with the large volume of mixes occurring from ticket buying, as there are many pairings occurring at the standard denominations below the ticket price to mix CoinJoin change outputs.

  • Mixed ticketbuying using the autobuyer will now default to buy one ticket per client connection if the limit is unset. Setting a larger limit will continue to buy at most limit number of tickets per client connection.

  • Output locking no longer considers differences between the regular and stake transaction trees.

  • Wallet setup may now be performed by providing answers to the prompts from piped output or a redirected file, as long as the passphrase is provided using the --pass flag.

  • Newly created simnet wallets now always use the SLIP0044 coin type. This ensures that the printed mining address during the creation process will not become invalid after a coin type upgrade from the legacy to the SLIP0044 coin type following address discovery.

  • The latest peer-to-peer protocol version is now supported. The miningstate and initstate messages which are expected in this version are replied to with empty responses.

  • Ticket purchasing will now attempt to buy fewer tickets than requested when there is a low balance, either due to a bad estimate of how many tickets could be purchased, or due to outputs being reserved to pay the fees for the new vspd server.

Bug f...

Read more

v1.4.0

05 Feb 16:20
Compare
Choose a tag to compare

dcrwallet 1.4.0

This release focuses on bug fixes and general improvements for both direct
dcrwallet command line users and other projects building on top of dcrwallet
(such as Decrediton and upcoming mobile wallets). A new voting agenda is also
part of this release to enable votes on
DCP0004.
A comprehensive list of improvements and bug fixes follows.

Bug fixes

  • Fixes were made to which and how many addresses and wallet UTXOs are watched
    by the SPV and RPC syncers. This prevents several bugs resulting from missed
    transactions, such as avoiding double spending errors and spends of unknown
    inputs.

  • Committed filter creation and validation is fixed on all ARM processors.
    Previously, an ARM assembly optimization could produce incorrect output for
    the siphash function.

  • During initial wallet creation, the database is now always cleanly closed
    before the process exits. Previously, this was a race and the new wallet
    database may have been missing writes during the initialization step.

  • RPC connection errors to dcrd are now properly logged

  • A possible deadlock situation was removed by adding a missing mutex unlock to
    the SPV peering implementation.

  • Error handling has been improved when querying unmined and unspent ticket
    transactions.

  • The total number of logged transactions processed by the RPC syncer has been
    fixed.

  • The process can be interrupted at startup if while being blocked on acquiring
    the wallet's database lock. Previously, the process would have needed to be
    killed, or wait for an existing running wallet to shutdown.

New features

  • The gRPC method WalletService.ValidateAddress now returns pubkey of P2PKH
    addresses and BIP0044 branch and child index if the address is controlled by
    the wallet.

  • The gRPC method WalletService.ImportScript is now usable by watching-only
    wallets.

  • The gRPC method WalletService.StakeInfo now includes counts of unspent
    tickets.

  • A new gRPC method TicketBuyerV2Service.RunTicketBuyer has been added to run
    the SPV-compatible ticket buyer.

  • A new gRPC method WalletService.GetTicket has been added to query the
    details of an individual ticket by its transaction hash.

  • A new gRPC method WalletService.SweepAccount has been added to sweep all
    UTXOs of an account to a single new output.

  • A new gRPC method WalletService.RpcSync has been added, providing a similar
    as SpvSync to perform wallet synchronization with a dcrd RPC connection.

  • The SPV and RPC syncers now support callbacks for syncing notifications.
    These notifications are also availble to gRPC clients who invoke the syncers.

  • Creating a new simnet wallet now shows an address that can be used for mining
    rewards.

  • RPC syncing connections to dcrd can now be proxied using the --proxy,
    --proxyuser, and --proxypass options.

Other improvements

  • Builds have been converted to use Go Modules. The repository has been split
    into various submodules, making it far easier to write applications that
    import dcrwallet packages as libraries.

  • Wallet database API is exported for projects that need support for alternative
    database drivers (such as dcrandroid).

  • Default transaction relay fee has been dropped to 0.0001 DCR/kB.

  • Transaction size and fee estimation is improved for ticket purchases and any
    transaction that redeems a P2SH output.

  • DCP0001-0003 now apply to simnet from the start of the chain (note that this
    is a hard fork for existing simnets).

  • Log files are never automatically deleted. Previously, log files would be
    rotated and old log files would be automatically removed. This has been
    changed to avoid the loss of potentially important logs.

  • Logs for unexpected database consistency issues have been improved by logging
    the keys and values

Changelog

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

v1.1.2

14 Dec 18:36
0027db2
Compare
Choose a tag to compare
Bump dcrd dep version for v1.1.2 release (#1016)

v1.1.0

22 Sep 17:04
Compare
Choose a tag to compare
Bump for v1.1.0 (#935)

v1.0.7

17 Aug 20:22
Compare
Choose a tag to compare
Update deps.