CHANGES raw

   1  ============================================================================
   2  User visible changes for btcwallet
   3    A wallet daemon for pod, written in Go
   4  ============================================================================
   5  
   6  Changes in 0.7.0 (Mon Nov 23 2015)
   7    - New features:
   8      - Wallet will now detect network inactivity and reconnect to the pod
   9        RPC server if the connection was lost (#320)
  10  
  11    - Bug fixes:
  12      - Removed data races in the RPC server (#292) and waddrmgr package
  13        (#293)
  14      - Corrected handling of btcutil.AddressPubKey addresses when querying
  15        for a ManagedAddress from the address manager (#313)
  16      - Fixed signmessage and verifymessage algorithm to match the equivalent
  17        algorithms used by Core (#324)
  18  
  19    - Notable developer-related changes:
  20      - Added support for AppVeyor continuous integration (#299)
  21      - Take advantage of optimized zeroing from the Go 1.5 release (#286)
  22      - Added IsError function to waddrmgr to check that an error is a
  23        ManagerError and contains a matching error code (#289).  Simplified
  24        error handling in the wallet package and RPC server with this function
  25        (#290).
  26      - Switched to using a more space efficient data structure for the
  27        wtxmgr CreditRecord type (#295)
  28      - Incorporated latest updates to the votingpool package (#315)
  29  
  30    - Miscellaneous:
  31      - Updated websocket notification handlers to latest API required by
  32        pod (#294)
  33      - Enabled the logging subsystem of the rpcclient package (#328)
  34  
  35    - Contributors (alphabetical order):
  36      - Alex Yocom-Piatt
  37      - cjepson
  38      - Dave Collins
  39      - John C. Vernaleo
  40      - Josh Rickmar
  41      - Rune T. Aune
  42  
  43  Changes in 0.6.0 (Wed May 27 2015)
  44    - New features:
  45      - Add initial account support (#155):
  46        - Add account names for each account number
  47        - Create initial account with the "default" name
  48        - Create new accounts using the createnewaccount RPC
  49        - All accounts (with the exception of the imported account) may be
  50          renamed using the renameaccount RPC
  51        - RPC requests with an unspecified account that default to the unnamed
  52          account in Bitcoin Core Wallet default to "default", the name of the
  53          initial account
  54        - Several RPCs with account parameters do not work with btcwallet
  55          accounts due to concerns over expectations of API compatibility with
  56          Bitcoin Core Wallet.  A new RPC API is being planned to rectify this
  57          (#220).
  58      - Store transactions, transaction history, and spend tracking in the
  59        database (#217, #234)
  60        - A full rescan is required when updating from previous wallet
  61          versions to rebuild the transaction history
  62      - Add utility (cmd/dropwtxmgr) to drop transaction history and force a
  63        rescan (#234)
  64      - Implement the help RPC to return single line usages of all wallet and
  65        pod server requests as well as detailed usage for a single request
  66  
  67    - Bug fixes:
  68      - Handle chain reorgs by unconfirming transactions from removed blocks
  69        (#248)
  70      - Rollback all transaction history when none of the saved recently seen
  71        block hashes are known to pod (#234, #281)
  72      - Prevent the situation where the default account was renamed but cannot
  73        be renamed back to "" or "default" by removing the special case naming
  74        policy for the default account (#253)
  75      - Create the initial account address if needed when calling the
  76        getaccountaddress RPC (#238)
  77      - Prevent listsinceblock RPC from including all listtransactions result
  78        objects for all transactions since the genesis block (fix included in
  79        #227)
  80      - Add missing fields to listtransactions and gettransaction RPC results
  81        (#265)
  82      - Remove target confirmations limit on listsinceblock results (#266)
  83      - Add JSON array to report errors creating input signature for
  84        signrawtransaction RPC (#267)
  85      - Use negative fees with listtransactions result types (#272)
  86      - Prevent duplicate wallet lock attempt after timeout if explicitly
  87        locked (#275)
  88      - Use correct RPC server JSON-RPC error code for incorrect passphrases
  89        with a walletpassphrase request (#284)
  90  
  91    - Regressions:
  92      - Inserting transactions and marking outputs as controlled by wallet in
  93        the new transaction database is extremely slow compared to the previous
  94        in-memory implementation.  Later versions may improve this performance
  95        regression by using write-ahead logging (WAL) and performing more
  96        updates at a time under a single database transaction.
  97  
  98    - Notable developer-related changes:
  99      - Relicense all code to the btcsuite developers (#258)
 100      - Replace txstore package with wtxmgr, the walletdb-based transaction
 101        store (#217, #234)
 102      - Add Cursor API to walletdb for forwards and backwards iteration over
 103        a bucket (included in #234)
 104      - Factor out much of main's wallet.go into a wallet package (#213,
 105        #276, #255)
 106      - Convert RPC server and client to btcjson v2 API (#233, #227)
 107        - Help text and single line usages for the help RPC are pregenerated
 108          from descriptions in the internal/rpchelp package and saved as
 109          globals in main.  Help text must be regenerated (using `go generate`)
 110          each time the btcjson struct tags change or the help definitions are
 111          modified.
 112      - Add additional features to the votingpool package:
 113        - Implement StartWithdrawal API to begin an Open Transactions
 114          withdrawal (#178)
 115        - Add internal APIs to store withdrawal transactions in the wallet's
 116          transaction database (#221)
 117      - Addresses marked as used after appearing publicly on the blockchain or
 118        in mempool; required for future single-use address support (#207)
 119      - Modified waddrmgr APIs to use ForEach functions to iterate over
 120        address strings and managed addresses to improve scability (#216)
 121      - Move legacy directory under internal directory to prevent importing
 122        of unmaintained packages (enforced since Go 1.5) (#285)
 123      - Improve test coverage in the waddrmgr and wtxmgr packages (#239, #217)
 124  
 125    - Contributors (alphabetical order):
 126      - Dave Collins
 127      - Guilherme Salgado
 128      - Javed Khan
 129      - Josh Rickmar
 130      - Manan Patel
 131  
 132  Changes in 0.5.1 (Fri Mar 06 2015)
 133    - New features:
 134      - Add flag (--createtemp) to create a temporary simnet wallet
 135  
 136    - Bug fixes:
 137      - Mark newly received transactions confirmed when the wallet is initially
 138        created or opened with no addresses
 139  
 140    - Notable developer-related changes:
 141      - Refactor the address manager database upgrade paths for easier future
 142        upgrades
 143      - Private key zeroing functions consolidated into the internal zero package
 144        and optimized
 145  
 146  Changes in 0.5.0 (Tue Mar 03 2015)
 147    - New features:
 148      - Add a new address manager package (waddrmgr) to replace the previous
 149        wallet/keystore package:
 150        - BIP0032 hierarchical deterministic keys
 151        - BIP0043/BIP0044 multi-account hierarchy
 152        - Strong focus on security:
 153          - Wallet master encryption keys protected by scrypt PBKDF
 154          - NaCl-based secretbox cryptography (XSalsa20 and Poly1305)
 155          - Mandatory encryption of private keys and P2SH redeeming scripts
 156          - Optional encryption of public data, including extended public keys
 157            and addresses
 158          - Different crypto keys for redeeming scripts to mitigate cryptanalysis
 159          - Hardened against memory scraping through the use of actively clearing
 160            private material from memory when locked
 161          - Different crypto keys used for public, private, and script data
 162          - Ability for different passphrases for public and private data
 163        - Multi-tier scalable key design to allow instant password changes
 164          regardless of the number of addresses stored
 165        - Import WIF keys
 166        - Import pay-to-script-hash scripts for things such as multi-signature
 167          transactions
 168        - Ability to export a watching-only version which does not contain any
 169          private key material
 170        - Programmatically detectable errors, including encapsulation of errors
 171          from packages it relies on
 172        - Address synchronization capabilities
 173      - Add a new namespaced database package (walletdb):
 174        - Key/value store
 175        - Namespace support
 176        - Allows multiple packages to have their own area in the database without
 177          worrying about conflicts
 178        - Read-only and read-write transactions with both manual and managed modes
 179        - Nested buckets
 180        - Supports registration of backend databases
 181        - Comprehensive test coverage
 182      - Replace the createencryptedwallet RPC with a wizard-style prompt
 183        (--create) to create a new walletdb-backed wallet file and import keys
 184        from the old Armory wallet file (if any)
 185      - Transaction creation changes:
 186        - Drop default transaction fee to 0.00001 DUO per kB
 187        - Use standard script flags provided by the txscript package for
 188          transaction creation and sanity checking
 189        - Randomize change output index
 190        - Includes amounts (total spendable, total needed, and fee) in all
 191          insufficient funds errors
 192      - Add support for simnet, the private simulation test network
 193      - Implement the following Bitcoin Core RPCs:
 194        - listreceivedbyaddress (#53)
 195        - lockunspent, listlockunspent (#50, #55)
 196        - getreceivedbyaddress
 197        - listreceivedbyaccount
 198      - Reimplement pod RPCs which return the best block to use the block most
 199        recently processed by wallet to avoid confirmation races:
 200        - getbestblockhash
 201        - getblockcount
 202      - Perform clean shutdown on interrupt or when a stop RPC is received (#69)
 203      - Throttle the number of connected HTTP POST and websocket client
 204        connections (tunable using the rpcmaxclients and rpcmaxwebsockets config
 205        options)
 206      - Provide the ability to disable TLS when connecting to a localhost pod or
 207        serving localhost clients
 208  
 209    - Rescan improvements:
 210      - Add a rescan notification for when the rescan has completed and no more
 211        rescan notifications are expected (#99)
 212      - Use the most recent partial sync height from a rescan progress
 213        notification when a rescan is restarted after the pod connection is lost
 214      - Force a rescan if the transaction store cannot be opened (due to a
 215        missing file or if the deserialization failed)
 216  
 217    - RPC compatibility improvements:
 218      - Allow the use of the `*` account name to refer to all accounts
 219      - Make the account parameter optional for the getbalance and
 220        listalltransactions requests
 221      - Add iswatchonly field to the validateaddress response result
 222      - Check address equivalence in verifymessage by comparing pubkeys and pubkey
 223        hashes rather than requiring the address being verified to be one
 224        controlled by the wallet and using its private key for verification
 225  
 226    - Bug fixes:
 227      - Prevent an out-of-bounds panic when handling a gettransaction RPC.
 228      - Prevent a panic on client disconnect (#110).
 229      - Prevent double spending coins when creating multiple transactions at once
 230        by serializing access to the transaction creation logic (#120)
 231      - Mark unconfirmed transaction credits as spent when another unconfirmed
 232        transaction spends one (#91)
 233      - Exclude immature coinbase outputs from listunspent results (#103)
 234      - Fix several data and logic races during sync with pod (#101)
 235      - Avoid a memory issue from incorrect slice usage which caused both
 236        duplicate and missing blocks in the transaction store when middle
 237        inserting transactions from a new block
 238      - Only spend P2PKH outputs when creating sendfrom/sendmany/sendtoaddress
 239        transactions (#89)
 240      - Return the correct UTXO set when fetching all wallet UTXOs by fixing an
 241        incorrect slice append
 242      - Remove a deadlock caused by filling the pod notification channel (#100)
 243      - Avoid a confirmation race by using the most recently processed block in
 244        RPC handlers, rather than using the most recently notified block by pod
 245      - Marshal empty JSON arrays as `[]` instead of the JSON `null` by using
 246        empty, non-nil Go slices
 247      - Flush logs and run all deferred functions before main returns and the
 248        process exits
 249      - Sync temporary transaction store flat file before closing and renaming
 250      - Accept hex strings with an odd number of characters
 251  
 252    - Notable developer-related changes:
 253      - Switch from the go.net websocket package to gorilla websockets
 254      - Refactor the RPC server:
 255        - Move several global variables to the RPCServer struct
 256        - Dynamically look up appropriate handlers for the current pod connection
 257          status and wallet sync state
 258        - Begin creating websocket notifications by sending to one of many
 259          notification channels in the RPCServer struct, which are in turn
 260          marshalled and broadcast to each websocket client
 261      - Separate the RPC client code into the chain package:
 262        - Uses rpcclient for a pod websocket RPC client
 263        - Converts all notification callbacks to typed messages sent over channels
 264        - Uses an unbounded queue for waiting notifications
 265      - Import a new voting pool package (votingpool):
 266        - Create and fetch voting pools and series from a walletdb namespace
 267        - Generate deposit addresses utilizing m-of-n multisig P2SH scripts
 268      - Improve transaction creation readability by splitting a monolithic
 269        function into several smaller ones
 270      - Check and handle all errors in some way, or explicitly comment why a
 271        particular error was left unchecked
 272      - Simplify RPC error handling by wrapping specific errors in unique types to
 273        create an appropriate btcjson error before the response is marshalled
 274      - Add a map of unspent outputs (keyed by outpoint) to the transaction store
 275        for quick lookup of any UTXO and access to the full wallet UTXO set
 276        without iterating over many transactions looking for unspent credits
 277      - Modify several data structures and function signatures have been modified
 278        to reduce the number of needed allocations and be more cache friendly
 279  
 280    - Miscellaneous:
 281      - Rewrite paths relative to the data directory when an alternate data
 282        directory is provided on the command line
 283      - Switch the websocket endpoint to `ws` to match pod
 284      - Remove the getaddressbalance extension RPC to discourage address reuse and
 285        encourage watching for expected payments by using listunspent
 286      - Increase transaction creation performance by moving the sorting of
 287        transaction outputs by their amount out of an inner loop
 288      - Add additional logging to the transaction store:
 289        - Log each transaction added to the store
 290        - Log each previously unconfirmed transaction that is mined
 291        - [debug] Log which previous outputs are marked spent by a newly inserted
 292          debiting transaction
 293        - [debug] Log each transaction that is removed in a rollback
 294      - Only log rollbacks if transactions are reorged out of the old chain
 295      - Save logs to network-specific directories
 296        (e.g. ~/.btcwallet/logs/testnet3) to match pod behavior (#114)
 297  
 298  Changes in 0.4.0 (Sun May 25 2014)
 299    - Implement the following standard bitcoin server RPC requests:
 300      - signmessage (https://github.com/conformal/btcwallet/issues/58)
 301      - verifymessage (https://github.com/conformal/btcwallet/issues/61)
 302      - listunspent (https://github.com/conformal/btcwallet/issues/54)
 303      - validateaddress (https://github.com/conformal/btcwallet/issues/60)
 304      - addressmultisig (https://github.com/conformal/btcwallet/issues/37)
 305      - createmultisig (https://github.com/conformal/btcwallet/issues/37)
 306      - signrawtransaction (https://github.com/conformal/btcwallet/issues/59)
 307  
 308    - Add authenticate extension RPC request to authenticate a websocket
 309      session without requiring the use of the HTTP Authorization header
 310  
 311    - Add podusername and podpassword options to allow separate
 312      authentication credentials from wallet clients when authenticating to a
 313      pod websocket RPC server
 314  
 315    - Fix RPC response passthrough: JSON unmarshaling and marshaling is now
 316      delayed until necessary and JSON result objects from pod are sent to
 317      clients directly without an extra decode+encode that may change the
 318      representation of large integer values
 319  
 320    - Fix several websocket client connection issues:
 321      - Disconnect clients are cleanly removed without hanging on any final
 322        sends
 323      - Set deadline for websocket client sends to prevent hanging on
 324        misbehaving clients or clients with a bad connection
 325  
 326    - Fix return result for dumprivkey by always padding the private key bytes
 327      to a length of 32
 328  
 329    - Fix rescan for transaction history for imported addresses
 330      (https://github.com/conformal/btcwallet/issues/74)
 331  
 332    - Fix listsinceblock request handler to consider the minimum confirmation
 333      parameter (https://github.com/conformal/btcwallet/issues/80)
 334  
 335    - Fix several RPC handlers which require an unlocked wallet to check
 336      for an unlocked wallet before continuing
 337      (https://github.com/conformal/btcwallet/issues/65)
 338  
 339    - Fix handling for block rewards (coinbase transactions):
 340      - Update listtransactions results to use "generate" category for
 341        coinbase outputs
 342      - Prevent inclusion of immature coinbase outputs for newly created
 343        transactions
 344  
 345    - Rewrite the transaction store to handle several issues regarding
 346      transation malleability and performance issues
 347      - The new transaction store is written to disk in a different format
 348        then before, and upgrades will require a rescan to rebuild the
 349        transaction history
 350  
 351    - Improve rescan:
 352      - Begin rescan with known UTXO set at start height
 353      - Serialize executation of all rescan requests
 354      - Merge waiting rescan jobs so all jobs can be handled with a single
 355        rescan
 356      - Support parially synced addresses in the keystore and incrementally
 357        mark rescan progress.  If a rescan is unable to continue (wallet 
 358        closes, pod disconnects, etc.) a new rescan can start at the last
 359        synced chain height
 360  
 361    - Notify (with an unsolicited notification) websocket clients of pod
 362      connection state
 363  
 364    - Improve logging:
 365      - Log reason for disconnecting a websocket client
 366  
 367    - Updates for pod websocket API changes
 368  
 369    - Stability fixes, internal API changes, general code cleanup, and comment
 370      corrections
 371  
 372  Changes in 0.3.0 (Mon Feb 10 2014)
 373    - Use correct hash algorithm for chained addresses (fixes a bug where
 374      address chaining was still deterministic, but forked from Armory and
 375      previous btcwallet implementations)
 376  
 377    - Change websocket endpoint to connect to pod 0.6.0-alpha
 378  
 379    - Redo server implementation to serialize handling of client requests
 380  
 381    - Redo account locking to greatly reduce btcwallet lockups caused by
 382      incorrect mutex usage
 383  
 384    - Open all accounts, rather than just the default account, at startup
 385  
 386    - Generate new addresses using pubkey chaining if keypool is depleted and
 387      wallet is locked
 388  
 389    - Make maximum keypool size a configuration option (keypoolsize)
 390  
 391    - Add disallowfree configuration option (default false) to force adding
 392      the minimum fee to all outbound transactions
 393  
 394    - Implement the following standard bitcoin server RPC requests:
 395      - getinfo (https://github.com/conformal/btcwallet/issues/63)
 396      - getrawchangeaddress (https://github.com/conformal/btcwallet/issues/41)
 397      - getreceivedbyaccount (https://github.com/conformal/btcwallet/issues/42)
 398      - gettransaction (https://github.com/conformal/btcwallet/issues/44)
 399      - keypoolrefill (https://github.com/conformal/btcwallet/issues/48)
 400      - listsinceblock (https://github.com/conformal/btcwallet/issues/52)
 401      - sendtoaddress (https://github.com/conformal/btcwallet/issues/56)
 402  
 403    - Add empty (unimplemented) handlers for the following RPC requests so
 404      requests are not passed down to pod:
 405      - getblocktemplate
 406      - getwork
 407      - stop
 408  
 409    - Add RPC extension request, exportwatchingwallet, to export an account
 410      with a watching-only wallet from an account with a hot wallet that
 411      may be used by a separate btcwallet instance
 412  
 413    - Require all account wallets to share the same passphrase
 414  
 415    - Change walletlock and walletpassphrase RPC requests to lock or unlock
 416      all account wallets
 417  
 418    - Allow opening accounts with watching-only wallets
 419  
 420    - Return txid for sendfrom RPC requests
 421      (https://github.com/conformal/btcwallet/issues/64)
 422  
 423    - Rescan imported private keys in background
 424      (https://github.com/conformal/btcwallet/issues/34)
 425  
 426    - Do not import duplicate private keys
 427      (https://github.com/conformal/btcwallet/issues/35)
 428  
 429    - Write all three account files for a new account, rather than just
 430      the wallet (https://github.com/conformal/btcwallet/issues/30)
 431  
 432    - Create any missing directories before writing autogenerated certificate
 433      pair
 434  
 435    - Fix rescanning of a new account's root address
 436  
 437    - Fix error in the wallet file serialization causing duplicate address
 438      encryption attempts
 439  
 440    - Fix issue calculating eligible transaction inputs caused by a bad
 441      confirmation check
 442  
 443    - Fix file locking issue on Windows caused by not closing files before
 444      renaming
 445  
 446    - Fix typos in README file
 447  
 448  Changes in 0.2.1 (Thu Jan 10 2014)
 449    - Fix a mutex issue which caused btcwallet to lockup on all
 450      RPC requests needing to read or write an account
 451  
 452  Changes in 0.2.0 (Thu Jan 09 2014)
 453    - Enable mainnet support (disabled by default, use --mainnet to enable)
 454  
 455    - Don't hardcode localhost pod connections.  Instead, add a --connect
 456      option to specify the hostname or address and port of a local or
 457      remote pod instance
 458      (https://github.com/conformal/btcwallet/issues/1)
 459  
 460    - Remove --serverport port and replace with --listen.  This option works
 461      just like pod's --rpclisten  and allows to specify the interfaces to
 462      listen for RPC connections
 463  
 464    - Require TLS and Basic HTTP authentication before wallet can be
 465      controlled over RPC
 466  
 467    - Refill keypool if wallet is unlocked and keypool is emptied
 468  
 469    - Detect and rollback saved tx/utxo info after pod performs blockchain
 470      reorganizations while btcwallet was disconnected
 471  
 472    - Add support for the following standard bitcoin JSON-RPC calls:
 473      - dumpprivkey (https://github.com/conformal/btcwallet/issues/9)
 474      - getaccount
 475      - getaccountaddress
 476      - importprivkey (https://github.com/conformal/btcwallet/issues/2)
 477      - listtransactions (https://github.com/conformal/btcwallet/issues/12)
 478  
 479    - Add several extension RPC calls for websocket connections:
 480      - getaddressbalance: get the balance associated with a single address
 481      - getunconfirmedbalance: get total balance for unconfirmed transactions
 482      - listaddresstransactions: list transactions for a single address
 483        (https://github.com/conformal/btcwallet/issues/27)
 484      - listalltransactions: lists all transactions without specifying a range
 485  
 486    - Make RPC extensions available only to websocket connections, with the
 487      exception of createencryptedwallet
 488  
 489    - Add dummy handlers for unimplemented wallet RPC calls
 490      (https://github.com/conformal/btcwallet/issues/29)
 491  
 492    - Add socks5/tor proxy support
 493  
 494    - Calculate and add minimum transaction fee to created transactions
 495  
 496    - Use OS-specific rename calls to provide atomic file renames which
 497      can replace a currently-existing file
 498      (https://github.com/conformal/btcwallet/issues/20)
 499  
 500    - Move account files to a single directory per bitcoin network to
 501      prevent a future scaling issue
 502      (https://github.com/conformal/btcwallet/issues/16)
 503  
 504    - Fix several data races and mutex mishandling
 505  
 506    - Fix a bug where the RPC server hung on requests requiring pod
 507      when a pod connection was never established
 508  
 509    - Fix a bug where creating account files did not create all necessary
 510      directories (https://github.com/conformal/btcwallet/issues/15)
 511  
 512    - Fix a bug where '~' did not expand to a home or user directory
 513      (https://github.com/conformal/btcwallet/issues/17)
 514  
 515    - Fix a bug where returning account names as strings did not remove
 516      trailing ending 0s
 517  
 518    - Fix a bug where help usage was displayed twice using the -h or --help
 519      flag
 520  
 521    - Fix sample listening address in sample configuration file
 522  
 523    - Update sample configuration file with all available options with
 524      descriptions and defaults for each
 525  
 526  Initial Release 0.1.0 (Wed Nov 13 2013)
 527    - Initial release
 528