This is a proposal to split witnesses into 2 complementary parts: data
and proofs
, allowing for stateless clients to process just the necessary data without the merkle proofs (and thus greatly reducing network traffic) and without proving the stateRoot
, while retaining a high degree of certainty for the data being processed thanks to a new witnessHash
field in the block header (a hash of the hashes of the data and the merkle proofs) secured by the consensus layer, with the option to retrieve the proofs as well and fully validate the state transition.
The biggest motivation for this is the reduction of witness sizes, which are dominated by merkle proofs. An additional benefit might be faster stateless client execution and faster beam sync (a new-ish take on it) if the stateRoot
check is postponed (compared to constantly re-merkelizing the state trie all the way up to the top after every block).