A typical ERC20 token will store account balances in a mapping, something like this:
mapping(address => uint) public balances;
Does this mean that, to do a transaction or check a balance on this contract, I have to have the complete state available? Do I need to have every single balance for this token on my system?
With a blockchain-native token, like Ether or Bitcoin, a light client uses techniques like bloom filters to sync just a small subset of the universe of address balances. But this doesn't seem to be possible for tokens that store balances in a single mapping. What strategies can be employed by contract developers to get similar performance characteristics to a native token?