Skip to content

Releases: btcsuite/btcwallet

btcwallet v0.7.0-alpha

23 Nov 16:27
Compare
Choose a tag to compare
Pre-release

New features:

  • Wallet will now detect network inactivity and reconnect to the btcd
    RPC server if the connection was lost (#320)

Bug fixes:

  • Removed data races in the RPC server (#292) and waddrmgr package
    (#293)
  • Corrected handling of btcutil.AddressPubKey addresses when querying
    for a ManagedAddress from the address manager (#313)
  • Fixed signmessage and verifymessage algorithm to match the equivalent
    algorithms used by Core (#324)

Notable developer-related changes:

  • Added support for AppVeyor continuous integration (#299)
  • Take advantage of optimized zeroing from the Go 1.5 release (#286)
  • Added IsError function to waddrmgr to check that an error is a
    ManagerError and contains a matching error code (#289). Simplified
    error handling in the wallet package and RPC server with this function
    (#290).
  • Switched to using a more space efficient data structure for the
    wtxmgr CreditRecord type (#295)
  • Incorporated latest updates to the votingpool package (#315)

Miscellaneous:

  • Updated websocket notification handlers to latest API required by
    btcd (#294)
  • Enabled the logging subsystem of the btcrpcclient package (#328)

Contributors (alphabetical order):

  • Alex Yocom-Piatt
  • cjepson
  • Dave Collins
  • John C. Vernaleo
  • Josh Rickmar
  • Rune T. Aune

btcwallet v0.6.0-alpha

27 May 19:07
Compare
Choose a tag to compare
Pre-release

New features:

  • Add initial account support (#155):
    • Add account names for each account number
    • Create initial account with the "default" name
    • Create new accounts using the createnewaccount RPC
    • All accounts (with the exception of the imported account) may be
      renamed using the renameaccount RPC
    • RPC requests with an unspecified account that default to the unnamed
      account in Bitcoin Core Wallet default to "default", the name of the
      initial account
    • Several RPCs with account parameters do not work with btcwallet
      accounts due to concerns over expectations of API compatibility with
      Bitcoin Core Wallet. A new RPC API is being planned to rectify this
      (#220).
  • Store transactions, transaction history, and spend tracking in the
    database (#217, #234)
    • A full rescan is required when updating from previous wallet
      versions to rebuild the transaction history
  • Add utility (cmd/dropwtxmgr) to drop transaction history and force a
    rescan (#234)
  • Implement the help RPC to return single line usages of all wallet and
    btcd server requests as well as detailed usage for a single request

Bug fixes:

  • Handle chain reorgs by unconfirming transactions from removed blocks
    (#248)
  • Rollback all transaction history when none of the saved recently seen
    block hashes are known to btcd (#234, #281)
  • Prevent the situation where the default account was renamed but cannot
    be renamed back to "" or "default" by removing the special case naming
    policy for the default account (#253)
  • Create the initial account address if needed when calling the
    getaccountaddress RPC (#238)
  • Prevent listsinceblock RPC from including all listtransactions result
    objects for all transactions since the genesis block (fix included in
    #227)
  • Add missing fields to listtransactions and gettransaction RPC results
    (#265)
  • Remove target confirmations limit on listsinceblock results (#266)
  • Add JSON array to report errors creating input signature for
    signrawtransaction RPC (#267)
  • Use negative fees with listtransactions result types (#272)
  • Prevent duplicate wallet lock attempt after timeout if explicitly
    locked (#275)
  • Use correct RPC server JSON-RPC error code for incorrect passphrases
    with a walletpassphrase request (#284)

Regressions:

  • Inserting transactions and marking outputs as controlled by wallet in
    the new transaction database is extremely slow compared to the previous
    in-memory implementation. Later versions may improve this performance
    regression by using write-ahead logging (WAL) and performing more
    updates at a time under a single database transaction.

Notable developer-related changes:

  • Relicense all code to the btcsuite developers (#258)
  • Replace txstore package with wtxmgr, the walletdb-based transaction
    store (#217, #234)
  • Add Cursor API to walletdb for forwards and backwards iteration over
    a bucket (included in #234)
  • Factor out much of main's wallet.go into a wallet package (#213,
    #276, #255)
  • Convert RPC server and client to btcjson v2 API (#233, #227)
    • Help text and single line usages for the help RPC are pregenerated
      from descriptions in the internal/rpchelp package and saved as
      globals in main. Help text must be regenerated (using go generate)
      each time the btcjson struct tags change or the help definitions are
      modified.
  • Add additional features to the votingpool package:
    • Implement StartWithdrawal API to begin an Open Transactions
      withdrawal (#178)
    • Add internal APIs to store withdrawal transactions in the wallet's
      transaction database (#221)
  • Addresses marked as used after appearing publicly on the blockchain or
    in mempool; required for future single-use address support (#207)
  • Modified waddrmgr APIs to use ForEach functions to iterate over
    address strings and managed addresses to improve scability (#216)
  • Move legacy directory under internal directory to prevent importing
    of unmaintained packages (enforced since Go 1.5) (#285)
  • Improve test coverage in the waddrmgr and wtxmgr packages (#239, #217)

Contributors (alphabetical order):

  • Dave Collins
  • Guilherme Salgado
  • Javed Khan
  • Josh Rickmar
  • Manan Patel

MSI Checksums:

SHA256(btcwallet_standalone_0.6.0-alpha_x64.msi)= 7968bceb1f7f18b37861c359912aea30f39e2e03a56085f2f3b26e24462fbff0
SHA256(btcwallet_standalone_0.6.0-alpha_x86.msi)= e5738fb4f308b0341221b3ebb3ebb835e7a0dcbb6c6905b24dfdc5b790bfceba
SHA512(btcwallet_standalone_0.6.0-alpha_x64.msi)= 622bd1e50330236ff68924511aefa73a6b1d7d0bc3f207e273588c5223f909d9cf4fa78bf395e7b9c9eb8e57a032f82a46b049ab717bc7c11a68cc17e82fe818
SHA512(btcwallet_standalone_0.6.0-alpha_x86.msi)= 20820673cd626608abf3753713e15517ead430d282d6cec4471954a52bd6f296468626792c603ccf32928fcaeea1abaa93a3c85d3c07e18dca277a155b3b5e6c

btcwallet v0.5.1-alpha

06 Mar 17:44
Compare
Choose a tag to compare
Pre-release

New features:

  • Add flag (--createtemp) to create a temporary simnet wallet

Bug fixes:

  • Mark newly received transactions confirmed when the wallet is initially created or opened with no addresses

Notable developer-related changes:

  • Refactor the address manager database upgrade paths for easier future upgrades
  • Private key zeroing functions consolidated into the internal zero package and optimized

btcwallet v0.5.0-alpha

03 Mar 18:00
Compare
Choose a tag to compare
Pre-release

New features:

  • Add a new address manager package (waddrmgr) to replace the previous
    wallet/keystore package:
    • BIP0032 hierarchical deterministic keys
    • BIP0043/BIP0044 multi-account hierarchy
    • Strong focus on security:
      • Wallet master encryption keys protected by scrypt PBKDF
      • NaCl-based secretbox cryptography (XSalsa20 and Poly1305)
      • Mandatory encryption of private keys and P2SH redeeming scripts
      • Optional encryption of public data, including extended public keys
        and addresses
      • Different crypto keys for redeeming scripts to mitigate cryptanalysis
      • Hardened against memory scraping through the use of actively clearing
        private material from memory when locked
      • Different crypto keys used for public, private, and script data
      • Ability for different passphrases for public and private data
    • Multi-tier scalable key design to allow instant password changes
      regardless of the number of addresses stored
    • Import WIF keys
    • Import pay-to-script-hash scripts for things such as multi-signature
      transactions
    • Ability to export a watching-only version which does not contain any
      private key material
    • Programmatically detectable errors, including encapsulation of errors
      from packages it relies on
    • Address synchronization capabilities
  • Add a new namespaced database package (walletdb):
    • Key/value store
    • Namespace support
    • Allows multiple packages to have their own area in the database without
      worrying about conflicts
    • Read-only and read-write transactions with both manual and managed modes
    • Nested buckets
    • Supports registration of backend databases
    • Comprehensive test coverage
  • Replace the createencryptedwallet RPC with a wizard-style prompt
    (--create) to create a new walletdb-backed wallet file and import keys
    from the old Armory wallet file (if any)
  • Transaction creation changes:
    • Drop default transaction fee to 0.00001 BTC per kB
    • Use standard script flags provided by the txscript package for
      transaction creation and sanity checking
    • Randomize change output index
    • Includes amounts (total spendable, total needed, and fee) in all
      insufficient funds errors
  • Add support for simnet, the private simulation test network
  • Implement the following Bitcoin Core RPCs:
    • listreceivedbyaddress (#53)
    • lockunspent, listlockunspent (#50, #55)
    • getreceivedbyaddress
    • listreceivedbyaccount
  • Reimplement btcd RPCs which return the best block to use the block most
    recently processed by wallet to avoid confirmation races:
    • getbestblockhash
    • getblockcount
  • Perform clean shutdown on interrupt or when a stop RPC is received (#69)
  • Throttle the number of connected HTTP POST and websocket client
    connections (tunable using the rpcmaxclients and rpcmaxwebsockets config
    options)
  • Provide the ability to disable TLS when connecting to a localhost btcd or
    serving localhost clients

Rescan improvements:

  • Add a rescan notification for when the rescan has completed and no more
    rescan notifications are expected (#99)
  • Use the most recent partial sync height from a rescan progress
    notification when a rescan is restarted after the btcd connection is lost
  • Force a rescan if the transaction store cannot be opened (due to a
    missing file or if the deserialization failed)

RPC compatibility improvements:

  • Allow the use of the * account name to refer to all accounts
  • Make the account parameter optional for the getbalance and
    listalltransactions requests
  • Add iswatchonly field to the validateaddress response result
  • Check address equivalence in verifymessage by comparing pubkeys and pubkey
    hashes rather than requiring the address being verified to be one
    controlled by the wallet and using its private key for verification

Bug fixes:

  • Prevent an out-of-bounds panic when handling a gettransaction RPC.
  • Prevent a panic on client disconnect (#110).
  • Prevent double spending coins when creating multiple transactions at once
    by serializing access to the transaction creation logic (#120)
  • Mark unconfirmed transaction credits as spent when another unconfirmed
    transaction spends one (#91)
  • Exclude immature coinbase outputs from listunspent results (#103)
  • Fix several data and logic races during sync with btcd (#101)
  • Avoid a memory issue from incorrect slice usage which caused both
    duplicate and missing blocks in the transaction store when middle
    inserting transactions from a new block
  • Only spend P2PKH outputs when creating sendfrom/sendmany/sendtoaddress
    transactions (#89)
  • Return the correct UTXO set when fetching all wallet UTXOs by fixing an
    incorrect slice append
  • Remove a deadlock caused by filling the btcd notification channel (#100)
  • Avoid a confirmation race by using the most recently processed block in
    RPC handlers, rather than using the most recently notified block by btcd
  • Marshal empty JSON arrays as [] instead of the JSON null by using
    empty, non-nil Go slices
  • Flush logs and run all deferred functions before main returns and the
    process exits
  • Sync temporary transaction store flat file before closing and renaming
  • Accept hex strings with an odd number of characters

Notable developer-related changes:

  • Switch from the go.net websocket package to gorilla websockets
  • Refactor the RPC server:
    • Move several global variables to the rpcServer struct
    • Dynamically look up appropriate handlers for the current btcd connection
      status and wallet sync state
    • Begin creating websocket notifications by sending to one of many
      notification channels in the rpcServer struct, which are in turn
      marshalled and broadcast to each websocket client
  • Separate the RPC client code into the chain package:
    • Uses btcrpcclient for a btcd websocket RPC client
    • Converts all notification callbacks to typed messages sent over channels
    • Uses an unbounded queue for waiting notifications
  • Import a new voting pool package (votingpool):
    • Create and fetch voting pools and series from a walletdb namespace
    • Generate deposit addresses utilizing m-of-n multisig P2SH scripts
  • Improve transaction creation readability by splitting a monolithic
    function into several smaller ones
  • Check and handle all errors in some way, or explicitly comment why a
    particular error was left unchecked
  • Simplify RPC error handling by wrapping specific errors in unique types to
    create an appropriate btcjson error before the response is marshalled
  • Add a map of unspent outputs (keyed by outpoint) to the transaction store
    for quick lookup of any UTXO and access to the full wallet UTXO set
    without iterating over many transactions looking for unspent credits
  • Modify several data structures and function signatures have been modified
    to reduce the number of needed allocations and be more cache friendly

Miscellaneous:

  • Rewrite paths relative to the data directory when an alternate data
    directory is provided on the command line
  • Switch the websocket endpoint to ws to match btcd
  • Remove the getaddressbalance extension RPC to discourage address reuse and
    encourage watching for expected payments by using listunspent
  • Increase transaction creation performance by moving the sorting of
    transaction outputs by their amount out of an inner loop
  • Add additional logging to the transaction store:
    • Log each transaction added to the store
    • Log each previously unconfirmed transaction that is mined
    • [debug] Log which previous outputs are marked spent by a newly inserted
      debiting transaction
    • [debug] Log each transaction that is removed in a rollback
  • Only log rollbacks if transactions are reorged out of the old chain
  • Save logs to network-specific directories
    (e.g. ~/.btcwallet/logs/testnet3) to match btcd behavior (#114)