<p>Thin client is one that won't download whole blockchain locally on your device. They are useful for those that have small capacity hard-drive or using mobile devices. </p>

CC BY-SA 3.0
2014-11-15T19:11:47.117Z
So what parts of the blockchain does it download?
saloalv
CC BY-SA 3.0
2014-11-16T07:41:46.340Z
@saloalv just the part it needs to: 1. determine your current balance, and 2. create new transactions from your address(es). Typically just a few blocks. And it can even throw old blocks away after certain outputs have been spent.
Maǳi Koǌo
CC BY-SA 3.0
2014-11-15T19:07:08.730Z
2014-11-15T19:07:08.730Z
Sebastian Xawery Wiśniowiecki
<p>A <a href="https://en.bitcoin.it/wiki/Thin_Client_Security#Header-Only_Clients" rel="nofollow noreferrer">thin client</a> is a program which connects to the Bitcoin peer-to-peer (P2P) network but which doesn't fully validate transactions or blocks.  That is, it's a client to the full nodes on the network.</p>
<p>Most thin clients use the Simplified Payment Validation (SPV) method to verify that confirmed transactions are part of a block.  To do this, they connect to a full node on the P2P network and send it a filter (called a Bloom filter) that will match any transactions affecting the client's wallet.  When a new block is created, the client requests a special lightweight version of that block called a Merkle block.</p>
<p>The merkle block includes a block header, a relatively small number of hashes, a list of one-bit flags, and a transaction count.  Using this information---often less than 1 KB of data---the client can build a partial Merkle tree to the block header as illustrated below.  If the hash of the root node of the partial Merkle tree equals the hash of merkle root in the block header, the SPV client has cryptographic proof that the transaction was included in that block.  If that block then gets 6 confirmations at the current network difficulty, then the client has extremely strong proof that the transaction was valid and is accepted by the entire network.</p>
<p><a href="https://i.sstatic.net/sn8XH.gif" rel="nofollow noreferrer"><img src="https://i.sstatic.net/sn8XH.gif" alt="Parsing a merkle block" /></a></p>

<p>(Image taken from MIT-licensed <a href="https://web.archive.org/web/20200501013327/https://bitcoin.org/en/developer-documentation" rel="nofollow noreferrer">Bitcoin.org developer documentation</a>.  I'm also the author of that image.)</p>
<p>The only major downside of the SPV method is that full nodes can simply not tell the thin clients about transactions, making it look like the client hasn't received bitcoins or that a transaction the client broadcast earlier hasn't confirmed.</p>

CC BY-SA 3.0
2014-11-15T19:14:37.263Z
Good informative answer, although not all that concise. Accepted.
saloalv
CC BY-SA 3.0
2014-11-16T00:31:00.957Z
I doubt any answer could be equally informative yet more concise.
Steve V.
CC BY-SA 3.0
2014-11-16T02:57:08.947Z
@GeorgeKimionis great idea!  Linkified "thin clients" in the first sentence with that link.  Thanks!
David A. Harding
CC BY-SA 3.0
2017-10-26T02:32:33.273Z
@DavidA.Harding, What's the difference betwen "thin client" vs "SPV client"?
Pacerier
CC BY-SA 3.0
2017-10-31T19:39:40.873Z
@Pacerier No difference, but you do need to check context.  An SPV client is a client that ensures received payments connect to the header of a block on the most-proof-of-work block chain.  A "thin client" and a "lightweight" client are usually just other names for an SPV client, but sometimes people use those terms to refer to server-trusting wallets that don't check headers at all, such as the Coinbase app or BlockChain.info.
David A. Harding
CC BY-SA 4.0
2014-11-15T19:12:23.000Z
2020-12-19T14:54:13.517Z
2020-12-19T14:54:13.517Z
David A. Harding
<p>I've heard that if you don't want do download gigabytes of data just to use bitcoin you gotta use a thin client. But what is a thin client?
What are the main advantages of a thin bitcoin client and what defines it as such?</p>

CC BY-SA 3.0
2014-11-15T17:08:37.663Z
Related: http://bitcoin.stackexchange.com/questions/2712/thin-client-list
Nick ODell
CC BY-SA 3.0
2014-11-15T17:09:41.280Z
@NickODell Instant related to comment. Bot?
saloalv
CC BY-SA 3.0
2014-11-15T17:11:38.253Z
No, just no life.
Nick ODell
<thin-clients>
What is a thin client?
saloalv
# What is a thin client?

(Asked by: username_0 on 2014-11-15)

I've heard that if you don't want do download gigabytes of data just to use bitcoin you gotta use a thin client. But what is a thin client?
What are the main advantages of a thin bitcoin client and what defines it as such?

**Tags:** thin-clients

> **Comments:**
> **username_1**: Related: http://bitcoin.stackexchange.com/questions/2712/thin-client-list  
> **username_0**: @NickODell Instant related to comment. Bot?  
> **username_1**: No, just no life.  

---

## 2 answers

### Answer by username_4 on 2014-11-15. Score: 28 | Accepted answer

A [thin client](https://en.bitcoin.it/wiki/Thin_Client_Security#Header-Only_Clients) is a program which connects to the Bitcoin peer-to-peer (P2P) network but which doesn't fully validate transactions or blocks. That is, it's a client to the full nodes on the network.

Most thin clients use the Simplified Payment Validation (SPV) method to verify that confirmed transactions are part of a block. To do this, they connect to a full node on the P2P network and send it a filter (called a Bloom filter) that will match any transactions affecting the client's wallet. When a new block is created, the client requests a special lightweight version of that block called a Merkle block.

The merkle block includes a block header, a relatively small number of hashes, a list of one-bit flags, and a transaction count. Using this information---often less than 1 KB of data---the client can build a partial Merkle tree to the block header as illustrated below. If the hash of the root node of the partial Merkle tree equals the hash of merkle root in the block header, the SPV client has cryptographic proof that the transaction was included in that block. If that block then gets 6 confirmations at the current network difficulty, then the client has extremely strong proof that the transaction was valid and is accepted by the entire network.

[![Parsing a merkle block](https://i.sstatic.net/sn8XH.gif)](https://i.sstatic.net/sn8XH.gif)

(Image taken from MIT-licensed [Bitcoin.org developer documentation](https://web.archive.org/web/20200501013327/https://bitcoin.org/en/developer-documentation). I'm also the author of that image.)

The only major downside of the SPV method is that full nodes can simply not tell the thin clients about transactions, making it look like the client hasn't received bitcoins or that a transaction the client broadcast earlier hasn't confirmed.

> **Comments:**
> **username_0**: Good informative answer, although not all that concise. Accepted.  
> **username_5**: I doubt any answer could be equally informative yet more concise.  
> **username_4**: @GeorgeKimionis great idea!  Linkified "thin clients" in the first sentence with that link.  Thanks!  
> **username_6**: @DavidA.Harding, What's the difference betwen "thin client" vs "SPV client"?  
> **username_4**: @username_6 No difference, but you do need to check context.  An SPV client is a client that ensures received payments connect to the header of a block on the most-proof-of-work block chain.  A "thin client" and a "lightweight" client are usually just other names for an SPV client, but sometimes people use those terms to refer to server-trusting wallets that don't check headers at all, such as the Coinbase app or BlockChain.info.  

---

### Answer by username_2 on 2014-11-15. Score: 3

Thin client is one that won't download whole blockchain locally on your device. They are useful for those that have small capacity hard-drive or using mobile devices.

> **Comments:**
> **username_0**: So what parts of the blockchain does it download?  
> **username_3**: @username_0 just the part it needs to: 1. determine your current balance, and 2. create new transactions from your address(es). Typically just a few blocks. And it can even throw old blocks away after certain outputs have been spent.  

---

