A wallet stores the information necessary to transact bitcoins. While wallets are often described as a place to hold[66] or store bitcoins,[67] due to the nature of the system, bitcoins are inseparable from the blockchain transaction ledger. A better way to describe a wallet is something that "stores the digital credentials for your bitcoin holdings"[67] and allows you to access (and spend) them. Bitcoin uses public-key cryptography, in which two cryptographic keys, one public and one private, are generated.[68] At its most basic, a wallet is a collection of these keys.
There are several types of wallets. Software wallets connect to the network and allow spending bitcoins in addition to holding the credentials that prove ownership.[69] Software wallets can be split further in two categories: full clients and lightweight clients.
Full clients verify transactions directly on a local copy of the blockchain (over 80 GB as of November 2016[70]). Because of its size / complexity, the entire blockchain is not suitable for all computing devices.
Lightweight clients on the other hand consult a full client to send and receive transactions without requiring a local copy of the entire blockchain (see simplified payment verification – SPV). This makes lightweight clients much faster to setup and allows them to be used on low-power, low-bandwidth devices such as smartphones. When using a lightweight wallet however, the user must trust the server to a certain degree. When using a lightweight client, the server can not steal bitcoins, but it can report faulty values back to the user. With both types of software wallets, the users are responsible for keeping their private keys in a secure place.[71]
Besides software wallets, Internet services called online wallets offer similar functionality but may be easier to use. In this case, credentials to access funds are stored with the online wallet provider rather than on the user's hardware.[72][73] As a result, the user must have complete trust in the wallet provider. A malicious provider or a breach in server security may cause entrusted bitcoins to be stolen. An example of such security breach occurred with Mt. Gox in 2011.[74]
Physical wallets also exist and are more secure, as they store the credentials necessary to spend bitcoins offline.[67] Examples combine a novelty coin with these credentials printed on metal,[75] Others are simply paper printouts. Another type of wallet called a hardware wallet keeps credentials offline while facilitating transactions.[76]
Reference implementation[edit]
The first wallet program was released in 2009 by Satoshi Nakamoto as open-source code.[14] Sometimes referred to as the "Satoshi client," this is also known as the reference client because it serves to define the bitcoin protocol and acts as a standard for other implementations.[69] In version 0.5 the client moved from the wxWidgets user interface toolkit to Qt, and the whole bundle was referred to as Bitcoin-Qt.[69] After the release of version 0.9, the software bundle was renamed Bitcoin Core to distinguish itself from the network.[77][78] Today, other forks of Bitcoin Core exist such as Bitcoin XT, Bitcoin Classic, and Bitcoin Unlimited.[79][80]