As we know each block contains a state-root. Following image is taken from https://blog.ethereum.org/2015/11/15/merkling-in-ethereum/.
Constant light client reference: light clients can at any point access all data related to an account by scanning down the state tree in a specific direction.
I am confused related to storage of the state-tree and its access. As I understand: there is only one state, transaction and receipt tree. Since there is one, the tree should be somehow updated at each epoch.
As I understand global state-tree is updated on each block and all clients have access to a single state-tree where latest key/value information is stored.
[Q1] If the state-trie is updated how can we know each accounts balances on previous blocks? What is the algorithm that updates the state-trie at each block.
On this Q's answer, it confirms that I can retrieve any account's balance based on any given block number. web3.eth.getBalance(address, 100)
.
[q2] If there is no transaction occur at a block how its state-root is updated on the next block? As I understand state-root is dependent on the key/value that is stores. If there is no update any of them, how state-root is able to change?
Thank you for your valuable time and help.