MultiBit is a Simplified Payment Verification (SPV) client that uses the merkle root of block headers to validate transactions. I'm wondering however, when an address (private key) is imported into MultiBit, how does it know its balance without going through all the transactions within the blockchain?
When MultiBit imports a private key also in the import file is the key birthdate I.e when it was first generated.
From that date it looks up the most recent checkpoint (about every 2000 blocks) in a list of checkpoints it stores.
Then it contacts a bitcoind and says 'give me all the blocks from block (say) 200,000. Here is the bloom filter I want you to use to filter the blocks'.
This is fairly time consuming compared to if you have a blockstore. (Or something like a remote server like Electrum and Mycelium do). The advantage is that it only uses the Bitcoin Network.
It now has all the relevant transactions for that private key and hence can calculate the overall balance.