This is part 2/2 of a series on accounts & wallets, read part 1 here.
Wallet is an important yet confusing web3 term. That is because the name refers to multiple concepts depending on context: the
wallet client, the
account manager software, or a
public account address. Let’s dig in and disambiguate.
A wallet is software for managing web3 accounts.
Wallet clients are responsible for private key management, application UI, and transaction/asset management. However the boundaries of what a wallet is are blurry and still evolving. Some have described wallets as the operating systems of web3, or the browsers of web3. Neither analogy is perfect, but the idea is correct: wallets are a powerful and foundational piece of the web3 ecosystem.
From an end-user’s perspective, a wallet is the software needed to interact with blockchains: and help with the experience of performing transactions (send tokens, sign using private key, interact with smart contract). Since the data is public, they typically also list token balances, and the transaction history.
Wallets, unlike the physical wallets in our pockets, don't hold tokens directly (that analogy is misleading). Rather, they are a mechanism in which the owner can prove (s)he owns custody by signing transactions with the private key. The blockchain stores the token ledger (a mapping of wallet addresses to their respective balance). This is why transferring tokens is so cheap, we're not moving anything around, simply debiting from one account and crediting another in our global, shared ledger.
When the end-user is directly responsible for the private key (by memorizing the seed phrase), the wallet is called self-custodial or non-custodial (Metamask, Ledger, Rainbow). When a company or other 3rd party manages the private key for the end-user, it is called a custodial wallet (Coinbase, Binance, Magic Link). This is where the adage "not your keys, not your coins" comes in: it is referring to the custody property: whoever controls the private key controls the wallet.
It is hard to exchange fiat money (like dollars) for cryptocurrency tokens without going through a centralized exchange, and use a custodial wallet in the process. Most users therefore have multiple wallets, some custodial and others not, and transfer tokens from the custodial ones to the self-custodial ones to gain custody.
Just like web browsers allow users to interact directly with the web through URLs, wallets allow users to interact directly with web3 nodes through JSON-RPC calls, which are handled by providers (Infura, Alchemy).