In order to support many blockchains in an Ethereum/RSK network, I propose two have “bi-colored” blocks:
A normal transaction have a sender account, a receiver account, an amount, contract data, and final state root. Now, a transaction could participate IN TWO “colored” blockchains: each account has an associated blockchain, and you can transfer from one account/blockchain to another account/blockchain.
To keep consensus, a “bi-colored” transaction has TWO final state roots: one for each blockchain.
A “bi-colored” block has TWO parents, one for each blockchain:
Not every node in the network knows ALL the blockchain states. But a node having the state of the “blue” blockchain can execute each transaction with a “blue” part, and check the final state root after applying the partial transaction to its own partial “blue” world state of the network. That is the interesting part: not all the nodes have to keep the FULL state of the network. It is enough to have many nodes, each controlling one or two colors.
Only the miner node that generated the “bi-colored” block should know the TWO world states, to generate the appropiate world state roots.
An account has a balance in EACH blockchain. But when a user creates an account, its address and use is available in any of the participant networks. So, it is a user decision what amount of balance their accounts have.
There is a difference with contracts: a contract is created in only one blockchain, and its storage is kept in that blockchain.
More details in the next post