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