# Gavin Andresen # 2011-09-23 15:41:40 # https://bitcointalk.org/index.php?topic=45410.msg541446#msg541446 Bitcoin version 0.4.0 is now available for download at: @p{brk} @s{(link)} @p{par} The main feature in this release is wallet private key encryption; @p{brk} you can set a passphrase that must be entered before sending coins. @p{brk} See below for more information; if you decide to encrypt your wallet, @p{brk} WRITE DOWN YOUR PASSPHRASE AND PUT IT IN A SECURE LOCATION. If you @p{brk} forget or lose your wallet passphrase, you lose your bitcoins. @p{brk} Previous versions of bitcoin are unable to read encrypted wallets, @p{brk} and will crash on startup if the wallet is encrypted. @p{par} Also note: bitcoin version 0.4 uses a newer version of Berkeley DB @p{brk} (bdb version 4.8) than previous versions (bdb 4.7). If you upgrade @p{brk} to version 0.4 and then revert back to an earlier version of bitcoin @p{brk} the it may be unable to start because bdb 4.7 cannot read bdb 4.8 @p{brk} "log" files. @p{par} Notable bug fixes from version 0.3.24: @p{brk} @p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{--} @p{par} Fix several bitcoin-becomes-unresponsive bugs due to multithreading @p{brk} deadlocks. @p{par} Optimize database writes for large (lots of inputs) transactions @p{brk} (fixes a potential denial-of-service attack) @p{par} @p{par} Wallet Encryption @p{brk} @p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{--} @p{brk} Bitcoin supports native wallet encryption so that people who steal your @p{brk} wallet file don't automatically get access to all of your Bitcoins. @p{brk} In order to enable this feature, choose "Encrypt Wallet" from the @p{brk} Options menu. You will be prompted to enter a passphrase, which @p{brk} will be used as the key to encrypt your wallet and will be needed @p{brk} every time you wish to send Bitcoins. If you lose this passphrase, @p{brk} you will lose access to spend all of the bitcoins in your wallet, @p{brk} no one, not even the Bitcoin developers can recover your Bitcoins. @p{brk} This means you are responsible for your own security, store your @p{brk} passphrase in a secure location and do not forget it. @p{par} Remember that the encryption built into bitcoin only encrypts the @p{brk} actual keys which are required to send your bitcoins, not the full @p{brk} wallet. This means that someone who steals your wallet file will @p{brk} be able to see all the addresses which belong to you, as well as the @p{brk} relevant transactions, you are only protected from someone spending @p{brk} your coins. @p{par} It is recommended that you backup your wallet file before you @p{brk} encrypt your wallet. To do this, close the Bitcoin client and @p{brk} copy the wallet.dat file from ~/.bitcoin/ on Linux, /Users/(user @p{brk} name)/Application Support/Bitcoin/ on Mac OSX, and %APPDATA%/Bitcoin/ @p{brk} on Windows (that is /Users/(user name)/AppData/Roaming/Bitcoin on @p{brk} Windows Vista and 7 and /Documents and Settings/(user name)/Application @p{brk} Data/Bitcoin on Windows XP). Once you have copied that file to a @p{brk} safe location, reopen the Bitcoin client and Encrypt your wallet. @p{brk} If everything goes fine, delete the backup and enjoy your encrypted @p{brk} wallet. Note that once you encrypt your wallet, you will never be @p{brk} able to go back to a version of the Bitcoin client older than 0.4. @p{par} Keep in mind that you are always responsible for your own security. @p{brk} All it takes is a slightly more advanced wallet-stealing trojan which @p{brk} installs a keylogger to steal your wallet passphrase as you enter it @p{brk} in addition to your wallet file and you have lost all your Bitcoins. @p{brk} Wallet encryption cannot keep you safe if you do not practice @p{brk} good security, such as running up-to-date antivirus software, only @p{brk} entering your wallet passphrase in the Bitcoin client and using the @p{brk} same passphrase only as your wallet passphrase. @p{par} See the doc/README file in the bitcoin source for technical details @p{brk} of wallet encryption. @p{par} Signed SHA1 checksums of the binary release files: @p{brk} @p{@p{--}-}@p{--}BEGIN PGP SIGNED MESSAGE@p{@p{--}-}@p{--} @p{brk} Hash: SHA1 @p{par} 25c3ec9683d62235afea24d4a147d4616d8a884f bitcoin-0.4.0-linux.tar.gz @p{brk} a800d9fa4aa61527e598708f4ace7f855c22a46b bitcoin-0.4.0-macosx.dmg @p{brk} 1d2c8d82ede5e8aa9f83b59da07e443de89c5c8f bitcoin-0.4.0-src.tar.gz @p{brk} ecf1304ff467bd30dc668b3dadff3044c3c86df1 bitcoin-0.4.0-win32-setup.exe @p{brk} 6034efe23e4bd76b0860f633e81710cd66d499db bitcoin-0.4.0-win32.zip @p{brk} @p{@p{--}-}@p{--}BEGIN PGP SIGNATURE@p{@p{--}-}@p{--} @p{brk} Version: GnuPG v1.4.9 (Darwin) @p{par} iEYEARECAAYFAk58n20ACgkQdYgkL74406ibEACgzyZj86lsQORi5HTs/N3ABCes @p{brk} Pg8AoKFXU1vxiZI9qZOQ5ZET60ewcynW @p{brk} =sY+Q @p{brk} @p{@p{--}-}@p{--}END PGP SIGNATURE@p{@p{--}-}@p{--} @p{par} @p{brk} Full changelog ("git shortlog @p{--}no-merges v0.3.24..") @p{brk} @p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{@p{--}-}@p{--} @p{brk} Abraham Jewowich (1): @p{brk} Fix bug with accessing vchData[0] when vchData is empty. Fix typo in CBase58Data::CompareTo @p{par} Alex B (2): @p{brk} Romanian translation added @p{brk} Spanish translation update @p{par} Alex Waters (1): @p{brk} Updated readme file @p{par} Daniel Folkinshteyn (1): @p{brk} Update the list of seednodes. @p{par} Dawid Spiechowicz (1): @p{brk} added polish wallet encryption messages @p{par} Dean Lee (1): @p{brk} Update to the Chinese Simp translation @p{par} Dev Random (4): @p{brk} Linux gitian config with separate wxWidgets build @p{brk} Mingw gitian with separate wxWidgets and boost @p{brk} Mingw gitian build with deterministic bitcoin.exe by use of faketime @p{brk} Add Gitian Build descriptors for Boost and wxWidgets. @p{par} Doug Huff (1): @p{brk} Make mlock() and munlock() portable to systems that require the address to be on a page boundary. @p{par} Dylan Noblesmith (1): @p{brk} mlock() all private keys in memory @p{par} Eric Hosmer (1): @p{brk} Added crypter to makefile.vc. @p{par} Fabian H jr. (1): @p{brk} Updated checkpoints, maybe Tx fee should be reduced to 0.0001 from 0.0005 and maximum minimum tx should be 0.0010. @p{par} Gavin Andresen (24): @p{brk} Do-nothing MapPort() ifndef USE_UPNP. fixes #450 @p{brk} Don't std::advance past beginning of transactions array. Fixes #465 @p{brk} Remove unused ScanMessageStart function @p{brk} Compile with DEBUG_LOCKORDER to detect inconsistent lock orderings that can cause deadlocks @p{brk} CHECKMULTISIG unit tests. @p{brk} Highlight mis-matching locks @p{brk} Fix rpc-hanging deadlocks @p{brk} Fixed potential deadlocks in GUI code. Also changed semantics of CWalletTx::GetTxTime(); now always returns the time the transaction was received by this node, not the average block time. And added information about -DDEBUG_LOCKORDER to coding.txt. @p{brk} Fix typo ("you own security") @p{brk} SetCrypted() obtains keystore lock, to be safe. @p{brk} Logic running with -keypool=0 was wrong (empty keys were being returned). Fixes #445 @p{brk} Fix RPC call name in error message. @p{brk} obtain cs_wallet mutex to protect vchDefaultKey @p{brk} Fixed regression I introduced: wallets with lots of transactions were unusable in GUI. @p{brk} Fix bad merge: getaccountaddress was broken for new accounts @p{brk} Give hard-coded seed nodes a random last-seen time, to randomize order they're tried. @p{brk} Do not try to download blockchain from 0.3.23 nodes @p{brk} If compiled -DDEBUG_LOCKORDER and run with -debug, print out every mutex lock/unlock (helpful for debugging something-is-holding-a-mutex-too-long problems) @p{brk} Stay connected to seed nodes; disconnecting causes problems if you are trying to make the initial blockchain download. @p{brk} Versions 0.3.20 THROUGH 0.3.23 have trouble with blockchain downloads; avoid them @p{brk} Bumped version numbers to 0.4.0rc1 @p{brk} Optimize database writes for transactions with lots of TxIns. Patch from ArtForz, who discovered the problem. @p{brk} Fix AddAddress cs_mapaddresses/db transaction deadlock @p{brk} Fix QA email address @p{par} Giel van Schijndel (15): @p{brk} fix warning on 64bit systems: cast to pointer from integer of different size [-Wint-to-pointer-cast] @p{brk} fix warnings: expression result unused [-Wunused-value] @p{brk} fix warnings: using the result of an assignment as a condition without parentheses [-Wparentheses] @p{brk} fix warning: comparison of unsigned expression @p{lt} 0 is always false [-Wtautological-compare] @p{brk} fix warning: X enumeration values not handled in switch [-Wswitch-enum] @p{brk} fix warning: unused variable 'X' [-Wunused-variable] @p{brk} fix warning: unused function 'SigIllHandlerSSE2' [-Wunused-function] @p{brk} fix warning: variable ‘nMinDepth’ set but not used [-Wunused-but-set-variable] @p{brk} fix warning: control reaches end of non-void function [-Wreturn-type] @p{brk} Make some global variables less-global (static) @p{brk} Cleanup makefiles such that diffs to them are smaller @p{brk} Move func 'REF' from util.h to serialize.h @p{brk} Start moving protocol-specific code to protocol.[ch]pp @p{brk} Move CAddress to protocol.[ch]pp @p{brk} Move CInv to protocol.[ch]pp @p{par} Han Lin Yap (2): @p{brk} Comment "deprecated" @p{brk} Add a note to only include .po file @p{par} Jay Weisskopf (4): @p{brk} Add logos/branding currently found on bitcoin.org into NSIS installer. @p{brk} Set default compression for NSIS installer to LZMA. @p{brk} Remove NSIS branding from bottom divider. @p{brk} Increase resolution of Windows icon. @p{par} Jeff Garzik (8): @p{brk} Update CWallet::LoadWallet for proper return type. @p{brk} Bump version to 0.3.25 @p{brk} doc/README: word wrap into something readable @p{brk} CAddrDB::LoadAddresses: properly initialize CAddress @p{brk} src/makefile.unix: remove -DFOURWAYSSE2 @p{brk} Add reference python miner, in contrib/pyminer/ @p{brk} README.md: word wrap text file @p{brk} Revert "Define MSG_NOSIGNAL to 0 on platforms where it is unavailable." @p{par} Jeroenz0r (1): @p{brk} Translation from "Open Bitcoin" to "Verstuur Bitcoins" @p{par} JoelKatz (1): @p{brk} Fix UNIX-specific thread handle leak. @p{par} Johannes Henninger (1): @p{brk} Identify as "Bitcoin + version number" when mapping UPnP port @p{par} Luke Dashjr (7): @p{brk} Update nTime after nExtraNonce to avoid potential race (extraNonce being reset due to just-occurred time change after nTime is set) @p{brk} Reset extraNonce only every 15 seconds, just in case some miner is updating time himself and stuff @p{brk} Reset extraNonce only when prevBlock changes, so miners can continue updating the time on their work until it's stale @p{brk} Support for boost filesystem version 3 @p{brk} ignore stuff @p{brk} Save coinbase, not just extraNonce @p{brk} Bugfix: Use timestamp in coinbase rather than "bits", needed to ensure coinbase txn is unique even if address is the same @p{par} Matt Corallo (35): @p{brk} Add minversion to wallet. @p{brk} Add wallet privkey encryption. @p{brk} Set the number of SHA512 rounds based on the speed of the computer. @p{brk} Push unlocked_until in getinfo. @p{brk} Dynamically remove/insert the Options for encryption in the menus. @p{brk} Add the walletlock RPC method to lock the wallet manually. @p{brk} Add Wallet Encryption section to README @p{brk} Use DB Transactions when encrypting wallet. This speeds up the encryption process significantly. @p{brk} Make an invalid addrIncoming so that old clients crash. @p{brk} Update makefile.linux-mingw to work with crypter and UPnP fix. @p{brk} Fix makefile.linux-mingw @p{brk} Fix crashes when a wallet is locked and GetReservedKey() is called @p{brk} Generate Warning when using default key. @p{brk} Fix Build in GetReservedKey() in wallet.cpp @p{brk} Fix bad return values in LoadWallet. @p{brk} Actually use mapAlreadyAskedFor. @p{brk} Fix EncryptKeys crash introduced by a9ba4710, identified by TD. @p{brk} Check for duplicate txins in CheckTransaction. @p{brk} Make it clear that setting proxy requires restart to fully apply. @p{brk} Don't listen if on TOR (resolves #441). @p{brk} Add missing include to serialize.h @p{brk} Add file for transaction tests. @p{brk} Cleanup test suite output to be more useful. @p{brk} Unify copyright notices. @p{brk} Missed a 'password' should be 'passphrase'. @p{brk} Fix incorrect RPC error messages @p{brk} Add specific wallet encryption details to doc/README @p{brk} Upgrade dependancies and tweak build process. @p{brk} Update binary mos to latest translations. @p{brk} Fix build process to actually work. @p{brk} Add binary mo for new translation. @p{brk} Update gitian build descriptors to produce proper builds. @p{brk} Update bitcoin icon to make nsis setup exe deterministic. @p{brk} Update binary mo to match latest po translation. @p{brk} Restructure gitian files and add download config files. @p{par} Michael Bemmerl (4): @p{brk} Basically some grammatical fixes of the German translation. @p{brk} Added German wallet encryption messages translation. @p{brk} Changed Russian translation according to comment in issue 395 @p{brk} Updated German translation @p{par} Michal Zima (1): @p{brk} Updated czech translation @p{par} Nils Schneider (2): @p{brk} log low-level network messages only when fDebug is set @p{brk} missed printf in AbortMessage(); merged printfs in EndMessage @p{par} Patrick Varilly (1): @p{brk} Single DB transaction for all addresses in a message @p{par} Pieter Wuille (11): @p{brk} Prepare codebase for Encrypted Keys. @p{brk} Do not use obsolete CPrivKey for passing keys around @p{brk} Bugfix: add autogenerated addresses to address book @p{brk} get rid of mapPubKeys @p{brk} Use CBitcoinAddress instead of string/uint160 @p{brk} split off CBase58Data from CBitcoinAddress @p{brk} Fix for small change outputs @p{brk} Bugfix: don't overuse limited ExtractAddress @p{brk} avoid strAddress + validity checks @p{brk} SocketHandler thread can be detached @p{brk} Updated dutch translation @p{par} Stéphane Gimenez (1): @p{brk} Single DB transaction for addresses from DNS seeds @p{par} Vegard Nossum (6): @p{brk} Add missing includes to key.h @p{brk} Add missing include to script.h @p{brk} Add missing includes to net.h @p{brk} Fix testing setup @p{brk} Add prototype for EvalScript() to script.h @p{brk} Add a file for script tests @p{par} Venkatesh Srinivas (4): @p{brk} Test for SO_NOSIGPIPE rather than assuming all BSDs support it. @p{brk} Qualify make_tuple with boost:: namespace. @p{brk} Use 'unsigned char' rather than 'char' for pchMessageStart. @p{brk} Define MSG_NOSIGNAL to 0 on platforms where it is unavailable. @p{par} Wladimir J. van der Laan (2): @p{brk} remove magic number: change threshold for nLockTime to constant @p{brk} make SetHash160 return a value (as specified in the function signature) @p{par} cjdelisle (1): @p{brk} wxWidgets needs to be at least version 2.9.1 because wallet crypto uses ToStdString() which is not in 2.9.0 @p{par} ovdeathiam (1): @p{brk} Edited locale/pl/LC_MESSAGES/bitcoin.po via GitHub @p{brk}