As I understand it, lightwallets are inherently difficult for CryptNote currencies because the wallet has to scan every block in the blockchain. This means they can't just request block headers to verify the chain and use bloom filter requests to request certain blocks with their transactions. Is this correct?

What is the best case scenario for an SPV style library then?

If a user is importing an older wallet will they just have to scan the entire blockchain? Or, can they sync all headers then just request the blocks they need using bloom filters or a similar technique?

I've heard some discussion about workarounds to allow sending txs from a lightwallet (request a random subset of TX outputs to be able to mix with). However, I'm more curious about how difficult and what limitations exist with regards to just syncing a wallet in SPV mode.

As an aside, MoneroJ would be an excellent name for a Monero Java library.

1 Answer 1


Basically yes, a wallet has to scan every block in the blockchain to see if any transactions belong to it.

When importing an older wallet, it only needs to scan from the last block known to that old wallet, forward. Depending on the age of the wallet this may be much less than the entire blockchain.

The new wallet code is much faster now because it can just sync block headers for ranges that the wallet doesn't care about. (A newly created wallet can be synced in seconds, instead of hours.) But for ongoing use of an existing wallet, you still need to scan every new block. Being more selective of individual blocks or block ranges could leak information to the server about your identity.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.